xboxdevwiki
bitnami_mediawiki
https://xboxdevwiki.net/Main_Page
MediaWiki 1.28.0
first-letter
Media
Special
Talk
User
User talk
xboxdevwiki
xboxdevwiki talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Main Page
0
1
1
2016-12-05T07:21:04Z
MediaWiki default
0
wikitext
text/x-wiki
<strong>MediaWiki has been installed.</strong>
Consult the [https://meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
3b35bb5dedd5f6980415f4918b3d60d2248c89cb
2
1
2016-12-30T13:16:16Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
* [http://xqemu.com xqemu Xbox emulator]
* [https://github.com/xqemu/nxdk New Xbox Development Kit]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
e98ab535aa67a015c30811e6bc6c43b3fafc1e13
10
2
2016-12-30T13:39:20Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
b2ee81025489a447df50850a6fbe071fb8f5e59a
11
10
2016-12-30T13:47:56Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
Chat with us in #xqemu on freenode.
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
[[Chihiro]]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
4338e02e5e5ea20ea91d0ec860174c0402d1f9f4
12
11
2016-12-30T13:52:11Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
[[Chihiro]]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
dc4d9a25271e96280765dd1dc9d42aefd84e0f73
13
12
2016-12-30T13:54:36Z
151.217.214.155
0
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
3196b86a38da6c9ec8c5982c1fd3827a00d5a6f3
14
13
2016-12-30T13:57:07Z
151.217.214.155
0
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
3342615fbf06778152f35efecb088b7d8c2eb8be
19
14
2016-12-30T14:03:36Z
151.217.214.155
0
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
206231dc5f247a1dbc59dc20ea3ed594e7a08ac1
21
19
2016-12-30T14:04:34Z
151.217.214.155
0
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
461ce87ec5362b88e75b1b5a73e42e990181a4bd
24
21
2016-12-30T14:10:22Z
151.217.214.155
0
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
9e632c6fbcff95cd7d2344cee3f588d6d4fcc1e8
27
24
2016-12-30T14:16:23Z
151.217.214.155
0
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
2e97918cc94e9f5d4b2a84fe7350327defb9c843
31
27
2017-01-04T12:03:34Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
7d1e73b1c488d6db360bbdfbb4287c44bb92da69
5000
31
2017-03-19T10:36:53Z
JayFoxRox
2
/* xboxdevwiki.net */
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
0f5f91e72539f0f20dc7ff46a3bd21a55fbb5038
5002
5000
2017-03-23T11:25:51Z
Eighthpence
2472
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[Bios]]
** [[MCPX]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
be2448d3dd542f96b9207101c664dad2741e1b58
5003
5002
2017-03-23T11:26:01Z
Eighthpence
2472
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[BIOS]]
** [[MCPX]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
052d10ac2cd24a33f9c62f921e1d9ca1369df1b3
5004
5003
2017-03-23T11:26:58Z
Eighthpence
2472
/* xboxdevwiki.net */
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
475318ccbb070b8de9a9bacc662c2eee12b703c5
5014
5004
2017-03-23T14:04:20Z
Eighthpence
2472
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [[cxbx-reloaded]]
* [[cxbx]]
* [[dxbx]]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
8f396e6e64f52389a1e6048935d9c67a1607b91e
Resources
0
3
4
2016-12-30T13:22:13Z
JayFoxRox
2
Created page with "Random resources about xbox hacking [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005] [http://www..."
wikitext
text/x-wiki
Random resources about xbox hacking
[https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
[http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
7c7ce96726cdb69709cedcc8107d9c3c05e9bef6
5
4
2016-12-30T13:24:46Z
JayFoxRox
2
wikitext
text/x-wiki
Random resources about xbox hacking
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
* [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
b6e6fbeef1ddcb0fc866be21278075110cf824fb
23
5
2016-12-30T14:08:33Z
151.217.214.155
0
wikitext
text/x-wiki
Random resources about xbox hacking
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
* [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
e41592c6f0e0038abcf0b3ece049bd4ac6a1d804
34
23
2017-01-04T12:25:44Z
JayFoxRox
2
wikitext
text/x-wiki
Random resources about xbox hacking
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
* [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
6882492a44d778f967a282ee88cb8240c4f5c89a
4999
34
2017-03-19T10:33:54Z
JayFoxRox
2
wikitext
text/x-wiki
Random resources about xbox hacking
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Matt Borgerson about the Xbox bootrom]
1e2bbb359875543c2768a07b2637403fbc49960a
Engine List
0
4
6
2016-12-30T13:26:49Z
JayFoxRox
2
Created page with "There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I’ll remove them manually… = GoldSrc = {| !..."
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I’ll remove them manually…
= GoldSrc =
{|
! Title
|-
| Counter-Strike
|}
= Source Engine =
{|
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{|
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{|
!width="10%"| Title
!width="8%"| Year
!width="13%"| Platform
!width="27%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox, PC
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox, PC
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox, PC
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox, Xbox 360, PSP
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox, PC
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, PC
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox, Xbox 360
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PlayStation 4, PC, Xbox, Mac OS X, IOS, Android, Fire OS
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PlayStation 4, PC, Xbox, Mac OS X, IOS, Android, Fire OS
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PlayStation 4, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Fire OS
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox, PC, GBA
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameC
|}
5b158de001b571caa9cd94bd6562737261b446fa
NV2A/Fixed Function Pipeline
0
7
15
2016-12-30T13:57:51Z
151.217.214.155
0
Created page with "== Lighting == == Skinning =="
wikitext
text/x-wiki
== Lighting ==
== Skinning ==
1b7d49b0bec8ab267b709949cc3479f1ae18a5c9
NV2A/Pixel Combiner
0
8
16
2016-12-30T13:58:35Z
151.217.214.155
0
Created page with "== Debugging == PIX from the Microsoft XDK provides great debugging capabilities."
wikitext
text/x-wiki
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
9f98c891e2e0a811a9e2cc1e0671bf900a262c96
35
16
2017-01-04T12:34:04Z
JayFoxRox
2
wikitext
text/x-wiki
The NV2A implements https://www.opengl.org/registry/specs/NV/register_combiners.txt (and https://www.opengl.org/registry/specs/NV/register_combiners2.txt ? )
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
9bdf8635bf86f0af8d31d34678afd411ed78d34d
NV2A/Vertex Shader
0
9
17
2016-12-30T14:02:06Z
151.217.214.155
0
Created page with "== Registers == There are: * 12 temporary registers: R0 to R11 * output registers: oPos, oD0, oD1, oFog, oPts, oB0, oB1, oT0, oT1, oT2, oT3, A0.x * Input data: ??? R12 is a..."
wikitext
text/x-wiki
== Registers ==
There are:
* 12 temporary registers: R0 to R11
* output registers: oPos, oD0, oD1, oFog, oPts, oB0, oB1, oT0, oT1, oT2, oT3, A0.x
* Input data: ???
R12 is a mirror of the output register oPos
== Instructions ==
???
95f231bf0eeeb5fce5b49a7a1d11417252db87ce
36
17
2017-01-04T12:35:04Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox implements https://www.opengl.org/registry/specs/NV/vertex_program.txt and https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Registers ==
There are:
* 12 temporary registers: R0 to R11
* output registers: oPos, oD0, oD1, oFog, oPts, oB0, oB1, oT0, oT1, oT2, oT3, A0.x
* Input data: ???
R12 is a mirror of the output register oPos
== Instructions ==
???
e25324d325924e62809789b154715c00d832939a
NV2A/Surface Formats
0
10
18
2016-12-30T14:03:11Z
151.217.214.155
0
Created page with " == Texture formats == == Framebuffer formats =="
wikitext
text/x-wiki
== Texture formats ==
== Framebuffer formats ==
f859795c49a7a0d8d9dde243e5db294f2a4aed04
Xbox Input Devices
0
11
20
2016-12-30T14:04:09Z
151.217.214.155
0
Created page with "== Standard Gamepads == == Steering wheels == == Light guns =="
wikitext
text/x-wiki
== Standard Gamepads ==
== Steering wheels ==
== Light guns ==
353267a9e34a45d36777dd8190006f5fcacb5f14
Microsoft XDK
0
12
22
2016-12-30T14:05:27Z
151.217.214.155
0
Created page with "The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times. == List of known versions =="
wikitext
text/x-wiki
The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times.
== List of known versions ==
c095e07534c23ff43b212cfed924100ae75d312e
Tony Hawk's Pro Skater 2x
0
13
25
2016-12-30T14:11:20Z
151.217.214.155
0
Created page with "== Demo == There was a demo released for ??? on ???. === Rendering in the Demo === This is a rundown of how the scene is being rendered in the THPS2X Demo version"
wikitext
text/x-wiki
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
ed4067304d6bcca8c631d4d4694fc024eff404d5
26
25
2016-12-30T14:12:10Z
151.217.214.155
0
wikitext
text/x-wiki
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
==== World ====
==== Skater ====
==== HUD ====
8d6985de4517c10225269b28cad7cc6fa392c9b8
28
26
2016-12-30T14:18:03Z
151.217.214.155
0
/* Skater */
wikitext
text/x-wiki
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
==== World ====
==== Skater ====
Shader:
==== HUD ====
93c242cd51413c5f0642f509cc329f6177516c20
29
28
2016-12-30T14:24:42Z
151.217.214.155
0
/* Demo */
wikitext
text/x-wiki
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
==== World ====
==== Skater ====
Shader:
==== HUD ====
==== Shadow ====
===== Skater =====
Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
====== Shader ======
<code>
/* Slot 0: 0x00000000 0x007002AA 0x0C361400 0x28200FF8 */
ADD(R2,x, c[128].z, -v1.x);
/* Slot 1: 0x00000000 0x00CC001B 0x0836186C 0x28300FF8 */
DPH(R3,x, v0, c[96]);
/* Slot 2: 0x00000000 0x00CC201B 0x0836186C 0x24300FF8 */
DPH(R3,y, v0, c[97]);
/* Slot 3: 0x00000000 0x00CC401B 0x0836186C 0x22300FF8 */
DPH(R3,z, v0, c[98]);
/* Slot 4: 0x00000000 0x00CC601B 0x0836186C 0x28400FF8 */
DPH(R4,x, v0, c[99]);
/* Slot 5: 0x00000000 0x00CC801B 0x0836186C 0x24400FF8 */
DPH(R4,y, v0, c[100]);
/* Slot 6: 0x00000000 0x00CCA01B 0x0836186C 0x22400FF8 */
DPH(R4,z, v0, c[101]);
/* Slot 7: 0x00000000 0x0040021A 0x3400106C 0x2E500FF8 */
MUL(R5,xyz, R3.xyz, v1.x);
/* Slot 8: 0x00000000 0x0080001A 0x44004869 0x5E600FF8 */
MAD(R6,xyz, R4.xyz, R2.x, R5.xyz);
/* Slot 9: 0x00000000 0x00CEA01B 0x6436186C 0x20708800 */
DPH(oPos,x, R6, c[117]);
/* Slot 10: 0x00000000 0x00CEC01B 0x6436186C 0x20704800 */
DPH(oPos,y, R6, c[118]);
/* Slot 11: 0x00000000 0x00CEE01B 0x6436186C 0x20702800 */
DPH(oPos,z, R6, c[119]);
/* Slot 12: 0x00000000 0x00CF001B 0x6436186C 0x20701800 */
DPH(oPos,w, R6, c[120]);
/* Slot 13: 0x00000000 0x0647401B 0xC4361BFF 0x1078E800 */
MUL(oPos,xyz, R12, c[58]);
RCC(R1,x, R12.w);
/* Slot 14: 0x00000000 0x0087601B 0xC400286C 0x3070E801 */
MAD(oPos,xyz, R12, R1.x, c[59]);
</code>
532aa8a461d8705cc69bb1fce347a96b1fd5ad9e
30
29
2016-12-30T14:28:03Z
151.217.214.155
0
/* Skater */
wikitext
text/x-wiki
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
==== World ====
==== Skater ====
Shader:
<code>
/* Slot 0: 0x00000000 0x00320000 0x0C36106C 0x21200FF8 */
MOV(R2,w, c[144].x);
/* Slot 1: 0x00000000 0x005600FF 0x2554186C 0x21300FF8 */
MUL(R3,w, R2.w, c[176].z);
/* Slot 2: 0x00000000 0x00960000 0x0C3413FC 0xDE400FF8 */
MAD(R4,xyz, c[176].x, v0.xyz, R3.w);
/* Slot 3: 0x00000000 0x007002AA 0x0C361400 0x28500FF8 */
ADD(R5,x, c[128].z, -v1.x);
/* Slot 4: 0x00000000 0x0ACC001B 0x0836186D 0x18640FF8 */
DPH(R6,x, v0, c[96]);
EXP(R1,y, R4.x);
/* Slot 5: 0x00000000 0x00CC201B 0x0836186C 0x24600FF8 */
DPH(R6,y, v0, c[97]);
/* Slot 6: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 7: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 8: 0x00000000 0x00B0801A 0x1436186C 0x28700FF8 */
DP3(R7,x, R1.xyz, c[132]);
/* Slot 9: 0x00000000 0x0ACC401B 0x08361955 0x12640FF8 */
DPH(R6,z, v0, c[98]);
EXP(R1,y, R4.y);
/* Slot 10: 0x00000000 0x00CC601B 0x0836186C 0x28800FF8 */
DPH(R8,x, v0, c[99]);
/* Slot 11: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 12: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 13: 0x00000000 0x00B0801A 0x1436186C 0x24700FF8 */
DP3(R7,y, R1.xyz, c[132]);
/* Slot 14: 0x00000000 0x0ACC801B 0x08361AA9 0x14840FF8 */
DPH(R8,y, v0, c[100]);
EXP(R1,y, R4.z);
/* Slot 15: 0x00000000 0x00CCA01B 0x0836186C 0x22800FF8 */
DPH(R8,z, v0, c[101]);
/* Slot 16: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 17: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 18: 0x00000000 0x00B0801A 0x1436186C 0x22700FF8 */
DP3(R7,z, R1.xyz, c[132]);
/* Slot 19: 0x00000000 0x0040021A 0x6400106C 0x2E900FF8 */
MUL(R9,xyz, R6.xyz, v1.x);
/* Slot 20: 0x00000000 0x0080001A 0x8400A86A 0x5EA00FF8 */
MAD(R10,xyz, R8.xyz, R5.x, R9.xyz);
/* Slot 21: 0x00000000 0x00560655 0x08AA186C 0x21B00FF8 */
MUL(R11,w, v3.y, c[176].y);
/* Slot 22: 0x00000000 0x005780FF 0xB5FE186C 0x21000FF8 */
MUL(R0,w, R11.w, c[188].w);
/* Slot 23: 0x00000000 0x0080001A 0x75FE086A 0x9E200FF8 */
MAD(R2,xyz, R7.xyz, R0.w, R10.xyz);
/* Slot 24: 0x00000000 0x0097871A 0x0D541068 0x9E300FF8 */
MAD(R3,xyz, -c[188].xyz, v3.z, R2.xyz);
/* Slot 25: 0x00000000 0x00AC041B 0x0836186C 0x28400FF8 */
DP3(R4,x, v2, c[96]);
/* Slot 26: 0x00000000 0x00AC241B 0x0836186C 0x24400FF8 */
DP3(R4,y, v2, c[97]);
/* Slot 27: 0x00000000 0x00AC441B 0x0836186C 0x22400FF8 */
DP3(R4,z, v2, c[98]);
/* Slot 28: 0x00000000 0x00AC641B 0x0836186C 0x28600FF8 */
DP3(R6,x, v2, c[99]);
/* Slot 29: 0x00000000 0x00AC841B 0x0836186C 0x24600FF8 */
DP3(R6,y, v2, c[100]);
/* Slot 30: 0x00000000 0x00ACA41B 0x0836186C 0x22600FF8 */
DP3(R6,z, v2, c[101]);
/* Slot 31: 0x00000000 0x0040021A 0x4400106C 0x2E700FF8 */
MUL(R7,xyz, R4.xyz, v1.x);
/* Slot 32: 0x00000000 0x0080001A 0x6400A869 0xDE800FF8 */
MAD(R8,xyz, R6.xyz, R5.x, R7.xyz);
/* Slot 33: 0x00000000 0x00CEA01B 0x3436186C 0x20708800 */
DPH(oPos,x, R3, c[117]);
/* Slot 34: 0x00000000 0x00CEC01B 0x3436186C 0x20704800 */
DPH(oPos,y, R3, c[118]);
/* Slot 35: 0x00000000 0x00CEE01B 0x3436186C 0x20702800 */
DPH(oPos,z, R3, c[119]);
/* Slot 36: 0x00000000 0x00CF001B 0x3436186C 0x20701800 */
DPH(oPos,w, R3, c[120]);
/* Slot 37: 0x00000000 0x00A0001A 0x8435086C 0x21800FF8 */
DP3(R8,w, R8.xyz, R8.xyz);
/* Slot 38: 0x00000000 0x00CD321B 0x0836186C 0x20708848 */
DPH(oT0,x, v9, c[105]);
/* Slot 39: 0x00000000 0x0833401B 0x0C3613FE 0x1F910FF8 */
MOV(R9,xyzw, c[154]);
RSQ(R1,w, R8.w);
/* Slot 40: 0x00000000 0x00CD521B 0x0836186C 0x20704848 */
DPH(oT0,y, v9, c[106]);
/* Slot 41: 0x00000000 0x0040001A 0x85FE286C 0x2EA00FF8 */
MUL(R10,xyz, R8.xyz, R1.w);
/* Slot 42: 0x00000000 0x00B3001B 0xA636186C 0x28B00FF8 */
DP3(R11,x, R10, -c[152]);
/* Slot 43: 0x00000000 0x00B3201B 0xA636186C 0x24B00FF8 */
DP3(R11,y, R10, -c[153]);
/* Slot 44: 0x00000000 0x00CF001B 0x3436186C 0x20708828 */
DPH(oFog,x, R3, c[120]);
/* Slot 45: 0x00000000 0x01500015 0xB400186C 0x2C000FF8 */
MAX(R0,xy, R11.xy, c[128].x);
/* Slot 46: 0x00000000 0x00936000 0x0436186E 0x5F200FF8 */
MAD(R2,xyzw, R0.x, c[155], R9);
/* Slot 47: 0x00000000 0x00938055 0x0436186C 0x9F300FF8 */
MAD(R3,xyzw, R0.y, c[156], R2);
/* Slot 48: 0x00000000 0x0647401B 0xC4361BFF 0x1078E800 */
MUL(oPos,xyz, R12, c[58]);
RCC(R1,x, R12.w);
/* Slot 49: 0x00000000 0x0057401B 0x3436186C 0x2070F818 */
MUL(oD0,xyzw, R3, c[186]);
/* Slot 50: 0x00000000 0x0087601B 0xC400286C 0x3070E801 */
MAD(oPos,xyz, R12, R1.x, c[59]);
</code>
==== HUD ====
==== Shadow ====
===== Skater =====
Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
====== Shader ======
<code>
/* Slot 0: 0x00000000 0x007002AA 0x0C361400 0x28200FF8 */
ADD(R2,x, c[128].z, -v1.x);
/* Slot 1: 0x00000000 0x00CC001B 0x0836186C 0x28300FF8 */
DPH(R3,x, v0, c[96]);
/* Slot 2: 0x00000000 0x00CC201B 0x0836186C 0x24300FF8 */
DPH(R3,y, v0, c[97]);
/* Slot 3: 0x00000000 0x00CC401B 0x0836186C 0x22300FF8 */
DPH(R3,z, v0, c[98]);
/* Slot 4: 0x00000000 0x00CC601B 0x0836186C 0x28400FF8 */
DPH(R4,x, v0, c[99]);
/* Slot 5: 0x00000000 0x00CC801B 0x0836186C 0x24400FF8 */
DPH(R4,y, v0, c[100]);
/* Slot 6: 0x00000000 0x00CCA01B 0x0836186C 0x22400FF8 */
DPH(R4,z, v0, c[101]);
/* Slot 7: 0x00000000 0x0040021A 0x3400106C 0x2E500FF8 */
MUL(R5,xyz, R3.xyz, v1.x);
/* Slot 8: 0x00000000 0x0080001A 0x44004869 0x5E600FF8 */
MAD(R6,xyz, R4.xyz, R2.x, R5.xyz);
/* Slot 9: 0x00000000 0x00CEA01B 0x6436186C 0x20708800 */
DPH(oPos,x, R6, c[117]);
/* Slot 10: 0x00000000 0x00CEC01B 0x6436186C 0x20704800 */
DPH(oPos,y, R6, c[118]);
/* Slot 11: 0x00000000 0x00CEE01B 0x6436186C 0x20702800 */
DPH(oPos,z, R6, c[119]);
/* Slot 12: 0x00000000 0x00CF001B 0x6436186C 0x20701800 */
DPH(oPos,w, R6, c[120]);
/* Slot 13: 0x00000000 0x0647401B 0xC4361BFF 0x1078E800 */
MUL(oPos,xyz, R12, c[58]);
RCC(R1,x, R12.w);
/* Slot 14: 0x00000000 0x0087601B 0xC400286C 0x3070E801 */
MAD(oPos,xyz, R12, R1.x, c[59]);
</code>
8383f255d00fa5f862293f7f8d4923302f02f5fa
Kung Fu Chaos
0
14
32
2017-01-04T12:07:19Z
JayFoxRox
2
Created page with " == Fullscreen blit shader == <code> v0.xy { {0,0} {0,1} {1,1} {1,0} } surfaceSize = {640,480} clipRange = {0,16777215} c[58] = { 320, -2..."
wikitext
text/x-wiki
== Fullscreen blit shader ==
<code>
v0.xy {
{0,0}
{0,1}
{1,1}
{1,0}
}
surfaceSize = {640,480}
clipRange = {0,16777215}
c[58] = { 320, -240, 16777215, 0 }
c[59] = { 320.53125, 240.53125, 0, 0}
c[100] = { 640, 480, 0, 5.06639553e-05}
c[101] = { 0, 0, 0, 1}
c[102] = {1/320, -1/240, 1, 1}
c[103] = { 1, -1, 0, 0}
c[104] = { 0, 0, 0, 0}
c[105] = { 320, -240, 16777215, 0 }
c[106] = { 320.53125, 240.53125, 0, 0}
oD0 = v1
R2.x = 0.0;
R9 = {1/320, -1/240, 1, 1}
R5.xy = R2.x * { -1, +1 } // -> R5.xy = 0.0 .. FIXME: This makes no sense? R2.x was just set to zero?! [from C104.x !!]
/* Slot 3: 0x00000000 0x006CC0AA 0x0C36146C 0x98300FF8 */
ADD(R3,x, c[102].z, -R2); // -> R3.x = C[102].z = 1.0
/* Slot 4: 0x00000000 0x008CC000 0x242A1800 0xDC400FF8 */
MAD(R4,xy, R2.x, c[102].xy, R3.x); // -> R4.xy = R3.xx = {1,1}
/* Slot 5: 0x00000000 0x008D2000 0x242A1800 0xDC600FF8 */
MAD(R6,xy, R2.x, c[105].xy, R3.x); // -> R6.xy = R3.xx = {1,1}
/* Slot 6: 0x00000000 0x004D4000 0x242A186C 0x2C700FF8 */
MUL(R7,xy, R2.x, c[106].xy); // -> R7.xy = 0.0
/* Slot 7: 0x00000000 0x0080041B 0x0836886D 0x5C800FF8 */
MAD(R8,xy, v2, R4, R5); // -> R8 = v2 * R4 = v2
oT0.xy = R8 * R6 + R7 // -> v2
oT1.xy = R8 * R6 + R7 // -> v2
/* Slot 8: 0x00000000 0x004CA01A 0x0C37286C 0x2FA00FF8 */
MUL(R10,xyzw, c[101].xyz, R9);
/* Slot 11: 0x00000000 0x006CE01B 0xA436146C 0x3070F800 */
ADD(oPos,xyzw, R10, -c[103]);
/* Slot 12: 0x00000000 0x004C8015 0x942A186C 0x2CB00FF8 */
MUL(R11,xy, R9.xy, c[100].xy);
/* Slot 13: 0x00000000 0x00800015 0x082B6857 0x1070C800 */
MAD(oPos,xy, v0.xy, R11.xy, R12.xy);
SET FOG:
/* Slot 14: 0x00000000 0x004C80FF 0x0DFF886C 0x20708828 */
MUL(oFog,x, c[100].w, R12.w);
DO VIEWPORT TRANSFORM:
/* Slot 15: 0x00000000 0x0047401B 0xC436186C 0x2070C800 */
MUL(oPos,xy, R12, c[58]);
/* Slot 16: 0x00000000 0x0067601B 0xC436106C 0x3070C801 */
ADD(oPos,xy, R12, c[59]);
SPACE CONVERSION [XQEMU only]:
if (oPos.w == 0.0 || isinf(oPos.w)) {
vtx.inv_w = 1.0;
} else {
vtx.inv_w = 1.0 / oPos.w;
}
oPos.x = 2.0 * (oPos.x - surfaceSize.x * 0.5) / surfaceSize.x;
oPos.y = -2.0 * (oPos.y - surfaceSize.y * 0.5) / surfaceSize.y;
if (clipRange.y != clipRange.x) {
oPos.z = (oPos.z - 0.5 * (clipRange.x + clipRange.y)) / (0.5 * (clipRange.y - clipRange.x));
}
if (oPos.w <= 0.0) {
oPos.xyz *= oPos.w;
} else {
oPos.w = 1.0;
}
/* Make the world a happy place! */
#if 1
oFog.xyzw = vec4(1.0);
oPos.xy = v0.xy;
oPos.y *= -1.0;
oPos.z = 0.5;
oPos.w = 1.0;
vtx.inv_w = 1.0;
#endif
</code>
bab0160b062c619772017986637855084e9e4ab3
33
32
2017-01-04T12:12:37Z
JayFoxRox
2
wikitext
text/x-wiki
== Fullscreen blit shader ==
<code>
v0.xy {
{0,0}
{0,1}
{1,1}
{1,0}
}
surfaceSize = {640,480}
clipRange = {0,16777215}
c[58] = { 320, -240, 16777215, 0 }
c[59] = { 320.53125, 240.53125, 0, 0}
c[100] = { 640, 480, 0, 5.06639553e-05}
c[101] = { 0, 0, 0, 1}
c[102] = {1/320, -1/240, 1, 1}
c[103] = { 1, -1, 0, 0}
c[104] = { 0, 0, 0, 0}
c[105] = { 320, -240, 16777215, 0 }
c[106] = { 320.53125, 240.53125, 0, 0}
/* Slot 0: 0x00000000 0x002D001B 0x0C36106C 0x28200FF8 */
// R2.x = 0.0;
MOV(R2,x, c[104]);
/* Slot 1: 0x00000000 0x002CC01B 0x0C36106C 0x2F900FF8 */
// R9 = {1/320, -1/240, 1, 1}
MOV(R9,xyzw, c[102]);
/* Slot 2: 0x00000000 0x024CE200 0x2636186C 0x2C50F81C */
// R5.xy = R2.x * { -1, +1 } // -> R5.xy = 0.0 .. FIXME: This makes no sense? R2.x was just set to zero?! [from C104.x !!]
// oD0 = v1
MUL(R5,xy, R2.x, -c[103]);
MOV(oD0,xyzw, v1);
/* Slot 3: 0x00000000 0x006CC0AA 0x0C36146C 0x98300FF8 */
ADD(R3,x, c[102].z, -R2); // -> R3.x = C[102].z = 1.0
/* Slot 4: 0x00000000 0x008CC000 0x242A1800 0xDC400FF8 */
MAD(R4,xy, R2.x, c[102].xy, R3.x); // -> R4.xy = R3.xx = {1,1}
/* Slot 5: 0x00000000 0x008D2000 0x242A1800 0xDC600FF8 */
MAD(R6,xy, R2.x, c[105].xy, R3.x); // -> R6.xy = R3.xx = {1,1}
/* Slot 6: 0x00000000 0x004D4000 0x242A186C 0x2C700FF8 */
MUL(R7,xy, R2.x, c[106].xy); // -> R7.xy = 0.0
/* Slot 7: 0x00000000 0x0080041B 0x0836886D 0x5C800FF8 */
MAD(R8,xy, v2, R4, R5); // -> R8 = v2 * R4 = v2
oT0.xy = R8 * R6 + R7 // -> v2
oT1.xy = R8 * R6 + R7 // -> v2
/* Slot 8: 0x00000000 0x004CA01A 0x0C37286C 0x2FA00FF8 */
MUL(R10,xyzw, c[101].xyz, R9);
/* Slot 11: 0x00000000 0x006CE01B 0xA436146C 0x3070F800 */
ADD(oPos,xyzw, R10, -c[103]);
/* Slot 12: 0x00000000 0x004C8015 0x942A186C 0x2CB00FF8 */
MUL(R11,xy, R9.xy, c[100].xy);
/* Slot 13: 0x00000000 0x00800015 0x082B6857 0x1070C800 */
MAD(oPos,xy, v0.xy, R11.xy, R12.xy);
SET FOG:
/* Slot 14: 0x00000000 0x004C80FF 0x0DFF886C 0x20708828 */
MUL(oFog,x, c[100].w, R12.w);
DO VIEWPORT TRANSFORM:
/* Slot 15: 0x00000000 0x0047401B 0xC436186C 0x2070C800 */
MUL(oPos,xy, R12, c[58]);
/* Slot 16: 0x00000000 0x0067601B 0xC436106C 0x3070C801 */
ADD(oPos,xy, R12, c[59]);
SPACE CONVERSION [XQEMU only]:
if (oPos.w == 0.0 || isinf(oPos.w)) {
vtx.inv_w = 1.0;
} else {
vtx.inv_w = 1.0 / oPos.w;
}
oPos.x = 2.0 * (oPos.x - surfaceSize.x * 0.5) / surfaceSize.x;
oPos.y = -2.0 * (oPos.y - surfaceSize.y * 0.5) / surfaceSize.y;
if (clipRange.y != clipRange.x) {
oPos.z = (oPos.z - 0.5 * (clipRange.x + clipRange.y)) / (0.5 * (clipRange.y - clipRange.x));
}
if (oPos.w <= 0.0) {
oPos.xyz *= oPos.w;
} else {
oPos.w = 1.0;
}
/* Make the world a happy place! */
#if 1
oFog.xyzw = vec4(1.0);
oPos.xy = v0.xy;
oPos.y *= -1.0;
oPos.z = 0.5;
oPos.w = 1.0;
vtx.inv_w = 1.0;
#endif
</code>
957a172e731d20a44f663c3ba18119f0c7ec74f8
Hardware Revisions
0
3669
5001
2017-03-23T10:50:08Z
Eighthpence
2472
Base page creation
wikitext
text/x-wiki
There are 7 Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant Video Chip
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* BIOS no longer flashable
* Removed data and power lines from LPC port
* Xcalibur video chip
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{|
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN TWWFF
L is the production line
NNNNNN is the number produced that week
Y is the last digit of the production year
WW is the number of the week
FF is the factory code
Note, this table contradicts the previous table.
{|
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{|
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
{|
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{|
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
56694cf1a3f8c3f0f80a0b3734a50c4ca2abd831
MCPX ROM
0
3670
5005
2017-03-23T12:17:10Z
Eighthpence
2472
Created page with "The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fa..."
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<code>mov eax,0x80000880
mov dx,0xcf8
out dx,eax</code>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [MCPX Dumping] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
6f18ac167b3111ceddc03468f907e36bb3bbf5cf
5006
5005
2017-03-23T12:21:22Z
Eighthpence
2472
/* Dumping the MCPX ROM */
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [MCPX Dumping] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
70d4507638b58f4d95f22344cd35675748b7313e
5012
5006
2017-03-23T14:02:35Z
Eighthpence
2472
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [MCPX Dumping] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
81708747941a9e26997ea9790edcb2dc427b6e3d
MCPX
0
3671
5007
2017-03-23T13:18:15Z
Eighthpence
2472
Created page with "The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors (there are 4 of them) and also the USB, PCI, IDE, etc, controllers (please rem..."
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors (there are 4 of them) and also the USB, PCI, IDE, etc, controllers (please remove this disclaimer if I'm right, or fix it if I'm wrong.)
The MCPX is also the home to the secret [MCPX ROM].
f06da34b4a2a24484069ab630cad8734d068da48
BIOS
0
3672
5008
2017-03-23T14:00:42Z
Eighthpence
2472
Created page with "The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sens..."
wikitext
text/x-wiki
The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [MCPX ROM], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [MCPX ROM], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
c257411ca880f0b5c21ca59f1934a0076b98db43
5009
5008
2017-03-23T14:01:03Z
Eighthpence
2472
/* Unknown */
wikitext
text/x-wiki
The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the ][MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [MCPX ROM], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
e3cf1462f58d180e144a5ea8b7778ea7cda54976
5010
5009
2017-03-23T14:01:16Z
Eighthpence
2472
/* Unknown */
wikitext
text/x-wiki
The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [MCPX ROM], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
976788b00e22bdfbbf39c6e02db1b7083502108b
5011
5010
2017-03-23T14:01:29Z
Eighthpence
2472
/* Decoy bootloader */
wikitext
text/x-wiki
The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
15e7d1bd7565954808dd9dffc495cfdce55c77a0
User:Eighthpence
2
3673
5013
2017-03-23T14:03:05Z
Eighthpence
2472
Created page with "I'm a prick, don't listen to me."
wikitext
text/x-wiki
I'm a prick, don't listen to me.
0b43dc8a7269a56fc5a0384ec17d1d161fb24e5f
Memory
0
3674
5015
2017-03-23T14:11:11Z
Eighthpence
2472
Created page with "The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The m..."
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it.
The memory was shared between the CPU and GPU. The [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively.
Code for emulating the memory might consist of:
<pre>
#define MAIN_MEMORY 64 * 1024 * 1024
#define BIOS_SIZE 256 * 1024
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)
int mcpx_active = 1;
uint8_t memory[MAIN_MEMORY] = {0};
uint8_t bios[BIOS_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MAIN_MEMORY) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MEMORY) {
return mcpx[location - MCPX_MEMORY];
}
if (location >= BIOS_MEMORY) {
return bios[(location - BIOS_MEMORY) % BIOS_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx = 0;
}
<pre>
54a44db000ca784be54b4e70446db86fe39fa0fa
NV2A
0
3675
5016
2017-03-23T14:12:39Z
Eighthpence
2472
Created page with "The northbridge of the chipset, and is the GPU"
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
4db22ca3f18382ad085102b82f88af9470274de0
Hardware Revisions
0
3669
5017
5001
2017-03-23T14:21:57Z
Eighthpence
2472
wikitext
text/x-wiki
There are 7 Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant [Video Chip]
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* BIOS no longer flashable
* Removed data and power lines from LPC port
* Xcalibur video chip
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{|
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN TWWFF
L is the production line
NNNNNN is the number produced that week
Y is the last digit of the production year
WW is the number of the week
FF is the factory code
Note, this table contradicts the previous table.
{|
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{|
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
{|
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{|
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
857390d425d7cc155ea19f9a7a2118fccaa7a71f
5018
5017
2017-03-23T14:22:05Z
Eighthpence
2472
wikitext
text/x-wiki
There are 7 Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant [[Video Chip]]
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* BIOS no longer flashable
* Removed data and power lines from LPC port
* Xcalibur video chip
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{|
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN TWWFF
L is the production line
NNNNNN is the number produced that week
Y is the last digit of the production year
WW is the number of the week
FF is the factory code
Note, this table contradicts the previous table.
{|
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{|
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
{|
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{|
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
223490e3ac91eeae7b1292510429c2aa37c5e403
MCPX ROM
0
3670
5020
5012
2017-03-23T14:53:35Z
Eighthpence
2472
/* Dumping the MCPX ROM */
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
e910fdf89cfd4b6ba6237c6bf219523e244738b5
5033
5020
2017-03-28T20:47:32Z
Eighthpence
2472
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [MCPX 1.0]
* [MCPX 1.1]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
310bc74f91803379d38de7126fc8213a0f4ba11a
5034
5033
2017-03-28T20:48:02Z
Eighthpence
2472
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX 1.0]]
* [[MCPX 1.1]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
365d044afcc95bfe1cf5f7c39710da606f1432d0
5035
5034
2017-03-28T20:55:43Z
Eighthpence
2472
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
b19cd8f6959d7a716698aaef54e552a5443850db
BIOS Dumping
0
3677
5021
2017-03-23T15:05:32Z
Eighthpence
2472
Created page with "Dumping a BIOS can be done in several ways. == Using a chip reader == The BIOS is an ordinary TSOP and can be read with an ordinary TSOP reader. == Using a softmod exploit..."
wikitext
text/x-wiki
Dumping a BIOS can be done in several ways.
== Using a chip reader ==
The BIOS is an ordinary TSOP and can be read with an ordinary TSOP reader.
== Using a softmod exploit ==
Using a softmod exploit, you can usually choose to 'backup' your Xbox. This dumps a load of information to E:\Backup, including the BIOS. You can then FTP into your Xbox and retrieve it.
aabd8f468d044b957bfc93b8f78ffd654d1048fd
BIOS
0
3672
5022
5011
2017-03-23T15:06:02Z
Eighthpence
2472
wikitext
text/x-wiki
The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
d974ebac6953a180ecf7a52ae5142117bac34e58
Kernel
0
3678
5023
2017-03-27T20:48:37Z
Eighthpence
2472
Created page with "== See Also == [[Hard Drive Files]]"
wikitext
text/x-wiki
== See Also ==
[[Hard Drive Files]]
0a88e6da820ed867351330df4995dac9a64274c8
5066
5023
2017-04-22T09:44:07Z
JayFoxRox
2
Add list of kernel exports
wikitext
text/x-wiki
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
|Name
|Ordinal
|Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|
|-
|[[Kernel/ExTimerObjectType]]
|31
|
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|
|-
|[[Kernel/HalDiskModelNumber]]
|41
|
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|
|-
|[[Kernel/IoFileObjectType]]
|71
|
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|
|-
|[[Kernel/KeTimeIncrement]]
|157
|
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|
|-
|[[Kernel/XboxHardwareInfo]]
|322
|
|-
|[[Kernel/XboxHDKey]]
|323
|
|-
|[[Kernel/XboxKrnlVersion]]
|324
|
|-
|[[Kernel/XboxSignatureKey]]
|325
|
|-
|[[Kernel/XeImageFileName]]
|326
|
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|
|-
|[[Kernel/XePublicKeyData]]
|355
|
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|
|-
|[[Kernel/IdexChannelObject]]
|357
|
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|}
== See Also ==
[[Hard Drive Files]]
ff30625d5bd9f43fcae471b715b7dc3362f2e1e1
5067
5066
2017-04-22T10:09:19Z
JayFoxRox
2
More kernel exports and some notes
wikitext
text/x-wiki
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
|Name
|Ordinal
|Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only?!??
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only?!??
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|
|361
|Unused?
|-
|
|362
|Unused?
|-
|
|363
|Unused?
|-
|
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only?!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only?!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only?!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only?!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only?!
|}
== See Also ==
[[Hard Drive Files]]
ffe1d0dddba676f57a7cf5ded1270f122fa5b1b4
Hard Drive Files
0
3679
5024
2017-03-27T20:56:46Z
Eighthpence
2472
Created page with "The files on the Xbox look something like this (file sizes and MD5 checksums included): <pre> C Audio AmbientAudio AMB_05_ENGINEROOM_LR.wav 5562348..."
wikitext
text/x-wiki
The files on the Xbox look something like this (file sizes and MD5 checksums included):
<pre>
C
Audio
AmbientAudio
AMB_05_ENGINEROOM_LR.wav 5562348 565b84c327ef10b4854db6d3c943078e
AMB_06_COMMUNICATION_LR.wav 5412228 767c124d7260a8c0072ed21fb2d46915
AMB_12_HYDROTHUNDER_LR.wav 6447588 8fe6214758f24524ea7af2f3a30258a0
AMB_EC_Pinger1.wav 1259412 076eb4b27b9ff381a8e188898975fb4d
AMB_EC_Steam1.wav 656484 43ac56a62ed8459239b97a39e665af2f
AMB_EC_Steam2.wav 943836 337bc7e89097d2b3ddcdb0eab0a92e13
AMB_EC_Steam3.wav 516156 88537eaeed16c6a4475d3b3738623aab
AMB_EC_Steam4.wav 746556 b0916cc4d6668a9771afd01496f4e9d7
AMB_EC_Steam5.wav 737340 552e8c32ea1a04f69e98859e56077f1b
AMB_EC_Steam6.wav 534588 f4cbc9d9a4f32adf2844ab97df798c76
AMB_EC_Steam7.wav 1021884 f041eb53748e5d47410a188c6e280b15
AMB_EC_Voices1.wav 307932 741c2d6d63ba0b3b464ea5b6b318cdbc
AMB_EC_Voices10.wav 525372 28a17555fa442249cbd7861e80bcf5ac
AMB_EC_Voices11.wav 313404 1b97f1b14fcab2201da745ed4f44e491
AMB_EC_Voices12.wav 672828 80c65f6b627b259796927adc6dde86f6
AMB_EC_Voices13.wav 362580 026576c28474118b04cc4a09fb6b5480
AMB_EC_Voices2.wav 307644 b3de08af73e56f93c10147e0b7f3bc57
AMB_EC_Voices3.wav 695292 ce594325ac41b2d95bea4a1a2a0449b4
AMB_EC_Voices4.wav 521916 b368c2a8995b000c340d3e1408e0fdc5
AMB_EC_Voices5.wav 292092 bf018e7ad6d6d4531753ef7ea0a1d16e
AMB_EC_Voices6.wav 709692 be2f2d7447cb69309595e115f72e5500
AMB_EC_Voices7.wav 502332 1fb09252f8ac69036351661f653da142
AMB_EC_Voices8.wav 313404 aa2849ce3b7df30ffc894322f83a7497
AMB_EC_Voices9.wav 691260 4ff4887384d0d5697df491ea9ce6b51b
comm static 1.wav 39012 4820878be0a0c67e2e2bfd1a82e9af60
comm static 2.wav 71052 6db8cae9fd2a8a7cf8fa9d3abe53ea1d
comm static 3.wav 104172 2abe2439e393432e6ae4d596c283690c
comm static 4.wav 93948 5e00320ced41a87a79aedc7ceaf5d57c
comm voice 1.wav 189636 0b208c6775907edc63a65054fc807af5
comm voice 2.wav 196116 7af4f6576c1714391f1aa4a8b0100ca5
comm voice 3.wav 241044 08781a9e45eac3df26142d8478eb684d
comm voice 4.wav 69036 948c41545db45969e71c0a5e7614a22f
comm voice 5.wav 116484 d67a914b933f85f513f4d8e44d09980a
comm voice 6.wav 83796 1f595aeaef1bdfb501a91de7638fe28f
comm voice 7.wav 81852 b2b9fa426e3237ddeb79f0536869eca2
comm voice 8.wav 178620 df652e1d62a8b33af6a47acffb4fcadb
comm voice 9.wav 110076 39b0f0a3d6d5ec10055b68e602b8675c
Control Room Loop ver2.wav 543732 093c1519cb6bd6d6d3930d3f774b3485
Control Room Loop.wav 541860 0f23001b0319a568ac862ec7a1f5ee6f
MainAudio
Global A Button Select.wav 18708 895b82ec5a33bc8a786e2a690a734de3
Global B Button Back.wav 18708 45e2b8b11534d2da41900fa5ef5418f4
Global Completion Beep.wav 12012 2aa770f713594310639ec15ebf2695af
Global Delete_Destroy.wav 41820 cdefc6e08f772d2c4ab77a564dc50183
Global Error Message B.wav 14964 dade2d5ecb0b754ec69d4bb4e887d42e
Global Keyboard Stroke 1.wav 7044 e7662531b5b05431966732cb76a6fffa
Global Keyboard Stroke 2.wav 11220 b516137d9257d3b975f6d9ad82b75750
Global Main MenuBack3ver2.wav 32892 b825773a71e8d3655bd8998cbbb424f4
Global Main MenuFwd3ver2.wav 24108 e5035e8fb6d1d16c16c1fda2a3339153
Global Progress Bar.wav 235356 d9820e39524a3b37e982fa77004655be
Global Scroll Beep.wav 1572 67bc6aba697a1eb2714d8eda84da0405
MemoryAudio
Memory Controller Select.wav 15828 54e676b7ff4dcdd295fabf1dfb9290e5
Memory Games Select.wav 45348 9e95263f0767a62119aa38e668248957
Memory Memory Slot Select.wav 12084 bb86674f7a85e0bf6d9dfb569cfcead4
MusicAudio
Games Info Screen In MSurr.wav 63348 17a245d749339571cdc0fb9524a0ba20
Games Info Screen In.wav 63348 b02a19fcbbbe8f394c79c560e67fbeb6
Games Info Screen Out MSurr.wav 71052 c8a81e0046acbc0ce5712f7621422b5b
Games Info Screen Out.wav 5964 2080b7f318e72e06c8e3c8a03656d03c
Music CD Select.wav 30300 1104afb43a6aec2b678cda13befa811e
SettingsAudio
Settings Lang SubMenu Sel.wav 161340 73a89aab381849b9a51bf097293e9449
Settings Parent SubMenu Sel.wav 21372 74a51e1d0634f2a25585389c77b3dd63
TransitionAudio
Games Main Menu In_LR.wav 72132 4ebfcf1125ace7e7417e513cf55faf84
Games Main Menu Out_LR.wav 75444 9f1e83b02961528a8920693ba2654a24
Games Sub Menu In_LR.wav 74220 8be59cc1ea9dd4c1349e446554a9e50c
Games Sub Menu Out_LR.wav 83148 0d2b3642ed00c68ff26fea337bb21d17
Music Main Menu In_LR.wav 53484 cd9b4b30a8829689be34e10648b89257
Music Main Menu Out_LR.wav 51036 5dcceccf08ae7d4c537a1ad03d1b4d64
Music Select Track In_LR.wav 68388 80af0c1585d8f6fbfd02623182bc8155
Music Select Track Out_LR.wav 68100 e3aa18fd82b3d34df22e34b4fe3d49ed
Settings Main Menu In_LR.wav 188844 7553686ac2ab1f1f9c9e16929ffce5ab
Settings Main Menu Out_LR.wav 159252 4bc9fbffabb006fcc6d321ee4ba127ee
Settings Sub Menu In_LR.wav 97908 2b6b47c092d70ae2ef926ff521b9d3d1
Settings Sub Menu Out_LR.wav 60468 1439f81e8dfab007d9dda12e3b8d34df
fonts
XBox Book.xtf 14440996 8f5b7cee650f389f1c5c7bb5f70386bb
Xbox.xtf 19124720 de4a26c39de8001b95c749f8d3d22128
xboxdashdata.<see versions>
AccountSelection.xip 1322518 497f17cc0941611e438093e5af73feb9
default.xip 1619954 c5f0ac7c917ff431739be68528562990
dvd.xip 167045 64feb8f1e5844fc3d4c4a4269677b8a3
jkeyboard.xip 732966 e2d462cd3df9f57a0d572f3229a87b51
Keyboard.xip 658238 c1b2b05a0a47a521d1f7d05ecb566432
LiveToday.xip 1226668 5f33f99506bb687bad95a735c6a9ea80
mainmenu5.xip 2300516 f2e318a54e2a7326c5b42c6def7d64d4
memory_files2.xip 2708134 295fcaec6ad66b14cf51c94d0ac1b999
Memory2.xip 2218462 4c7fcc324216117b8d54a273eb581c29
Message.xip 801609 abd85ff52590e61e0b7081f650175bae
music_copy3.xip 1618605 2f7257186e5093b09a1fe5d96716b0c6
Music_PlayEdit2.xip 2593642 628a0c8ce9ee64a6fd3bc339fbb28913
music2.xip 2007578 4979f2dbcf721c1702cde15ed7961800
PasscodeVerify.xip 2813123 f25f5447def27c67d5842bfc0474b28f
settings_adoc.xip 4208200 a73817afb22f622fc4c25bbd291db66a
Settings_Clock.xip 1684098 c49e21dacb92d81ed18380e4354904e1
settings_language.xip 1429750 cf45a77a9bf6dc972344c6cee48adacc
settings_list.xip 2928635 123a550fafb5c08b7a0c4437f7989820
settings_panel.xip 2813123 f25f5447def27c67d5842bfc0474b28f
settings_parental.xip 1008362 1ae35811db2ecf5af08695ae8b681e6d
settings_timezone.xip 1371154 b148d86596529ae3abaec6bb3185d13b
settings_video.xip 1978178 a91d26866b85bf80005a7fc1ba59b442
settings3.xip 2966303 8d6076c0ee3a22646c0764c34296c8b8
WaitCursor.xip 33641 6ccd2d7f083ef995f3f67ce747e289a9
xodash
audio
LiveNowAudio
Friend Offline.wav 54092 41b7a8fe061a1ff2552c9bf1188736f5
Friend Online.wav 54060 81ccfe1005276370c5cbb3e708807b62
Friend Request.wav 52436 d7c8b57e754b761d1b3101b3e709b3dd
Game Invite.wav 29396 cd580938613a5407eb8bcaffe2688667
VoiceChatAudio
Voice Chat Join.wav 26156 7fb1fe01240795fcbf564dabfad01b21
Voice Chat Leave.wav 37028 8021bcf17888d2803c0e419cffa7dbb5
media
Content
Japanese
coc_jpn.txt 2347 f2feb7aa376a74240926d158dd74d65d
ximejpm.dic 250528 b1a7b55b9694ed6a47a2b901415e6fc5
ximejps.dic 188288 83f581a5d8023013de26eb65b1467486
SavedGame
SaveImage.xbx 18432 f378f3f8f19f3f679ee6a3a7497e104d
TitleImage.xbx 67584 6327fec35dd1abe0c3f33ac5cde11c10
TitleMeta.xbx 800 630de678413ed09e15ae45aa231c1af6
TChinese
twroc.dic 55226 48d0d50142126651f6090ec99e00b8c5
Xbg
3_doublebutton.xbg 207993 42b0b013d2c2e5817a3e4c8ab04bffb4
act_accountpin.xbg 653118 fe632805e6d6729e7e442fc96771a7d9
act_activation.xbg 59625 a7db0e486f391ad9101ee7d9a6abe7ca
act_admin_policy.xbg 71938 135c297799488b118e93deb8ba6ea44e
act_alt_names.xbg 84324 158225c13adae3057c062fb8f6730be7
act_billing.xbg 226372 fb04f93f5afed327400f6dae41a3f4e8
act_congrats.xbg 145440 4f773200049c715436c27cad462d3725
act_copy_delete.xbg 888221 66321645c2e21dc97221946871ad8894
act_country.xbg 184789 11ef5a0db7ff1c4e57c372f5ca8a474c
act_forced_name.xbg 70512 b47c0cd89ef89019b8d4fb7e9f29078a
act_id.xbg 80213 d7b2f7b2c8444c353a00b61963a37ff0
act_message_server.xbg 241052 6876fb92e1c92afc662562fb99a5abb4
act_new_opt_in.xbg 283121 2997402d4dd252d0746e5790b35abeab
act_online.xbg 77774 dbd09ce5f9fd916724997bbe64aa7e6c
act_overwrite.xbg 578090 c71ca452229dcd95bfee26b7d9424f3a
act_passcode.xbg 722464 81526772f069a1c81b76254399fb8666
act_restrictions.xbg 198867 ecbfd5abe9bde3f28e7e21722c85e47c
act_state.xbg 797805 1f2a1cacb023ac3c754d9548a38e8039
act_sub_3button.xbg 158866 112821cc587d1ad4cc99fa0d0a917273
act_sure.xbg 65137 5c1540d7ccec2c6607c8b0510f8f825a
act_user_options.xbg 185180 e496c0538f2b825186b00e30f5709931
act_users2.xbg 88313 12ce8b2ae9d7d450660b7de5aebcaaf8
addfriend.xbg 1890765 f6bf945bea8ef86d593109b2d1866b89
anim_connecting.xbg 1034604 d414eabc933dc46e64b3703c54b8e574
anim_wait_5.xbg 25575 007a7e8f3f4b262414100cc48d8cbdb0
backbutton.xbg 81349 6b894fe7c6392836808dc6230bd7b0d0
bud_actions.xbg 146828 dbc004a2b3081507ae2c2efed71fb4a3
cellwall.xbg 190846 219a43d501df170e4affcae9e4b35e92
contextual.xbg 1937307 007ac7c3ddedad86a662bc9b115d1f00
feedback.xbg 1929240 d26e11eb96b135eac630dfcee1b7e5fb
friends.xbg 2224276 afae13fb39cc559c24c85262509e888e
gen_dob_tumblers.xbg 1276515 83c24a1a6ed4f405dc0caad816a0a204
gen_exp_tumblers.xbg 1262446 9e4d5fd47c810132f42bf9bc173a1908
gen_large_panel.xbg 210906 814dfbf474a031ab82f6271a4c0648db
gen_mess_panel.xbg 347851 397c04b140e03b293b1a104e540d73fc
j_candidates.xbg 254619 060728bbf7498173420a45be61b7c339
j_keyboard.xbg 737322 88c480d6b5ab9feb95b3e906760e2373
k_keyboard.xbg 426877 6388aede82d338db42b55752aa5b9d06
keyboard.xbg 375657 873fbf9ec6585103346bf0a381f95d93
keypad.xbg 202889 decf2d76e67af781ad34c220be6308f8
nts_dns.xbg 192159 bd54bc1e4246605937a828b3b6278a95
nts_ip.xbg 202623 9e100d8c7029c20cfc9bd7ee0fa6bc65
nts_settings.xbg 216718 512de7f31ef378651a5e783965ea7f24
nts_status.xbg 181806 0a0d4a2ed3c61c86258d6d3ae3fe3837
nts_wireless.xbg 231935 82a12b613465f617c90c7fdce118adef
orb_master.xbg 348747 c259f4d1276582d32044826f6d88cedc
selectbutton.xbg 73523 bf0fcf1cde1d1aa92b7335ab5d8c10a3
t_keyboard.xbg 405161 912e6bd830337868cb9b51d30c8c0121
voicechat.xbg 2327218 dd2e8dcea71fc8fa661daa7d6c9b0f6d
voicemail.xbg 1948139 662585947a38eff1b5e74e871ea4d5be
Xbx
button.xbx 10240 fc14f24784a74a5d48004e48880086cb
cellwall.xbx 67584 ff23d97f5263ee657cdd7d528bb1c95e
darken_opacity.xbx 18432 7f24ebbab4f77fe612d0dd9491001e49
Disabled.xbx 10240 6d8da8de70e262767600d2b84eec43c2
disabled_highlight.xbx 6144 64f4dd2e2f5539ad6a11417abe0ef336
footer.xbx 34816 6a2124d31b374d9c3f426436aec35161
GameHilite_01.xbx 6144 c4fa23bce07f08dd360565d9b267b0b0
highlight.xbx 10240 1e99278554e5d4a0e42b808ebd833385
keyboard_alpha.xbx 18432 65553de7e37186f96942948cbe4639b9
Live_header.xbx 34816 fc46134b8dd7abf183e1d466d5afe6bf
live_highlight_disabled.xbx 10240 5a2da8c4c763cdcf6ab7c23deaa64205
LiveChrome.xbx 67584 f64b49852005cc389d205ea1de8d1048
mess_panel_backing.xbx 18432 24459f91d4de55a521d2c75da81ac7de
Options.xbx 18432 9e442a174906ef3e06c04c5cd43b6ddd
panel1.xbx 18432 7ef04f5b0d0ce60e9ac385d5734d35a3
panel10.xbx 10240 2852c18e0b898a0cd0f74d957d1c4e1f
panel11.xbx 18432 188290082b02fc03a2656ffdc131f309
panel12.xbx 18432 bf234eb3313b4af0f04a7eea816b0819
panel13.xbx 18432 c465aaacf64ff98d7e5c7501f15df4cd
panel14.xbx 18432 5b52636f2ae781df267c27ba4f1fa1f4
panel15.xbx 10240 43ce1530ac07161c65b1ff5d02ddaf07
panel16.xbx 18432 1c35588436ba6d4a437fb1d22e8ed029
panel17.xbx 10240 7b9d574182f87b7c8bb9b1f16d07a234
panel18.xbx 18432 192a162567836159e44355a13b108ec6
panel19.xbx 18432 3d205c154cd434ae46009670b8a5c830
panel2.xbx 18432 4958bbd39d6adc867a323bd14e7fedfb
panel20.xbx 18432 70fcee44a106f94f3d505b8fe36e89bd
panel3.xbx 18432 7ddc37a40c11f91c4f5709275753682c
panel4.xbx 18432 54ca9e18cadcabd704eff52270cf5aef
panel5.xbx 18432 9a92cefceb843e4b634ef4862b2838f0
panel6.xbx 18432 5220d145a2d73f10018f822b746a33f9
panel7.xbx 18432 0fb78b53c5b037f006342a10f13447f5
panel8.xbx 18432 212a8b96d91eaab3788d33ea3f0f99d0
panel9.xbx 18432 25b985d4c995f4898ea1c3344cf0d2f0
Plain_header.xbx 34816 494a987d8bf0000ff972ec0926aa08dd
pulse_3D_64_matte_trans.xbx 4096 7d9b93b859d90f855dbb0a17170821bc
Pulse1.xbx 34816 364898b79abf0110779b849a4df38154
ridges.xbx 34816 caabfdb8e5aa2390d001d60247ff3b72
wireframe.xbx 10240 48468dbefff5fb21d52f8b66418a89f2
xbox2.xbx 264192 e86870b16246b4399a86c592a1f87b3b
xbox4.xbx 67584 67f33ec44e706a322e2550a342340a3c
xboxlogo.xbx 264192 77cf58d065229b28edda8b08709ac31d
xboxlogow.xbx 264192 c4816fb72fe27cd18bb04a109b9facd1
update.xbe 2260992 <see versions>
xonlinedash.xbe 2617344 <see versions>
XBox Book.xtf 17068868 54751950aa215228a4915955f7d2ce0c
Xbox.xtf 15613736 0466dd6c19ec9c1785e8aadfc8c5269e
xboxdash.xbe 1961984 <see versions>
E
TDATA
UDATA
</pre>
I have seen a few differences. I thought all my Xboxs had the same dashboard version, but I have 2 slightly different versions of files:
== 185ead00 ==
Here are the differences for this dashboard
<pre>
C
xboxdashdata.185ead00
xodash
update.xbe 2260992 bc99ef8730158ba1bf3f1c9c84520661
xonlinedash.xbe 2617344 8149654a030d813bcc02a24f39fd3ce9
xboxdash.xbe 1961984 08d3a6f99184679aa13008d6397bacce
</pre>
== 185a6100 ==
Here are the differences for this dashboard
<pre>
C
xboxdashdata.185a6100
xodash
update.xbe 2260992 78ad0f3f0cb83010728e00457a778121
xonlinedash.xbe 2617344 01dd6c8aa72b473ba1523c73c6527d86
xboxdash.xbe 1961984 1fa397b44ec78965ef955539fd8f4fbd
</pre>
d4607dabcb01a877e9533ecad2f3798847496c4a
Microsoft XDK
0
12
5025
22
2017-03-28T10:00:43Z
Eighthpence
2472
/* List of known versions */
wikitext
text/x-wiki
The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times.
== List of known versions ==
5849 (Dec 2003)
8e11eab0228c3e55d742a0bcce03c6f34c045aa6
5049
5025
2017-03-31T09:38:11Z
PatrickvL
2473
Completed the list, plus a bit of history
wikitext
text/x-wiki
The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times.
== List of known versions ==
* 3424 (alpha?)
* 3911 (*)
* 3925 (*)
* 3936 (*)
* 3937 (*)
* 3941 (*)
* 3948 (*)
* 3950 (*)
* 4034 (*)
* 4039 (*)
* 4134 (*)
* 4242 (*)
* 4361
* 4400 (rare)
* 4432
* 4531
* 4627
* 4721
* 4831
* 4928
* 5028
* 5120
* 5233
* 5344
* 5455
* 5558
* 5659
* 5788
* 5849 (Dec 2003)
* 5849.16
* 5933 (uncertain number - Dxbx code mentions 5911)
(*) : Earlier XDK's contained libraries with different versions numbers. Before or around XDK version 4361, all libraries in the XDK were given the same version number.
Note : An even more complete listing can be found here : http://codeasm.com/xbox/files/Xbox%20Kernel_Dash_XDK%20versions.txt
333d2b2afc28ed9683b75b531a891bd2716e3c74
Main Page
0
1
5026
5014
2017-03-28T15:31:02Z
PatrickvL
2473
Updated 2 links
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [[cxbx]]
* [http://dxbx-emu.com Dxbx]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
ac86f9857c62b0b1243fcd70a5b5778f089d6711
5029
5026
2017-03-28T20:29:57Z
Eighthpence
2472
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [[cxbx]]
* [http://dxbx-emu.com Dxbx]
* [[Xeon]]
* [[Hackbox]]
* [[kvmbox]]
* [[MAME/Chihiro]]
* [[MAME/Xbox]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
69a3d6a1982a0282fe688772f063e1f439423996
5032
5029
2017-03-28T20:43:32Z
Eighthpence
2472
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
2e33ca46329f06557462cd2d1261555521003612
5040
5032
2017-03-29T12:51:12Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
e1da30f8f00a82b9e0d6ecdcfedf352521c9273c
5045
5040
2017-03-29T13:33:26Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
015cae19ebd9e526485e1b361b3c0ce930f389eb
5047
5045
2017-03-29T13:41:51Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode or [https://gitter.im/Cxbx-Reloaded/Lobby Cxbx-Reloaded/Lobby on gitter.im].
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
b5f997cdc8533acfc95539b9720e8dc44aab7506
5059
5047
2017-04-21T21:42:09Z
JayFoxRox
2
wikitext
text/x-wiki
== xboxdevwiki.net ==
Please help us fix this mess.
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode or [https://gitter.im/Cxbx-Reloaded/Lobby Cxbx-Reloaded/Lobby on gitter.im].
----
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
b24fb5fec95260cdfa354c83781a5027213536b2
OpenXDK
0
3680
5027
2017-03-28T20:27:38Z
Eighthpence
2472
Created page with "Seemingly abandoned, but then sprung back into life in 2016 after 7 years of inactivity. == References == [http://openxdk.sourceforge.net/]"
wikitext
text/x-wiki
Seemingly abandoned, but then sprung back into life in 2016 after 7 years of inactivity.
== References ==
[http://openxdk.sourceforge.net/]
f5d177534ca1117264e8ed52c1e29439917faa74
5028
5027
2017-03-28T20:27:56Z
Eighthpence
2472
/* References */
wikitext
text/x-wiki
Seemingly abandoned, but then sprung back into life in 2016 after 7 years of inactivity.
== References ==
[http://openxdk.sourceforge.net/ openxdk.sourceforge.net]
3a421a138fd39b850c3dfdfb44f7192c81ab50a4
CPU
0
3681
5030
2017-03-28T20:36:01Z
Eighthpence
2472
Created page with "The CPU in the Xbox was a custom Pentium 3 running at 733MHz. The 'custom' part of this was that that the Pentium 3 in the Xbox was that it had only 128KB L2 cache instead of..."
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium 3 running at 733MHz. The 'custom' part of this was that that the Pentium 3 in the Xbox was that it had only 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs.
== References ==
* [https://software.intel.com/en-us/articles/intel-sdm Intel® 64 and IA-32 Architectures Software Developer Manuals] (Sorry, I can't find just the documentation for the Pentium 3. Enjoy 4600+ pages, half of which is irrelevant!)
693d74df83de663ca67180c7951883f6240d6a91
Xbox
0
3682
5031
2017-03-28T20:38:55Z
Eighthpence
2472
Created page with "The Xbox is a games console developed by Microsoft and released in 2001. Emulation for it is not up to scratch."
wikitext
text/x-wiki
The Xbox is a games console developed by Microsoft and released in 2001. Emulation for it is not up to scratch.
76381ec1a6dc7d533c141cb6a44e9c6fa48353c8
Boot Process
0
3683
5036
2017-03-28T21:12:56Z
Eighthpence
2472
Created page with "If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching. The pseudo code for..."
wikitext
text/x-wiki
If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching. The pseudo code for a high level MCPX will look something like this:
<pre>
coming soon.....
</pre>
afa6ce0c80ab01eca411d9e025acd466fccc2fb7
5038
5036
2017-03-28T21:26:35Z
Eighthpence
2472
wikitext
text/x-wiki
If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching. The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
db5e4ed86808a186bf9403bf4e2896fe65f56fd3
Memory
0
3674
5037
5015
2017-03-28T21:15:19Z
Eighthpence
2472
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it.
The memory was shared between the CPU and GPU. The [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively.
Code for emulating the memory might consist of:
<pre>
#define MAIN_MEMORY 64 * 1024 * 1024
#define BIOS_SIZE 256 * 1024
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)
int mcpx_active = 1;
uint8_t memory[MAIN_MEMORY] = {0};
uint8_t bios[BIOS_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MAIN_MEMORY) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MEMORY) {
return mcpx[location - MCPX_MEMORY];
}
if (location >= BIOS_MEMORY) {
return bios[(location - BIOS_MEMORY) % BIOS_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx = 0;
}
</pre>
bf29929d520a9bf6ad9553756d0a9f94c670f0bd
5039
5037
2017-03-29T06:57:00Z
Eighthpence
2472
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively. On Debug Xboxs and Chihiro, only the BIOS is mapped.
{|
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|BIOS
|0xFF000000 - 0xFFFFFFFF
|0xFF000000 - 0xFFFFFFFF
|-
|MCPX
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MAIN_MEMORY 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MAIN_MEMORY 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define BIOS_SIZE 256 * 1024
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)
uint8_t memory[MAIN_MEMORY] = {0};
uint8_t bios[BIOS_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MAIN_MEMORY) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MEMORY) {
return mcpx[location - MCPX_MEMORY];
}
if (location >= BIOS_MEMORY) {
return bios[(location - BIOS_MEMORY) % BIOS_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx = 0;
}
</pre>
9395ffe4ef635a4b052c8416be48dcd8de20fda3
Engine List
0
4
5041
6
2017-03-29T13:11:56Z
JayFoxRox
2
The old version was missing more than half of the list.
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable"
! Title
|-
| Counter-Strike
|}
= Source Engine =
{| class="wikitable"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <sup>[Ref]</sup>]
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here] and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
22f07ca80ef85575f05a8002d11db60395c4f592
Talk:CPU
1
3684
5042
2017-03-29T13:19:23Z
JayFoxRox
2
Created page with "We should get output from cpuid here"
wikitext
text/x-wiki
We should get output from cpuid here
2c2065a44314918bcc4cfa80614bbd0e1e82d4ba
5043
5042
2017-03-29T13:19:45Z
JayFoxRox
2
wikitext
text/x-wiki
We should get output from cpuid here --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 06:19, 29 March 2017 (PDT)
ad034dc8b007d019d1439800b962a26030fad271
Azurik: Rise of Perathia
0
3685
5044
2017-03-29T13:30:39Z
JayFoxRox
2
Temporary hack
wikitext
text/x-wiki
=== Known tricky behaviour ===
==== Skinning code / Shader rounding mode ====
This game suffers from issues with non-exact rounding in the shaders which do the skinning / skeletal animation.
[[File:http://i.imgur.com/tpmLpjP.png]]
IIRC Code is like:
A0 = c[113].x + c[113].z = 18
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].x + c[113].z = 21
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].y * v2
*do stuff with c[96+A0] to c[98+A0]*
c[113] is vec4(15, 765, 3, 0). 765 = 3*255.
v2 is GL_UNSIGNED_BYTE, normalized => v2 = raw/255.
A0 = 765 * raw/255 = 3*raw.
This should all be working, but it's not. NV2A expects round-to-zero, GLSL and other modern graphic APIs have it undefined..
It works with A0 += 1.0/255.0 as a temporary hack
28017b01b5194858918843e05eaf8e37b6d6d3a4
5046
5044
2017-03-29T13:37:20Z
JayFoxRox
2
wikitext
text/x-wiki
=== Known tricky behaviour ===
==== Skinning code / Shader rounding mode ====
This game depends on correct GPU rounding. If an emulator suffers from issues with non-exact rounding in the shaders which do the skinning / skeletal animation the character models will be very broken.
[[File:http://i.imgur.com/tpmLpjP.png]]
IIRC Code is like:
A0 = c[113].x + c[113].z = 18
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].x + c[113].z = 21
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].y * v2
*do stuff with c[96+A0] to c[98+A0]*
c[113] is vec4(15, 765, 3, 0). 765 = 3*255.
v2 is GL_UNSIGNED_BYTE, normalized => v2 = raw/255.
A0 = 765 * raw/255 = 3*raw.
This should all be working, but it's not. [[NV2A/Vertex Shader]] does round-to-zero. Behaviour for GLSL and other modern graphic APIs is undefined..
To work around this rounding issue <code>A0 += 1.0/255.0</code> can be used as a temporary hack
7e36c80e3d01de4d987dbcec9465fcad1f458938
Talk:Engine List
1
3686
5048
2017-03-29T21:29:02Z
JayFoxRox
2
Starting discussion where this list should go
wikitext
text/x-wiki
Shall we merge this with https://en.wikipedia.org/wiki/List_of_Xbox_games and https://en.wikipedia.org/wiki/List_of_Xbox_games_with_alternate_display_modes ?
We could just add a column for the engine so the list could be sorted.
We could also add a column for all the XDK versions etc - it would be a massive table, but probably useful?
Shall we do this somewhere else? google sheets?
Shall we use a program to generate a mediawiki version for this wiki?
Eitherway, we'd then create a page for every game to mention further technical details (See "Games/" articles)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 14:29, 29 March 2017 (PDT)
4719ad92409bc5ba2f99180c140b1d7a8c29b514
Resources
0
3
5050
4999
2017-04-10T03:27:21Z
JayFoxRox
2
wikitext
text/x-wiki
Random resources about xbox hacking
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Matt Borgerson about the Xbox bootrom]
* [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]
906d41373fcb819f1790a41f02c87ec2bfb6a944
5051
5050
2017-04-11T10:44:49Z
JayFoxRox
2
Added 2 more articles
wikitext
text/x-wiki
Random resources about xbox hacking
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Matt Borgerson about the Xbox bootrom]
* [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
7b4b23e4b8dc3652e6f3d65f8ff0204f06740c2a
NV2A/Vertex Shader
0
9
5052
36
2017-04-21T19:26:54Z
JayFoxRox
2
More register info, will be refactored soon
wikitext
text/x-wiki
The Xbox implements https://www.opengl.org/registry/specs/NV/vertex_program.txt and https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Registers ==
* 16 input registers v[0] to v[15] (from vertex, v[0] is fed from LAUNCH_DATA for VSPs)
* output registers: o[0] to o[?] (initialized to XYZ=0x00000000 W=0x3F800000)
* Following indices are aliased: Pos, oD0, oD1, oFog, oPts, oB0, oB1, oT0, oT1, oT2, oT3
* 1 Address register: A0.x
* 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000)
* The POS register is mirrored as R12 so it can be used as source operand, so effectively you have 13 temporaries
== Instructions ==
???
e65d36cb2d37e0980a744479005a6e65c13ff1e4
5053
5052
2017-04-21T19:36:42Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox implements https://www.opengl.org/registry/specs/NV/vertex_program.txt and https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
* 16 input registers v[0] to v[15] (from vertex, v[0] is fed from LAUNCH_DATA for VSPs)
* output registers: o[0] to o[?] (initialized to XYZ=0x00000000 W=0x3F800000)
** Following indices are aliased: Pos, oD0, oD1, oFog, oPts, oB0, oB1, oT0, oT1, oT2, oT3
* 1 Address register: A0.x
* 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000)
** The POS register is mirrored as R12 so it can be used as source operand, so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through method [FIXME], with 4x DWORD, ordered XYZW.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, describing the operation:
{| class="wikitable"
|+Fields
|-
|Offset (bits)
|Size (bits)
|Meaning
|-
|0
|0
|TODO
|-
|0
|0
|TODO
|}
662448e90085c297397905add55eb5bd8572c32e
5054
5053
2017-04-21T21:04:35Z
JayFoxRox
2
Added fields
wikitext
text/x-wiki
The Xbox implements https://www.opengl.org/registry/specs/NV/vertex_program.txt and https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
* 16 input registers v[0] to v[15] (from vertex, v[0] is fed from LAUNCH_DATA for VSPs)
* output registers: o[0] to o[?] (initialized to XYZ=0x00000000 W=0x3F800000)
** Following indices are aliased: Pos, oD0, oD1, oFog, oPts, oB0, oB1, oT0, oT1, oT2, oT3
* 1 Address register: A0.x
* 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000)
** The POS register is mirrored as R12 so it can be used as source operand, so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through method [FIXME], with 4x DWORD, ordered XYZW.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
|Meaning
|Word
|Offset (bits)
|Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
|Value
|Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
30d2dc45d6bd011c30092f331d1465324cc9cdf1
5055
5054
2017-04-21T21:08:00Z
JayFoxRox
2
/* Constant space */
wikitext
text/x-wiki
The Xbox implements https://www.opengl.org/registry/specs/NV/vertex_program.txt and https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
* 16 input registers v[0] to v[15] (from vertex, v[0] is fed from LAUNCH_DATA for VSPs)
* output registers: o[0] to o[?] (initialized to XYZ=0x00000000 W=0x3F800000)
** Following indices are aliased: Pos, oD0, oD1, oFog, oPts, oB0, oB1, oT0, oT1, oT2, oT3
* 1 Address register: A0.x
* 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000)
** The POS register is mirrored as R12 so it can be used as source operand, so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
|Meaning
|Word
|Offset (bits)
|Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
|Value
|Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
e7caddf89e23025af2823da1f2887022f8dc6f8d
5056
5055
2017-04-21T21:13:49Z
JayFoxRox
2
more explanations and more mentions of the GL spec
wikitext
text/x-wiki
The Xbox implements https://www.opengl.org/registry/specs/NV/vertex_program.txt and https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [map to the vertex attributes|NV2A/Vertex attributes]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
output registers: o[0] to o[?] (initialized to XYZ=0x00000000 W=0x3F800000)
The alias names from the GL extension match.
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[POS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
|Meaning
|Word
|Offset (bits)
|Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
|Value
|Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
b37aed12ff7eae86fb3205fcb84f9b11e867e026
5057
5056
2017-04-21T21:29:45Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
output registers: o[0] to o[?] (initialized to XYZ=0x00000000 W=0x3F800000)
The alias names from the GL extension match.
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[POS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
|Meaning
|Word
|Offset (bits)
|Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
|Value
|Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
16e9a664a8a7c1f7678b275a881442bcc9564ebe
5060
5057
2017-04-21T21:56:41Z
JayFoxRox
2
Added first revision of ouptut register table
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
|Index
|GL Name
|D3D Name
|Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|oD0
|COL0
|Primary color (front-facing)
|-
|4
|oD1
|COL1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[POS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
|Meaning
|Word
|Offset (bits)
|Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
|Value
|Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
dd9754c31e31fa374817c81de8c04adbaed93002
5061
5060
2017-04-21T21:57:25Z
JayFoxRox
2
/* Output registers */
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
|Index
|GL Name
|D3D Name
|Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[POS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
|Meaning
|Word
|Offset (bits)
|Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
|Value
|Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
962c9be066318e1e588b27057fcea8889acdb43a
5062
5061
2017-04-21T21:57:38Z
JayFoxRox
2
/* Temporary registers */
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
|Index
|GL Name
|D3D Name
|Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
|Meaning
|Word
|Offset (bits)
|Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
|Value
|Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
403581c7c42b275287bee9765ca5f40872c88d99
5065
5062
2017-04-22T09:13:25Z
JayFoxRox
2
Added opcodes
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
|Index
|GL Name
|D3D Name
|Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
|Meaning
|Word
|Offset (bits)
|Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
|Value
|Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
=== Functional units ===
==== Inverse Logic Unit (ILU) ====
{| class="wikitable"
|+ILU Operations
|-
|Value
|Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|RCP
|-
|3
|RCC
|-
|4
|RSQ
|-
|5
|EXP
|-
|6
|LOG
|-
|7
|LIT
|}
==== Multiply-Accumulate (MAC) ====
{| class="wikitable"
|+MAC Operations
|-
|Value
|Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|MUL
|-
|3
|ADD
|-
|4
|MAD
|-
|5
|DP3
|-
|6
|DPH
|-
|7
|DP4
|-
|8
|DST
|-
|9
|MIN
|-
|10
|MAX
|-
|11
|SLT
|-
|12
|SGE
|-
|13
|ARL
|}
6436c1f15959ab71568e6408ff1df1594d2e2e2c
NV2A/Vertex attributes
0
3687
5058
2017-04-21T21:41:16Z
JayFoxRox
2
Very rough info
wikitext
text/x-wiki
This article documents the attribute types which are supported by the Xbox GPU.
=== Normalized unsigned Byte (D3D) ===
Unsigned bytes aranged as ZYXW (BGRA) in memory (Also see [http://www.opengl.org/registry/specs/ARB/vertex_array_bgra.txt this GL extension]).
This is commonly used with an attribute count of 4.
FIXME: Does this still work with attribute count =/= 4 ?
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized unsigned Byte (GL) ===
Unsigned bytes arranged as XYZW (RGBA) in memory.
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -1.0 to 1.0
FIXME: Verify
=== Float ===
IEEE-754 single precision float arranged as XYZW.
FIXME: What happens to NaN or denormals?
=== Short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -32768.0 to 32767.0
FIXME: Verify
=== Compressed normal ===
Each 32 bit attribute is consisting of 11 bit X, 11 bit Y, 10 bit Z.
Each component is signed and will be mapped into the range -1.0 to 1.0.
FIXME: Verify
FIXME: Is the attribute count ignored?
4dcf3ae0be9282d5ca44e81679e6c161d2bf173d
5063
5058
2017-04-21T21:58:38Z
JayFoxRox
2
wikitext
text/x-wiki
This article documents the attribute types which are supported by the Xbox GPU.
=== Normalized unsigned byte (D3D) ===
Unsigned bytes aranged as ZYXW (BGRA) in memory (Also see [http://www.opengl.org/registry/specs/ARB/vertex_array_bgra.txt this GL extension]).
This is commonly used with an attribute count of 4.
FIXME: Does this still work with attribute count =/= 4 ?
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized unsigned byte (GL) ===
Unsigned bytes arranged as XYZW (RGBA) in memory.
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -1.0 to 1.0
FIXME: Verify
=== Float ===
IEEE-754 single precision float arranged as XYZW.
FIXME: What happens to NaN or denormals?
=== Short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -32768.0 to 32767.0
FIXME: Verify
=== Compressed normal ===
Each 32 bit attribute is consisting of 11 bit X, 11 bit Y, 10 bit Z.
Each component is signed and will be mapped into the range -1.0 to 1.0.
FIXME: Verify
FIXME: Is the attribute count ignored?
98a5d42ad98d5d97e1a408cbc021dfd89e4a29b7
5064
5063
2017-04-22T08:52:51Z
JayFoxRox
2
Tried to document draw methods / vertex uploads. Still very wip and unverified
wikitext
text/x-wiki
This article documents the attribute types which are supported by the Xbox GPU.
Please take everything with a grain of salt - it's still being researched.
== Draw methods ==
=== Draw Arrays ===
Data uploaded through DMA.
Each attribute has it's own offset and stride.
Decoded using the attribute information.
=== Inline Buffer ===
Data uploaded and decoded through PGRAPH methods.
==== NV097_SET_VERTEX_DATA2F_M ... NV097_SET_VERTEX_DATA2F_M + 0x7c ====
==== NV097_SET_VERTEX_DATA4F_M ... NV097_SET_VERTEX_DATA4F_M + 0xfc ====
==== NV097_SET_VERTEX_DATA2S ... NV097_SET_VERTEX_DATA2S + 0x3c ====
==== NV097_SET_VERTEX_DATA4UB ... NV097_SET_VERTEX_DATA4UB + 0x3c ====
==== NV097_SET_VERTEX_DATA4S_M ... NV097_SET_VERTEX_DATA4S_M + 0x7c ====
=== Inline Array ===
Data uploaded through PHRAPH method NV097_INLINE_ARRAY.
The attributes are tightly packed in that buffer.
Decoded using the attribute information.
=== Inline Elements ===
Same as "Draw Arrays" but with an extra index buffer.
The index buffer is uploaded through PGRAPH methods NV097_ARRAY_ELEMENT16 and NV097_ARRAY_ELEMENT32.
== Attribute Types ==
=== Normalized unsigned byte (D3D) ===
Unsigned bytes aranged as ZYXW (BGRA) in memory (Also see [http://www.opengl.org/registry/specs/ARB/vertex_array_bgra.txt this GL extension]).
This is commonly used with an attribute count of 4.
FIXME: Does this still work with attribute count =/= 4 ?
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized unsigned byte (GL) ===
Unsigned bytes arranged as XYZW (RGBA) in memory.
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -1.0 to 1.0
FIXME: Verify
=== Float ===
IEEE-754 single precision float arranged as XYZW.
FIXME: What happens to NaN or denormals?
=== Short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -32768.0 to 32767.0
FIXME: Verify
=== Compressed normal ===
Each 32 bit attribute is consisting of 11 bit X, 11 bit Y, 10 bit Z.
Each component is signed and will be mapped into the range -1.0 to 1.0.
FIXME: Verify
FIXME: Is the attribute count ignored?
3a152188dad662d143d3240e9057005fd10cc066
NV2A/Vertex attributes
0
3687
5068
5064
2017-04-22T10:39:24Z
JayFoxRox
2
typo
wikitext
text/x-wiki
This article documents the attribute types which are supported by the Xbox GPU.
Please take everything with a grain of salt - it's still being researched.
== Draw methods ==
=== Draw Arrays ===
Data uploaded through DMA.
Each attribute has it's own offset and stride.
Decoded using the attribute information.
=== Inline Buffer ===
Data uploaded and decoded through PGRAPH methods.
==== NV097_SET_VERTEX_DATA2F_M ... NV097_SET_VERTEX_DATA2F_M + 0x7c ====
==== NV097_SET_VERTEX_DATA4F_M ... NV097_SET_VERTEX_DATA4F_M + 0xfc ====
==== NV097_SET_VERTEX_DATA2S ... NV097_SET_VERTEX_DATA2S + 0x3c ====
==== NV097_SET_VERTEX_DATA4UB ... NV097_SET_VERTEX_DATA4UB + 0x3c ====
==== NV097_SET_VERTEX_DATA4S_M ... NV097_SET_VERTEX_DATA4S_M + 0x7c ====
=== Inline Array ===
Data uploaded through PGRAPH method NV097_INLINE_ARRAY.
The attributes are tightly packed in that buffer.
Decoded using the attribute information.
=== Inline Elements ===
Same as "Draw Arrays" but with an extra index buffer.
The index buffer is uploaded through PGRAPH methods NV097_ARRAY_ELEMENT16 and NV097_ARRAY_ELEMENT32.
== Attribute Types ==
=== Normalized unsigned byte (D3D) ===
Unsigned bytes aranged as ZYXW (BGRA) in memory (Also see [http://www.opengl.org/registry/specs/ARB/vertex_array_bgra.txt this GL extension]).
This is commonly used with an attribute count of 4.
FIXME: Does this still work with attribute count =/= 4 ?
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized unsigned byte (GL) ===
Unsigned bytes arranged as XYZW (RGBA) in memory.
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -1.0 to 1.0
FIXME: Verify
=== Float ===
IEEE-754 single precision float arranged as XYZW.
FIXME: What happens to NaN or denormals?
=== Short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -32768.0 to 32767.0
FIXME: Verify
=== Compressed normal ===
Each 32 bit attribute is consisting of 11 bit X, 11 bit Y, 10 bit Z.
Each component is signed and will be mapped into the range -1.0 to 1.0.
FIXME: Verify
FIXME: Is the attribute count ignored?
6e69f40c621b8b140ac2472a18c27c97f1a5f46b
NV2A/Vertex Shader
0
9
5069
5065
2017-04-22T10:45:59Z
JayFoxRox
2
Table headers
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
!Index
!GL Name
!D3D Name
!Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
!Meaning
!Word
!Offset (bits)
!Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
!Value
!Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
=== Functional units ===
==== Inverse Logic Unit (ILU) ====
{| class="wikitable"
|+ILU Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|RCP
|-
|3
|RCC
|-
|4
|RSQ
|-
|5
|EXP
|-
|6
|LOG
|-
|7
|LIT
|}
==== Multiply-Accumulate (MAC) ====
{| class="wikitable"
|+MAC Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|MUL
|-
|3
|ADD
|-
|4
|MAD
|-
|5
|DP3
|-
|6
|DPH
|-
|7
|DP4
|-
|8
|DST
|-
|9
|MIN
|-
|10
|MAX
|-
|11
|SLT
|-
|12
|SGE
|-
|13
|ARL
|}
651e8519c3898a0097342a1dd20bb1a28e95b496
Kernel
0
3678
5070
5067
2017-04-22T10:46:29Z
JayFoxRox
2
Table headers
wikitext
text/x-wiki
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only?!??
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only?!??
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|
|361
|Unused?
|-
|
|362
|Unused?
|-
|
|363
|Unused?
|-
|
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only?!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only?!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only?!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only?!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only?!
|}
== See Also ==
[[Hard Drive Files]]
6142f325b3812d9c00e5a1476900ad8f122789bf
5071
5070
2017-04-22T10:49:14Z
SoullessSentinel
2475
wikitext
text/x-wiki
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/RtlSnprintf]]
|361
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
de5d81730669970581640707e317b5f9d6b54841
5073
5071
2017-04-22T11:06:18Z
SoullessSentinel
2475
Consistency of "Devkits only!"
wikitext
text/x-wiki
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/RtlSnprintf]]
|361
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
8e56eb4e69266eef10a22ae30e06453ed1d75878
Memory
0
3674
5072
5039
2017-04-22T10:50:50Z
JayFoxRox
2
Fixed bug in pseudocode
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively. On Debug Xboxs and Chihiro, only the BIOS is mapped.
{|
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|BIOS
|0xFF000000 - 0xFFFFFFFF
|0xFF000000 - 0xFFFFFFFF
|-
|MCPX
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MAIN_MEMORY 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MAIN_MEMORY 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define BIOS_SIZE 256 * 1024
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)
uint8_t memory[MAIN_MEMORY] = {0};
uint8_t bios[BIOS_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MAIN_MEMORY) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MEMORY) {
return mcpx[location - MCPX_MEMORY];
}
if (location >= BIOS_MEMORY) {
return bios[(location - BIOS_MEMORY) % BIOS_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
b3efc1257111c2ff867fe55f008b1c5fcd29d3fb
Main Page/Header
0
3688
5074
2017-04-23T11:57:38Z
JayFoxRox
2
Mostly stolen from 3dbrew
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
This is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
<hr>
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode or Cxbx-Reloaded/Lobby on gitter.im.
</div>
</div>
47b46ecd6231db0c32feb5e486d26d3c3d277783
Main Page
0
1
5075
5059
2017-04-23T11:58:25Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
0f5ae7e313beff1339b9f752733f16402a806a9d
5081
5075
2017-04-30T01:25:05Z
Furon
2477
Added XBDM link
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [http://xqemu.com xqemu Xbox emulator]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
35d1da08f6bc5760ab4a345cbeb008580311d738
MCPX
0
3671
5076
5007
2017-04-26T19:51:10Z
Eighthpence
2472
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors (there are 4 of them) and also the USB, PCI, IDE, etc, controllers (please remove this disclaimer if I'm right, or fix it if I'm wrong.)
The MCPX is also the home to the secret [[MCPX ROM]].
1d6026b885cb23ebdfd027ecb1880517958b85dc
Boot Process
0
3683
5077
5038
2017-04-27T19:10:55Z
Eighthpence
2472
wikitext
text/x-wiki
If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching.
== Xcodes ==
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
11b99ec62155e05655b7b18ccd0f02324f246a81
5078
5077
2017-04-27T19:26:38Z
Eighthpence
2472
wikitext
text/x-wiki
If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching.
== Xcodes ==
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
== RC4 Decryption of the 2BL ==
Decryption of the 2BL seems to happen in 4 stages.
=== Stage 1 ===
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
=== Stage 2 ===
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
=== Stage 3 ===
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x8f000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x90000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
=== Stage 4 ===
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95fe4) == MAGIC_NUMBER) {
eip = 0x900000;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
d2058613cbff6dd65bf3a17a194d0b2ff9ea42cb
5079
5078
2017-04-27T19:37:29Z
Eighthpence
2472
/* Stage 4 */
wikitext
text/x-wiki
If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching.
== Xcodes ==
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
== RC4 Decryption of the 2BL ==
Decryption of the 2BL seems to happen in 4 stages.
=== Stage 1 ===
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
=== Stage 2 ===
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
=== Stage 3 ===
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x8f000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x90000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
=== Stage 4 ===
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
0366549ca0d66134fcb692655de9144004b88f06
Xbox Debug Monitor
0
3689
5080
2017-04-30T01:23:27Z
Furon
2477
Created page
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>C:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 16-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 16-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 2 and Type 3 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, sends a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
TODO
5625f38930f6afaa082ae59146187523179e1834
5082
5080
2017-04-30T01:33:08Z
Furon
2477
Correct bit width of first two NAP fields
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>C:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 2 and Type 3 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, sends a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
TODO
23c5b186c482a5f5cb0ff9dbb2d01082cf2f0366
5083
5082
2017-04-30T02:13:32Z
Furon
2477
Added external links
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>C:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 2 and Type 3 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, sends a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
TODO
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of Xbox Neighborhood written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
22b1d8e29357e9ff0114673eb4a16505339370ec
5084
5083
2017-04-30T02:18:37Z
Furon
2477
Correct Name Length NAP field description
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>C:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, sends a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
TODO
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of Xbox Neighborhood written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
b3071884b06dd06ca4140ace95cc940fc512bacd
5086
5084
2017-04-30T02:28:20Z
Furon
2477
Add Xbox Neighborhood links
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>C:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, sends a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
bd1189231c2a8e5812bb8497193f1dfc12a864f0
5088
5086
2017-04-30T21:28:55Z
Furon
2477
Expand the RDCP section a bit
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>C:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based, line-oriented, request-response protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client.
===Authentication===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
099059a622cff1558e28aa1e436f40c06d6419f3
5090
5088
2017-05-01T15:26:41Z
Furon
2477
Correct location of config file
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based, line-oriented, request-response protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client.
===Authentication===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
e0e3ef99532224a03b730c131e55c7ebcfa73eed
5109
5090
2017-05-09T23:01:00Z
Furon
2477
Add overview and status code information to RDCP section
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
===Overview===
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or simply <LF>. A command consists of a name and zero or more parameters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameters that contain whitespace must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
Upon receipt of a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
2xx status codes indicate success, while 4xx codes indicate failure. Each code has a default message, but some commands use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; 200- OK
: Standard response for successful execution of a command that doesn't expect to send or receive any additional data.
; 201- connected
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; 202- multiline response follows
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; 203- binary response follows
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; 204- ready for binary data
: The command is expecting additional binary data from the client. The client must satisfy the command's expectation before sending another command.
; 205- dedicated
: The connection has been moved to a dedicated processing thread.
====4xx Failure====
TODO
===Authentication===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
94b8e962fabb3aa92711341bd6df566cedeb5510
5110
5109
2017-05-10T01:55:20Z
Furon
2477
Clarify behavior of XBDM after sending code 204
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
===Overview===
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or simply <LF>. A command consists of a name and zero or more parameters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameters that contain whitespace must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
Upon receipt of a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
2xx status codes indicate success, while 4xx codes indicate failure. Each code has a default message, but some commands use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; 200- OK
: Standard response for successful execution of a command that doesn't expect to send or receive any additional data.
; 201- connected
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; 202- multiline response follows
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; 203- binary response follows
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; 204- ready for binary data
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final status of the command.
; 205- dedicated
: The connection has been moved to a dedicated processing thread.
====4xx Failure====
TODO
===Authentication===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
52c1a70e1234c1a52de0a787a2abb56ad40cd32b
5111
5110
2017-05-10T03:16:16Z
Furon
2477
/* 2xx Success */ Fix 200 status
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
===Overview===
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or simply <LF>. A command consists of a name and zero or more parameters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameters that contain whitespace must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
Upon receipt of a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
2xx status codes indicate success, while 4xx codes indicate failure. Each code has a default message, but some commands use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; 200- OK
: Standard response for successful execution of a command.
; 201- connected
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; 202- multiline response follows
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; 203- binary response follows
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; 204- ready for binary data
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final status of the command.
; 205- dedicated
: The connection has been moved to a dedicated processing thread.
====4xx Failure====
TODO
===Authentication===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
8bf934e7a23f423336421ff1a821dc4614939e48
Xbox Neighborhood
0
3690
5085
2017-04-30T02:25:05Z
Furon
2477
Create page
wikitext
text/x-wiki
'''Xbox Neighborhood''' is a Windows shell extension that provides the ability to manages files on Xbox Development Kits in Windows Explorer.
d99e8bba380992db83f680b89cad847664203314
5087
5085
2017-04-30T03:22:57Z
Furon
2477
Fix typo
wikitext
text/x-wiki
'''Xbox Neighborhood''' is a Windows shell extension that provides the ability to manage files on Xbox Development Kits in Windows Explorer.
7c95b45d46813b4439f5aee9d6b9db3f4916a23a
Xbox Input Devices
0
11
5089
20
2017-05-01T03:23:52Z
Mborgerson
2478
wikitext
text/x-wiki
== Standard Gamepads ==
== Steering wheels ==
== Light guns ==
== USB Adapters ==
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
b74a42859d574a55ebf89358c1e2ccdb4510d2b7
5115
5089
2017-05-11T16:24:51Z
JayFoxRox
2
Added horrible docs for Steel Batallion Controller
wikitext
text/x-wiki
== Standard Gamepads ==
== Steering wheels ==
== Light guns ==
== Steel Batallion Controller ==
=== USB Device Scriptor ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>//FIXME: Convert to field masks
typedef enum {
EmergencyEject = 4,
CockpitHatch = 5,
Ignition = 6,
Start = 7,
OpenClose = 8,
MapZoomInOut = 9,
ModeSelect = 10,
SubMonitorModeSelect = 11,
MainMonitorZoomIn = 12,
MainMonitorZoomOut = 13,
Gear5 = 41,
Gear4 = 40,
Gear3 = 39,
Gear2 = 38,
Gear1 = 37,
GearN = 36,
GearR = 35,
Comm5 = 33,
Comm4 = 32,
Comm3 = 31,
Comm2 = 30,
Comm1 = 29,
MagazineChange = 28,
SubWeaponControl = 27,
MainWeaponControl = 26,
F3 = 25,
F2 = 24,
F1 = 23,
NightScope = 22,
Override = 21,
TankDetach = 20,
Chaff = 19,
Extinguisher = 18,
Washing = 17,
LineColorChange = 16,
Manipulator = 15,
ForecastShootingSystem = 14,
} LEDEnum;
// Sets the intensity of the specified LED in the buffer, but gives the option on whether you want
// to send the buffer to the controller. This can be useful for updating multiple LED's at the
// same time, but not waiting for the LED buffer to transfer to the device after each call.
// <param name="LightId">A ControllerLEDEnum value that specifies which LED to modify</param>
// <param name="Intensity">The intensity of the LED, ranging from 0 to 15</param>
// <param name="refreshState">A boolean value indicating whether to refresh the buffer on the device.</param>
public void SetLEDState(ControllerLEDEnum LightId, int Intensity, bool refreshState) {
int hexPos = ((int) LightId) % 2;
int bytePos = (((int) LightId) - hexPos) / 2;
if (Intensity > 0x0f) Intensity = 0x0f;
// Erase the byte position, and set the light intensity
rawLEDData[bytePos&= (byte) ((hexPos == 1)?0x0F:0xF0);
rawLEDData[bytePos+= (byte) (Intensity * ((hexPos == 1)?0x10:0x01));
if (refreshState) {
RefreshLEDState();
}
}</pre>
== USB Adapters ==
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
41c2d7b5be5480d70026964b6834035dc3d65e25
5116
5115
2017-05-11T16:39:12Z
JayFoxRox
2
Fixup Steel Batallion LED fields
wikitext
text/x-wiki
== Standard Gamepads ==
== Steering wheels ==
== Light guns ==
== Steel Batallion Controller ==
=== USB Device Scriptor ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;
}</pre>
== USB Adapters ==
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
8b0ec8641359dec76f444113d29b2078b63ea8b4
5117
5116
2017-05-11T16:39:44Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== Standard Gamepads ==
== Steering wheels ==
== Light guns ==
== Steel Batallion Controller ==
=== USB Device Scriptor ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
== USB Adapters ==
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
ab732282e79db59e5c20be699ee3292d50e29056
Main Page/Xbox Live
0
3691
5091
2017-05-07T21:05:17Z
Wayo
2479
Created page with "== Xbox Live infrastructure == Server: macs.xboxlive.com == Heartbeat == Ethernet II, Src: Microsof_f2:4c:01 (00:50:f2:f2:4c:01), Dst: Broadcast (ff:ff:ff:ff:ff:ff)..."
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Server: macs.xboxlive.com
== Heartbeat ==
Ethernet II, Src: Microsof_f2:4c:01 (00:50:f2:f2:4c:01), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
42bc2ad0af363cc382130631a81121b9f2961374
5092
5091
2017-05-07T21:05:41Z
Wayo
2479
/* Heartbeat */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Server: macs.xboxlive.com
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
63416dc63f50c42453a52410708a1fbec7b76fba
5093
5092
2017-05-07T21:28:06Z
Wayo
2479
/* Xbox Live infrastructure */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
511a6f1d33e21b4520e61c1bde444d7e49f5d57c
5094
5093
2017-05-07T21:57:59Z
Wayo
2479
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://www.se7ensins.com/forums/threads/a-detailed-explanation-as-to-why-xbox-live-is-down-for-some.1617925/ https://www.se7ensins.com/forums/threads/a-detailed-explanation-as-to-why-xbox-live-is-down-for-some.1617925/]
9ef5ea3e8bb5daa69cd72d2ddadfa32b5fbe2d57
5095
5094
2017-05-07T22:00:24Z
Wayo
2479
/* References and links */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
a7b4e2030c1d6e77a0125565e6918e06e329db9d
5096
5095
2017-05-08T19:05:31Z
Wayo
2479
/* Xbox Live infrastructure */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos Authentication ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| ?
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
3ab16219542a754e8695493bcd8fcf85f54bf45f
5097
5096
2017-05-08T19:26:26Z
Wayo
2479
/* Kerberos Authentication */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos Authentication ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
b43ea8131aec732eed65700a8ba824faefc3af61
5098
5097
2017-05-09T07:02:53Z
Wayo
2479
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos Authentication ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* XOnline* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XOnlineGetUsers( XBLAccountusers, &numOfXBLiveAccounts )
|
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|
|-
| XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|
|-
| XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XNetGetEthernetLinkStatus()
|
|-
|XOnlineGetLogonUsers()
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
7a006b273e33ef363219ceb7776bc96edfb3d542
5099
5098
2017-05-09T07:05:13Z
Wayo
2479
/* References and links */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos Authentication ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* XOnline* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XOnlineGetUsers( XBLAccountusers, &numOfXBLiveAccounts )
|
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|
|-
| XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|
|-
| XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XNetGetEthernetLinkStatus()
|
|-
|XOnlineGetLogonUsers()
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
db22cb960205d8d69a51aa5a6d1b5488d3cb6a32
5101
5099
2017-05-09T09:49:20Z
Wayo
2479
Replaced content with "[[Xbox Live]]"
wikitext
text/x-wiki
[[Xbox Live]]
27a7f7759ea018ef5a9f7e053d55438bcff406a4
Network
0
3692
5100
2017-05-09T09:48:38Z
Wayo
2479
Created page with "== Xbox Live infrastructure == Kerberos Authentication Server: macs.xboxlive.com === Kerberos Authentication === {| class="wikitable" |+Xbox PA-DATA |- ! padata-type ! descr..."
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos Authentication ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* XOnline* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XOnlineGetUsers( XBLAccountusers, &numOfXBLiveAccounts )
|
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|
|-
| XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|
|-
| XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XNetGetEthernetLinkStatus()
|
|-
|XOnlineGetLogonUsers()
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
db22cb960205d8d69a51aa5a6d1b5488d3cb6a32
5102
5100
2017-05-09T09:49:50Z
Wayo
2479
/* Xbox Live infrastructure */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* XOnline* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XOnlineGetUsers( XBLAccountusers, &numOfXBLiveAccounts )
|
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|
|-
| XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|
|-
| XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XNetGetEthernetLinkStatus()
|
|-
|XOnlineGetLogonUsers()
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
3b4f1d68cc262158430d463dca7c224d38bc5fb1
5103
5102
2017-05-09T09:54:51Z
Wayo
2479
/* Xbox Live Functions */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers( XBLAccountusers, &numOfXBLiveAccounts )
|
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
6f11a62930373edd7260934211b239ba88a79da0
5104
5103
2017-05-09T11:35:40Z
Wayo
2479
/* Xbox Live Functions */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
a6353b68e2a982e6a8b90254366df88b507a8cc8
5107
5104
2017-05-09T13:02:07Z
Wayo
2479
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
e790a9d0b9b4cfe2dcce34bf3480cd5f81899171
5108
5107
2017-05-09T14:48:00Z
Wayo
2479
/* References and links */
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.de/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
f041fe96109513c0441cd8aff80a9a6dd97eb3dd
5112
5108
2017-05-11T14:03:02Z
Wayo
2479
Wayo moved page [[Xbox Live]] to [[Network]]: Making it more generic
wikitext
text/x-wiki
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.de/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
f041fe96109513c0441cd8aff80a9a6dd97eb3dd
5114
5112
2017-05-11T14:05:37Z
Wayo
2479
wikitext
text/x-wiki
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live infrastructure ==
Kerberos Authentication Server: macs.xboxlive.com
=== Kerberos ===
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Xbox Live Functions ==
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.de/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
318b01aef88cc06b683080491ea2328b02bb3827
Engine List
0
4
5105
5041
2017-05-09T12:19:08Z
Wayo
2479
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <sup>[Ref]</sup>]
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], [https://en.wikipedia.org/wiki/Id_Tech_3 here], and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
137acdc95e6787bd258e1ef3c34d1d9187faf1b3
5106
5105
2017-05-09T12:19:28Z
Wayo
2479
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <sup>[Ref]</sup>]
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], [https://en.wikipedia.org/wiki/Id_Tech_3 here], and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
6424aa04b766668eee70bf12eec4379e9a2a6da2
Xbox Live
0
3693
5113
2017-05-11T14:03:02Z
Wayo
2479
Wayo moved page [[Xbox Live]] to [[Network]]: Making it more generic
wikitext
text/x-wiki
#REDIRECT [[Network]]
33df8dc4bf034e7312e5350fd80f7d07dc1609f0
Xbox Input Devices
0
11
5118
5117
2017-05-11T21:43:24Z
JayFoxRox
2
wikitext
text/x-wiki
== Standard Gamepads ==
== Steering wheels ==
== Light guns ==
== Steel Batallion Controller ==
=== USB Device Descriptor ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
== USB Adapters ==
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
e832502e81178b49eea188de3ab597e60a5c8409
5119
5118
2017-05-11T22:48:32Z
JayFoxRox
2
/* Steel Batallion Controller */
wikitext
text/x-wiki
== Standard Gamepads ==
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Device Descriptor ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
== USB Adapters ==
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
21acbe3a7cfe769ca87fcde9f84021fc1056b9b8
5121
5119
2017-05-12T08:01:16Z
JayFoxRox
2
Standard Gamepads + Overview
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{|
|Pin
|Typical cable color
|Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
<pre>DPAD_UP = FIELD_MASK(0, 1 << 0)
DPAD_DOWN = FIELD_MASK(0, 1 << 1)
DPAD_LEFT = FIELD_MASK(0, 1 << 2)
DPAD_RIGHT = FIELD_MASK(0, 1 << 3)
START = FIELD_MASK(0, 1 << 4)
BACK = FIELD_MASK(0, 1 << 5)
LEFT_THUMB = FIELD_MASK(0, 1 << 6)
RIGHT_THUMB = FIELD_MASK(0, 1 << 7)
A = FIELD_MASK(2, 0xFF), // These buttons are analog!
B = FIELD_MASK(3, 0xFF),
X = FIELD_MASK(4, 0xFF),
Y = FIELD_MASK(5, 0xFF),
BLACK = FIELD_MASK(6, 0xFF),
WHITE = FIELD_MASK(7, 0xFF),
LEFT_TRIGGER = FIELD_MASK(8, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(9, 0xFF),
sThumbLX = FIELD_MASK(10, 0xFFFF),
sThumbLY = FIELD_MASK(12, 0xFFFF),
sThumbRX = FIELD_MASK(14, 0xFFFF),
sThumbRY = FIELD_MASK(16, 0xFFFF),</pre>
=== Xbox to Controller ===
<pre>left_actuator_strength = FIELD_MASK(0, 0xFFFF),
right_actuator_strength = FIELD_MASK(2, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Device Descriptor ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
== USB Adapters ==
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
69147005e98a3ee1bf0c0965ec562ae59ebaaaf0
5122
5121
2017-05-12T08:02:02Z
JayFoxRox
2
wikitable for wiring
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
<pre>DPAD_UP = FIELD_MASK(0, 1 << 0)
DPAD_DOWN = FIELD_MASK(0, 1 << 1)
DPAD_LEFT = FIELD_MASK(0, 1 << 2)
DPAD_RIGHT = FIELD_MASK(0, 1 << 3)
START = FIELD_MASK(0, 1 << 4)
BACK = FIELD_MASK(0, 1 << 5)
LEFT_THUMB = FIELD_MASK(0, 1 << 6)
RIGHT_THUMB = FIELD_MASK(0, 1 << 7)
A = FIELD_MASK(2, 0xFF), // These buttons are analog!
B = FIELD_MASK(3, 0xFF),
X = FIELD_MASK(4, 0xFF),
Y = FIELD_MASK(5, 0xFF),
BLACK = FIELD_MASK(6, 0xFF),
WHITE = FIELD_MASK(7, 0xFF),
LEFT_TRIGGER = FIELD_MASK(8, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(9, 0xFF),
sThumbLX = FIELD_MASK(10, 0xFFFF),
sThumbLY = FIELD_MASK(12, 0xFFFF),
sThumbRX = FIELD_MASK(14, 0xFFFF),
sThumbRY = FIELD_MASK(16, 0xFFFF),</pre>
=== Xbox to Controller ===
<pre>left_actuator_strength = FIELD_MASK(0, 0xFFFF),
right_actuator_strength = FIELD_MASK(2, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Device Descriptor ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
== USB Adapters ==
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
a6c5e5c4c507ee3d52bd905e3ca091b46ae137b2
5123
5122
2017-05-12T08:04:05Z
JayFoxRox
2
Moved USB adapter section to top for visibility
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
<pre>DPAD_UP = FIELD_MASK(0, 1 << 0)
DPAD_DOWN = FIELD_MASK(0, 1 << 1)
DPAD_LEFT = FIELD_MASK(0, 1 << 2)
DPAD_RIGHT = FIELD_MASK(0, 1 << 3)
START = FIELD_MASK(0, 1 << 4)
BACK = FIELD_MASK(0, 1 << 5)
LEFT_THUMB = FIELD_MASK(0, 1 << 6)
RIGHT_THUMB = FIELD_MASK(0, 1 << 7)
A = FIELD_MASK(2, 0xFF), // These buttons are analog!
B = FIELD_MASK(3, 0xFF),
X = FIELD_MASK(4, 0xFF),
Y = FIELD_MASK(5, 0xFF),
BLACK = FIELD_MASK(6, 0xFF),
WHITE = FIELD_MASK(7, 0xFF),
LEFT_TRIGGER = FIELD_MASK(8, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(9, 0xFF),
sThumbLX = FIELD_MASK(10, 0xFFFF),
sThumbLY = FIELD_MASK(12, 0xFFFF),
sThumbRX = FIELD_MASK(14, 0xFFFF),
sThumbRY = FIELD_MASK(16, 0xFFFF),</pre>
=== Xbox to Controller ===
<pre>left_actuator_strength = FIELD_MASK(0, 0xFFFF),
right_actuator_strength = FIELD_MASK(2, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Device Descriptor ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
f700c89c6ccef747aa2885cb7278b069f112c363
5124
5123
2017-05-12T09:07:41Z
JayFoxRox
2
/* USB Device Descriptor */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
<pre>DPAD_UP = FIELD_MASK(0, 1 << 0)
DPAD_DOWN = FIELD_MASK(0, 1 << 1)
DPAD_LEFT = FIELD_MASK(0, 1 << 2)
DPAD_RIGHT = FIELD_MASK(0, 1 << 3)
START = FIELD_MASK(0, 1 << 4)
BACK = FIELD_MASK(0, 1 << 5)
LEFT_THUMB = FIELD_MASK(0, 1 << 6)
RIGHT_THUMB = FIELD_MASK(0, 1 << 7)
A = FIELD_MASK(2, 0xFF), // These buttons are analog!
B = FIELD_MASK(3, 0xFF),
X = FIELD_MASK(4, 0xFF),
Y = FIELD_MASK(5, 0xFF),
BLACK = FIELD_MASK(6, 0xFF),
WHITE = FIELD_MASK(7, 0xFF),
LEFT_TRIGGER = FIELD_MASK(8, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(9, 0xFF),
sThumbLX = FIELD_MASK(10, 0xFFFF),
sThumbLY = FIELD_MASK(12, 0xFFFF),
sThumbRX = FIELD_MASK(14, 0xFFFF),
sThumbRY = FIELD_MASK(16, 0xFFFF),</pre>
=== Xbox to Controller ===
<pre>left_actuator_strength = FIELD_MASK(0, 0xFFFF),
right_actuator_strength = FIELD_MASK(2, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
d5e3d7befb6a8eb4261cb4e752f3fefd61cc99e3
5125
5124
2017-05-12T09:11:22Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
<pre>DPAD_UP = FIELD_MASK(2, 1 << 0)
DPAD_DOWN = FIELD_MASK(2, 1 << 1)
DPAD_LEFT = FIELD_MASK(2, 1 << 2)
DPAD_RIGHT = FIELD_MASK(2, 1 << 3)
START = FIELD_MASK(2, 1 << 4)
BACK = FIELD_MASK(2, 1 << 5)
LEFT_THUMB = FIELD_MASK(2, 1 << 6)
RIGHT_THUMB = FIELD_MASK(2, 1 << 7)
A = FIELD_MASK(4, 0xFF), // These buttons are analog!
B = FIELD_MASK(5, 0xFF),
X = FIELD_MASK(6, 0xFF),
Y = FIELD_MASK(7, 0xFF),
BLACK = FIELD_MASK(8, 0xFF),
WHITE = FIELD_MASK(9, 0xFF),
LEFT_TRIGGER = FIELD_MASK(10, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(11, 0xFF),
sThumbLX = FIELD_MASK(12, 0xFFFF),
sThumbLY = FIELD_MASK(14, 0xFFFF),
sThumbRX = FIELD_MASK(16, 0xFFFF),
sThumbRY = FIELD_MASK(18, 0xFFFF),</pre>
=== Xbox to Controller ===
<pre>left_actuator_strength = FIELD_MASK(0, 0xFFFF),
right_actuator_strength = FIELD_MASK(2, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
89bf79128ed834dba197d254c55f61f61415e9d8
5126
5125
2017-05-12T09:11:37Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
<pre>DPAD_UP = FIELD_MASK(2, 1 << 0)
DPAD_DOWN = FIELD_MASK(2, 1 << 1)
DPAD_LEFT = FIELD_MASK(2, 1 << 2)
DPAD_RIGHT = FIELD_MASK(2, 1 << 3)
START = FIELD_MASK(2, 1 << 4)
BACK = FIELD_MASK(2, 1 << 5)
LEFT_THUMB = FIELD_MASK(2, 1 << 6)
RIGHT_THUMB = FIELD_MASK(2, 1 << 7)
A = FIELD_MASK(4, 0xFF), // These buttons are analog!
B = FIELD_MASK(5, 0xFF),
X = FIELD_MASK(6, 0xFF),
Y = FIELD_MASK(7, 0xFF),
BLACK = FIELD_MASK(8, 0xFF),
WHITE = FIELD_MASK(9, 0xFF),
LEFT_TRIGGER = FIELD_MASK(10, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(11, 0xFF),
sThumbLX = FIELD_MASK(12, 0xFFFF),
sThumbLY = FIELD_MASK(14, 0xFFFF),
sThumbRX = FIELD_MASK(16, 0xFFFF),
sThumbRY = FIELD_MASK(18, 0xFFFF),</pre>
=== Xbox to Controller ===
6 bytes
<pre>left_actuator_strength = FIELD_MASK(2, 0xFFFF),
right_actuator_strength = FIELD_MASK(4, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
rawControlData = new Byte[26];
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
0778988fcca7de4382944b677de87ee57418422d
5127
5126
2017-05-12T09:12:02Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
<pre>DPAD_UP = FIELD_MASK(2, 1 << 0)
DPAD_DOWN = FIELD_MASK(2, 1 << 1)
DPAD_LEFT = FIELD_MASK(2, 1 << 2)
DPAD_RIGHT = FIELD_MASK(2, 1 << 3)
START = FIELD_MASK(2, 1 << 4)
BACK = FIELD_MASK(2, 1 << 5)
LEFT_THUMB = FIELD_MASK(2, 1 << 6)
RIGHT_THUMB = FIELD_MASK(2, 1 << 7)
A = FIELD_MASK(4, 0xFF), // These buttons are analog!
B = FIELD_MASK(5, 0xFF),
X = FIELD_MASK(6, 0xFF),
Y = FIELD_MASK(7, 0xFF),
BLACK = FIELD_MASK(8, 0xFF),
WHITE = FIELD_MASK(9, 0xFF),
LEFT_TRIGGER = FIELD_MASK(10, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(11, 0xFF),
sThumbLX = FIELD_MASK(12, 0xFFFF),
sThumbLY = FIELD_MASK(14, 0xFFFF),
sThumbRX = FIELD_MASK(16, 0xFFFF),
sThumbRY = FIELD_MASK(18, 0xFFFF),</pre>
=== Xbox to Controller ===
6 bytes
<pre>left_actuator_strength = FIELD_MASK(2, 0xFFFF),
right_actuator_strength = FIELD_MASK(4, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
<pre>rawLEDData = new Byte[34];
typedef enum {
EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
4b5b9b761dbe1723fec0c3fc387ce93b41681b2a
5128
5127
2017-05-12T09:12:39Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
<pre>DPAD_UP = FIELD_MASK(2, 1 << 0)
DPAD_DOWN = FIELD_MASK(2, 1 << 1)
DPAD_LEFT = FIELD_MASK(2, 1 << 2)
DPAD_RIGHT = FIELD_MASK(2, 1 << 3)
START = FIELD_MASK(2, 1 << 4)
BACK = FIELD_MASK(2, 1 << 5)
LEFT_THUMB = FIELD_MASK(2, 1 << 6)
RIGHT_THUMB = FIELD_MASK(2, 1 << 7)
A = FIELD_MASK(4, 0xFF), // These buttons are analog!
B = FIELD_MASK(5, 0xFF),
X = FIELD_MASK(6, 0xFF),
Y = FIELD_MASK(7, 0xFF),
BLACK = FIELD_MASK(8, 0xFF),
WHITE = FIELD_MASK(9, 0xFF),
LEFT_TRIGGER = FIELD_MASK(10, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(11, 0xFF),
sThumbLX = FIELD_MASK(12, 0xFFFF),
sThumbLY = FIELD_MASK(14, 0xFFFF),
sThumbRX = FIELD_MASK(16, 0xFFFF),
sThumbRY = FIELD_MASK(18, 0xFFFF),</pre>
=== Xbox to Controller ===
6 bytes
<pre>left_actuator_strength = FIELD_MASK(2, 0xFFFF),
right_actuator_strength = FIELD_MASK(4, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),
} LEDEnum;</pre>
62277e21ae704c7a33212e02b2f73d1785574840
5129
5128
2017-05-12T09:13:10Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
<pre>DPAD_UP = FIELD_MASK(2, 1 << 0)
DPAD_DOWN = FIELD_MASK(2, 1 << 1)
DPAD_LEFT = FIELD_MASK(2, 1 << 2)
DPAD_RIGHT = FIELD_MASK(2, 1 << 3)
START = FIELD_MASK(2, 1 << 4)
BACK = FIELD_MASK(2, 1 << 5)
LEFT_THUMB = FIELD_MASK(2, 1 << 6)
RIGHT_THUMB = FIELD_MASK(2, 1 << 7)
A = FIELD_MASK(4, 0xFF), // These buttons are analog!
B = FIELD_MASK(5, 0xFF),
X = FIELD_MASK(6, 0xFF),
Y = FIELD_MASK(7, 0xFF),
BLACK = FIELD_MASK(8, 0xFF),
WHITE = FIELD_MASK(9, 0xFF),
LEFT_TRIGGER = FIELD_MASK(10, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(11, 0xFF),
sThumbLX = FIELD_MASK(12, 0xFFFF),
sThumbLY = FIELD_MASK(14, 0xFFFF),
sThumbRX = FIELD_MASK(16, 0xFFFF),
sThumbRY = FIELD_MASK(18, 0xFFFF),</pre>
=== Xbox to Controller ===
6 bytes
<pre>left_actuator_strength = FIELD_MASK(2, 0xFFFF),
right_actuator_strength = FIELD_MASK(4, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
typedef enum {
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
} ButtonEnum;</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
e035269e5d47b907e1a7fe5a4f4df86b511407fd
5130
5129
2017-05-12T09:13:30Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
<pre>DPAD_UP = FIELD_MASK(2, 1 << 0)
DPAD_DOWN = FIELD_MASK(2, 1 << 1)
DPAD_LEFT = FIELD_MASK(2, 1 << 2)
DPAD_RIGHT = FIELD_MASK(2, 1 << 3)
START = FIELD_MASK(2, 1 << 4)
BACK = FIELD_MASK(2, 1 << 5)
LEFT_THUMB = FIELD_MASK(2, 1 << 6)
RIGHT_THUMB = FIELD_MASK(2, 1 << 7)
A = FIELD_MASK(4, 0xFF), // These buttons are analog!
B = FIELD_MASK(5, 0xFF),
X = FIELD_MASK(6, 0xFF),
Y = FIELD_MASK(7, 0xFF),
BLACK = FIELD_MASK(8, 0xFF),
WHITE = FIELD_MASK(9, 0xFF),
LEFT_TRIGGER = FIELD_MASK(10, 0xFF),
RIGHT_TRIGGER = FIELD_MASK(11, 0xFF),
sThumbLX = FIELD_MASK(12, 0xFFFF),
sThumbLY = FIELD_MASK(14, 0xFFFF),
sThumbRX = FIELD_MASK(16, 0xFFFF),
sThumbRY = FIELD_MASK(18, 0xFFFF),</pre>
=== Xbox to Controller ===
6 bytes
<pre>left_actuator_strength = FIELD_MASK(2, 0xFFFF),
right_actuator_strength = FIELD_MASK(4, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
6d24d8e63696b45d9e30a5937aed168b776e95f0
5131
5130
2017-05-12T09:21:32Z
JayFoxRox
2
Turned field enum into table (WIP)
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (bits)
!Mask (bits)
!Notes
|-
|DPAD_UP
|8*2
|1 << 0
|
|-
|DPAD_DOWN
|8*2
|1 << 1
|
|-
|DPAD_LEFT
|8*2
|1 << 2
|
|-
|DPAD_RIGHT
|8*2
|1 << 3
|
|-
|START
|8*2
|1 << 4
|
|-
|BACK
|8*2
|1 << 5
|
|-
|LEFT_THUMB
|8*2
|1 << 6
|
|-
|RIGHT_THUMB
|8*2
|1 << 7
|
|-
|A
|8*4
|0xFF
|Button is analog
|-
|B
|8*5
|0xFF
|Button is analog
|-
|X
|8*6
|0xFF
|Button is analog
|-
|Y
|8*7
|0xFF
|Button is analog
|-
|BLACK
|8*8
|0xFF
|Button is analog
|-
|WHITE
|8*9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|8*10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
||8*11
|0xFF
|Trigger is analog
|-
|sThumbLX
|8*12
|0xFFFF
|
|-
|sThumbLY
|8*14
|0xFFFF
|
|-
|sThumbRX
|8*16
|0xFFFF
|
|-
|sThumbRY
|8*18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
<pre>left_actuator_strength = FIELD_MASK(2, 0xFFFF),
right_actuator_strength = FIELD_MASK(4, 0xFFFF),</pre>
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
932636b9788019fb11193d68bd708bd08298193c
5132
5131
2017-05-12T09:23:58Z
JayFoxRox
2
Turned field enum into table
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (bits)
!Mask (bits)
!Notes
|-
|DPAD_UP
|8*2
|1 << 0
|
|-
|DPAD_DOWN
|8*2
|1 << 1
|
|-
|DPAD_LEFT
|8*2
|1 << 2
|
|-
|DPAD_RIGHT
|8*2
|1 << 3
|
|-
|START
|8*2
|1 << 4
|
|-
|BACK
|8*2
|1 << 5
|
|-
|LEFT_THUMB
|8*2
|1 << 6
|
|-
|RIGHT_THUMB
|8*2
|1 << 7
|
|-
|A
|8*4
|0xFF
|Button is analog
|-
|B
|8*5
|0xFF
|Button is analog
|-
|X
|8*6
|0xFF
|Button is analog
|-
|Y
|8*7
|0xFF
|Button is analog
|-
|BLACK
|8*8
|0xFF
|Button is analog
|-
|WHITE
|8*9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|8*10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
||8*11
|0xFF
|Trigger is analog
|-
|sThumbLX
|8*12
|0xFFFF
|
|-
|sThumbLY
|8*14
|0xFFFF
|
|-
|sThumbRX
|8*16
|0xFFFF
|
|-
|sThumbRY
|8*18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes (48 bit)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|Left actuator strength
|16-31
|
|-
|Right actuator strength
|32-47
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
c66351a273b256bbe94fc6ac9eda27251181c08c
5133
5132
2017-05-12T09:29:07Z
JayFoxRox
2
Turned field enum into table (WIP: buttons are not confirmed and wrong order in list)
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes (160 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|DPAD_UP
|23
|
|-
|DPAD_DOWN
|22
|
|-
|DPAD_LEFT
|21
|
|-
|DPAD_RIGHT
|20
|
|-
|START
|19
|
|-
|BACK
|18
|
|-
|LEFT_THUMB
|17
|
|-
|RIGHT_THUMB
|16
|
|-
|A
|32-39
|Button is analog
|-
|B
|40-47
|Button is analog
|-
|X
|48-55
|Button is analog
|-
|Y
|56-63
|Button is analog
|-
|BLACK
|64-71
|Button is analog
|-
|WHITE
|72-79
|Button is analog
|-
|LEFT_TRIGGER
|80-87
|Trigger is analog
|-
|RIGHT_TRIGGER
|88-95
|Trigger is analog
|-
|sThumbLX
|96-111
|
|-
|sThumbLY
|112-127
|
|-
|sThumbRX
|128-143
|
|-
|sThumbRY
|144-159
|
|}
=== Xbox to Controller ===
6 bytes (48 bit)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|Left actuator strength
|16-31
|
|-
|Right actuator strength
|32-47
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
5a69374cea21e0f38d34c7e0f79a1bbd0c6548bf
5134
5133
2017-05-12T09:29:25Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes (160 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|DPAD_UP
|23
|
|-
|DPAD_DOWN
|22
|
|-
|DPAD_LEFT
|21
|
|-
|DPAD_RIGHT
|20
|
|-
|START
|19
|
|-
|BACK
|18
|
|-
|LEFT_THUMB
|17
|
|-
|RIGHT_THUMB
|16
|
|-
|A
|32-39
|Button is analog
|-
|B
|40-47
|Button is analog
|-
|X
|48-55
|Button is analog
|-
|Y
|56-63
|Button is analog
|-
|BLACK
|64-71
|Button is analog
|-
|WHITE
|72-79
|Button is analog
|-
|LEFT_TRIGGER
|80-87
|Trigger is analog
|-
|RIGHT_TRIGGER
|88-95
|Trigger is analog
|-
|sThumbLX
|96-111
|
|-
|sThumbLY
|112-127
|
|-
|sThumbRX
|128-143
|
|-
|sThumbRY
|144-159
|
|}
=== Xbox to Controller ===
6 bytes (48 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|Left actuator strength
|16-31
|
|-
|Right actuator strength
|32-47
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
740f582323636863326cf91c9ff1fe41a147ac64
5135
5134
2017-05-12T09:29:37Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes (160 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|DPAD_UP
|23
|
|-
|DPAD_DOWN
|22
|
|-
|DPAD_LEFT
|21
|
|-
|DPAD_RIGHT
|20
|
|-
|START
|19
|
|-
|BACK
|18
|
|-
|LEFT_THUMB
|17
|
|-
|RIGHT_THUMB
|16
|
|-
|A
|32-39
|Button is analog
|-
|B
|40-47
|Button is analog
|-
|X
|48-55
|Button is analog
|-
|Y
|56-63
|Button is analog
|-
|BLACK
|64-71
|Button is analog
|-
|WHITE
|72-79
|Button is analog
|-
|LEFT_TRIGGER
|80-87
|Trigger is analog
|-
|RIGHT_TRIGGER
|88-95
|Trigger is analog
|-
|sThumbLX
|96-111
|
|-
|sThumbLY
|112-127
|
|-
|sThumbRX
|128-143
|
|-
|sThumbRY
|144-159
|
|}
=== Xbox to Controller ===
6 bytes (48 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|Left actuator strength
|16-31
|
|-
|Right actuator strength
|32-47
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
AimingX = BUTTON_MASK( 9, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
AimingY = BUTTON_MASK(11, 0xFF), // Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
RotationLever = BUTTON_MASK(13, 0xFF), // Corresponds to the "Rotation Lever" joystick on the left.
SightChangeX = BUTTON_MASK(15, 0xFF), // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
SightChangeY = BUTTON_MASK(17, 0xFF) // Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
LeftPedal = BUTTON_MASK(19, 0xFF), // Corresponds to the left pedal on the pedal block
MiddlePedal = BUTTON_MASK(21, 0xFF), // Corresponds to the middle pedal on the pedal block
RightPedal = BUTTON_MASK(23, 0xFF), // Corresponds to the right pedal on the pedal block
TunerDial = BUTTON_MASK(24, 0x0F), // Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12.
// The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
GearLever = BUTTON_MASK(25, 0xFF), // Corresponds to the gear lever on the left block.
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
974423401d83b384e4db3c284af9cdb25be533c3
5136
5135
2017-05-12T09:39:26Z
JayFoxRox
2
Turned field enum into table (WIP)
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes (160 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|DPAD_UP
|23
|
|-
|DPAD_DOWN
|22
|
|-
|DPAD_LEFT
|21
|
|-
|DPAD_RIGHT
|20
|
|-
|START
|19
|
|-
|BACK
|18
|
|-
|LEFT_THUMB
|17
|
|-
|RIGHT_THUMB
|16
|
|-
|A
|32-39
|Button is analog
|-
|B
|40-47
|Button is analog
|-
|X
|48-55
|Button is analog
|-
|Y
|56-63
|Button is analog
|-
|BLACK
|64-71
|Button is analog
|-
|WHITE
|72-79
|Button is analog
|-
|LEFT_TRIGGER
|80-87
|Trigger is analog
|-
|RIGHT_TRIGGER
|88-95
|Trigger is analog
|-
|sThumbLX
|96-111
|
|-
|sThumbLY
|112-127
|
|-
|sThumbRX
|128-143
|
|-
|sThumbRY
|144-159
|
|}
=== Xbox to Controller ===
6 bytes (48 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|Left actuator strength
|16-31
|
|-
|Right actuator strength
|32-47
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes (208 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|AimingX
|72-79 (Maybe 72-87 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|88-95 (Maybe 88-103 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|104-111 (Maybe 104-119 ?!)
|Corresponds to the "Rotation Lever" joystick on the left.
|-
|SightChangeX
|120-127 (Maybe 120-135 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|136-143 (Maybe 136-151 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|152-159 (Maybe 152-167 ?!)
|Corresponds to the left pedal on the pedal block
|-
|MiddlePedal
|168-175 (Maybe 168-192 ?!)
|Corresponds to the middle pedal on the pedal block
|-
|RightPedal
|184-191
|Corresponds to the right pedal on the pedal block
|-
|TunerDial
|196-199
|Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|GearLever
|200-207
|Corresponds to the gear lever on the left block.
|}
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
112729c98984b768f762e7f6d9e64b6f6744a4cf
5137
5136
2017-05-12T09:40:44Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes (160 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|DPAD_UP
|23
|
|-
|DPAD_DOWN
|22
|
|-
|DPAD_LEFT
|21
|
|-
|DPAD_RIGHT
|20
|
|-
|START
|19
|
|-
|BACK
|18
|
|-
|LEFT_THUMB
|17
|
|-
|RIGHT_THUMB
|16
|
|-
|A
|32-39
|Button is analog
|-
|B
|40-47
|Button is analog
|-
|X
|48-55
|Button is analog
|-
|Y
|56-63
|Button is analog
|-
|BLACK
|64-71
|Button is analog
|-
|WHITE
|72-79
|Button is analog
|-
|LEFT_TRIGGER
|80-87
|Trigger is analog
|-
|RIGHT_TRIGGER
|88-95
|Trigger is analog
|-
|sThumbLX
|96-111
|
|-
|sThumbLY
|112-127
|
|-
|sThumbRX
|128-143
|
|-
|sThumbRY
|144-159
|
|}
=== Xbox to Controller ===
6 bytes (48 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|Left actuator strength
|16-31
|
|-
|Right actuator strength
|32-47
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes (208 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|AimingX
|72-79 (Maybe 72-87 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|88-95 (Maybe 88-103 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|104-111 (Maybe 104-119 ?!)
|Corresponds to the "Rotation Lever" joystick on the left.
|-
|SightChangeX
|120-127 (Maybe 120-135 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|136-143 (Maybe 136-151 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|152-159 (Maybe 152-167 ?!)
|Corresponds to the left pedal on the pedal block
|-
|MiddlePedal
|168-175 (Maybe 168-192 ?!)
|Corresponds to the middle pedal on the pedal block
|-
|RightPedal
|184-191
|Corresponds to the right pedal on the pedal block
|-
|
|192-195
|
|-
|TunerDial
|196-199
|Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|GearLever
|200-207
|Corresponds to the gear lever on the left block.
|}
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
a5de0801d268a8bc70b65469d44fc5ad25d4e3b6
5138
5137
2017-05-12T09:42:47Z
JayFoxRox
2
Reordered + filled in the gap
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes (160 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|RIGHT_THUMB
|16
|
|-
|LEFT_THUMB
|17
|
|-
|BACK
|18
|
|-
|START
|19
|
|-
|DPAD_RIGHT
|20
|
|-
|DPAD_LEFT
|21
|
|-
|DPAD_DOWN
|22
|
|-
|DPAD_UP
|23
|
|-
|
|24-31
|
|-
|A
|32-39
|Button is analog
|-
|B
|40-47
|Button is analog
|-
|X
|48-55
|Button is analog
|-
|Y
|56-63
|Button is analog
|-
|BLACK
|64-71
|Button is analog
|-
|WHITE
|72-79
|Button is analog
|-
|LEFT_TRIGGER
|80-87
|Trigger is analog
|-
|RIGHT_TRIGGER
|88-95
|Trigger is analog
|-
|sThumbLX
|96-111
|
|-
|sThumbLY
|112-127
|
|-
|sThumbRX
|128-143
|
|-
|sThumbRY
|144-159
|
|}
=== Xbox to Controller ===
6 bytes (48 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|Left actuator strength
|16-31
|
|-
|Right actuator strength
|32-47
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes (208 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|AimingX
|72-79 (Maybe 72-87 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|88-95 (Maybe 88-103 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|104-111 (Maybe 104-119 ?!)
|Corresponds to the "Rotation Lever" joystick on the left.
|-
|SightChangeX
|120-127 (Maybe 120-135 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|136-143 (Maybe 136-151 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|152-159 (Maybe 152-167 ?!)
|Corresponds to the left pedal on the pedal block
|-
|MiddlePedal
|168-175 (Maybe 168-192 ?!)
|Corresponds to the middle pedal on the pedal block
|-
|RightPedal
|184-191
|Corresponds to the right pedal on the pedal block
|-
|
|192-195
|
|-
|TunerDial
|196-199
|Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|GearLever
|200-207
|Corresponds to the gear lever on the left block.
|}
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
</pre>
=== Xbox to Controller ===
34 bytes
<pre> EmergencyEject = FIELD_MASK(2, 0x0F),
CockpitHatch = FIELD_MASK(2, 0xF0),
Ignition = FIELD_MASK(3, 0x0F),
Start = FIELD_MASK(3, 0xF0),
OpenClose = FIELD_MASK(4, 0x0F),
MapZoomInOut = FIELD_MASK(4, 0xF0),
ModeSelect = FIELD_MASK(5, 0x0F),
SubMonitorModeSelect = FIELD_MASK(5, 0xF0),
MainMonitorZoomIn = FIELD_MASK(6, 0x0F),
MainMonitorZoomOut = FIELD_MASK(6, 0xF0),
ForecastShootingSystem = FIELD_MASK(7, 0x0F),
Manipulator = FIELD_MASK(7, 0xF0),
LineColorChange = FIELD_MASK(8, 0x0F),
Washing = FIELD_MASK(8, 0xF0),
Extinguisher = FIELD_MASK(9, 0x0F),
Chaff = FIELD_MASK(9, 0xF0),
TankDetach = FIELD_MASK(10, 0x0F),
Override = FIELD_MASK(10, 0xF0),
NightScope = FIELD_MASK(11, 0x0F),
F1 = FIELD_MASK(11, 0xF0),
F2 = FIELD_MASK(12, 0x0F),
F3 = FIELD_MASK(12, 0xF0),
MainWeaponControl = FIELD_MASK(13, 0x0F),
SubWeaponControl = FIELD_MASK(13, 0xF0),
MagazineChange = FIELD_MASK(14, 0x0F),
Comm1 = FIELD_MASK(14, 0xF0),
Comm2 = FIELD_MASK(15, 0x0F),
Comm3 = FIELD_MASK(15, 0xF0),
Comm4 = FIELD_MASK(16, 0x0F),
Comm5 = FIELD_MASK(16, 0xF0),
GearR = FIELD_MASK(17, 0xF0),
GearN = FIELD_MASK(18, 0x0F),
Gear1 = FIELD_MASK(18, 0xF0),
Gear2 = FIELD_MASK(19, 0x0F),
Gear3 = FIELD_MASK(19, 0xF0),
Gear4 = FIELD_MASK(20, 0x0F),
Gear5 = FIELD_MASK(20, 0xF0),</pre>
72a41d2d95d52e0dd8f13a54f80cbd82b1ac028c
5139
5138
2017-05-12T09:52:20Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes (160 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|RIGHT_THUMB
|16
|
|-
|LEFT_THUMB
|17
|
|-
|BACK
|18
|
|-
|START
|19
|
|-
|DPAD_RIGHT
|20
|
|-
|DPAD_LEFT
|21
|
|-
|DPAD_DOWN
|22
|
|-
|DPAD_UP
|23
|
|-
|
|24-31
|
|-
|A
|32-39
|Button is analog
|-
|B
|40-47
|Button is analog
|-
|X
|48-55
|Button is analog
|-
|Y
|56-63
|Button is analog
|-
|BLACK
|64-71
|Button is analog
|-
|WHITE
|72-79
|Button is analog
|-
|LEFT_TRIGGER
|80-87
|Trigger is analog
|-
|RIGHT_TRIGGER
|88-95
|Trigger is analog
|-
|sThumbLX
|96-111
|
|-
|sThumbLY
|112-127
|
|-
|sThumbRX
|128-143
|
|-
|sThumbRY
|144-159
|
|}
=== Xbox to Controller ===
6 bytes (48 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|Left actuator strength
|16-31
|
|-
|Right actuator strength
|32-47
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes (208 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|AimingX
|72-79 (Maybe 72-87 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|88-95 (Maybe 88-103 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|104-111 (Maybe 104-119 ?!)
|Corresponds to the "Rotation Lever" joystick on the left.
|-
|SightChangeX
|120-127 (Maybe 120-135 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|136-143 (Maybe 136-151 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|152-159 (Maybe 152-167 ?!)
|Corresponds to the left pedal on the pedal block
|-
|MiddlePedal
|168-175 (Maybe 168-192 ?!)
|Corresponds to the middle pedal on the pedal block
|-
|RightPedal
|184-191
|Corresponds to the right pedal on the pedal block
|-
|
|192-195
|
|-
|TunerDial
|196-199
|Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|GearLever
|200-207
|Corresponds to the gear lever on the left block.
|}
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
</pre>
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
fc1492517b7dcb797986360c60b186c753e8e1ff
5140
5139
2017-05-12T09:55:21Z
JayFoxRox
2
Bytes / masks seem to make more sense for XID
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes (160 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|RIGHT_THUMB
|16
|
|-
|LEFT_THUMB
|17
|
|-
|BACK
|18
|
|-
|START
|19
|
|-
|DPAD_RIGHT
|20
|
|-
|DPAD_LEFT
|21
|
|-
|DPAD_DOWN
|22
|
|-
|DPAD_UP
|23
|
|-
|
|24-31
|
|-
|A
|32-39
|Button is analog
|-
|B
|40-47
|Button is analog
|-
|X
|48-55
|Button is analog
|-
|Y
|56-63
|Button is analog
|-
|BLACK
|64-71
|Button is analog
|-
|WHITE
|72-79
|Button is analog
|-
|LEFT_TRIGGER
|80-87
|Trigger is analog
|-
|RIGHT_TRIGGER
|88-95
|Trigger is analog
|-
|sThumbLX
|96-111
|
|-
|sThumbLY
|112-127
|
|-
|sThumbRX
|128-143
|
|-
|sThumbRY
|144-159
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes (208 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|AimingX
|72-79 (Maybe 72-87 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|88-95 (Maybe 88-103 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|104-111 (Maybe 104-119 ?!)
|Corresponds to the "Rotation Lever" joystick on the left.
|-
|SightChangeX
|120-127 (Maybe 120-135 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|136-143 (Maybe 136-151 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|152-159 (Maybe 152-167 ?!)
|Corresponds to the left pedal on the pedal block
|-
|MiddlePedal
|168-175 (Maybe 168-192 ?!)
|Corresponds to the middle pedal on the pedal block
|-
|RightPedal
|184-191
|Corresponds to the right pedal on the pedal block
|-
|
|192-195
|
|-
|TunerDial
|196-199
|Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|GearLever
|200-207
|Corresponds to the gear lever on the left block.
|}
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
</pre>
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
153f959954e6674083aa826628f7aa80ea3116c0
5141
5140
2017-05-12T10:02:14Z
JayFoxRox
2
Reverted to byte offset + mask
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|1 << 0
|
|-
|DPAD_DOWN
|2
|1 << 1
|
|-
|DPAD_LEFT
|2
|1 << 2
|
|-
|DPAD_RIGHT
|2
|1 << 3
|
|-
|START
|2
|1 << 4
|
|-
|BACK
|2
|1 << 5
|
|-
|LEFT_THUMB
|2
|1 << 6
|
|-
|RIGHT_THUMB
|2
|1 << 7
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes (208 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|AimingX
|72-79 (Maybe 72-87 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|88-95 (Maybe 88-103 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|104-111 (Maybe 104-119 ?!)
|Corresponds to the "Rotation Lever" joystick on the left.
|-
|SightChangeX
|120-127 (Maybe 120-135 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|136-143 (Maybe 136-151 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|152-159 (Maybe 152-167 ?!)
|Corresponds to the left pedal on the pedal block
|-
|MiddlePedal
|168-175 (Maybe 168-192 ?!)
|Corresponds to the middle pedal on the pedal block
|-
|RightPedal
|184-191
|Corresponds to the right pedal on the pedal block
|-
|
|192-195
|
|-
|TunerDial
|196-199
|Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|GearLever
|200-207
|Corresponds to the gear lever on the left block.
|}
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
</pre>
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
6bd2c2f37d0c7b6d19bc23043ac55caffc5ac443
5142
5141
2017-05-12T10:02:31Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|1 << 0
|
|-
|DPAD_DOWN
|2
|1 << 1
|
|-
|DPAD_LEFT
|2
|1 << 2
|
|-
|DPAD_RIGHT
|2
|1 << 3
|
|-
|START
|2
|1 << 4
|
|-
|BACK
|2
|1 << 5
|
|-
|LEFT_THUMB
|2
|1 << 6
|
|-
|RIGHT_THUMB
|2
|1 << 7
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes (208 bits)
{| class="wikitable"
!Field
!Bits
!Notes
|-
|AimingX
|72-79 (Maybe 72-87 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|88-95 (Maybe 88-103 ?!)
|Corresponds to the "Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|104-111 (Maybe 104-119 ?!)
|Corresponds to the "Rotation Lever" joystick on the left.
|-
|SightChangeX
|120-127 (Maybe 120-135 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|136-143 (Maybe 136-151 ?!)
|Corresponds to the "Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|152-159 (Maybe 152-167 ?!)
|Corresponds to the left pedal on the pedal block
|-
|MiddlePedal
|168-175 (Maybe 168-192 ?!)
|Corresponds to the middle pedal on the pedal block
|-
|RightPedal
|184-191
|Corresponds to the right pedal on the pedal block
|-
|
|192-195
|
|-
|TunerDial
|196-199
|Corresponds to the tuner dial position. The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|GearLever
|200-207
|Corresponds to the gear lever on the left block.
|}
<pre>// Based on http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
// See http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/lgpl-3.0.txt
RightJoyMainWeapon = BUTTON_MASK( 2, 0x01),
RightJoyFire = BUTTON_MASK( 2, 0x03), //FIXME: WTF?!
RightJoyLockOn = BUTTON_MASK( 2, 0x04),
CockpitHatch = BUTTON_MASK( 2, 0x10),
Ignition = BUTTON_MASK( 2, 0x20),
Start = BUTTON_MASK( 2, 0x40),
Eject = BUTTON_MASK( 2, 0x08),
MultiMonOpenClose = BUTTON_MASK( 2, 0x80),
MultiMonMapZoomInOut = BUTTON_MASK( 3, 0x01),
MultiMonModeSelect = BUTTON_MASK( 3, 0x02),
MultiMonSubMonitor = BUTTON_MASK( 3, 0x04),
MainMonZoomIn = BUTTON_MASK( 3, 0x08),
MainMonZoomOut = BUTTON_MASK( 3, 0x10),
FunctionFSS = BUTTON_MASK( 3, 0x20),
FunctionManipulator = BUTTON_MASK( 3, 0x40),
FunctionLineColorChange = BUTTON_MASK( 3, 0x80),
Washing = BUTTON_MASK( 4, 0x01),
Extinguisher = BUTTON_MASK( 4, 0x02),
Chaff = BUTTON_MASK( 4, 0x04),
FunctionTankDetach = BUTTON_MASK( 4, 0x08),
FunctionOverride = BUTTON_MASK( 4, 0x10),
FunctionNightScope = BUTTON_MASK( 4, 0x20),
FunctionF1 = BUTTON_MASK( 4, 0x40),
FunctionF2 = BUTTON_MASK( 4, 0x80),
FunctionF3 = BUTTON_MASK( 5, 0x01),
WeaponConMain = BUTTON_MASK( 5, 0x02),
WeaponConSub = BUTTON_MASK( 5, 0x04),
WeaponConMagazine = BUTTON_MASK( 5, 0x08),
Comm1 = BUTTON_MASK( 5, 0x10),
Comm2 = BUTTON_MASK( 5, 0x20),
Comm3 = BUTTON_MASK( 5, 0x40),
Comm4 = BUTTON_MASK( 5, 0x80),
Comm5 = BUTTON_MASK( 6, 0x01),
LeftJoySightChange = BUTTON_MASK( 6, 0x02),
ToggleFilterControl = BUTTON_MASK( 6, 0x04),
ToggleOxygenSupply = BUTTON_MASK( 6, 0x08),
ToggleFuelFlowRate = BUTTON_MASK( 6, 0x10),
ToggleBuffreMaterial = BUTTON_MASK( 6, 0x20),
ToggleVTLocation = BUTTON_MASK( 6, 0x40),
</pre>
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
7fe2e5c26484705f1edbf779b0d87cd38fd64fc5
5143
5142
2017-05-12T10:11:34Z
JayFoxRox
2
Reverted and improved to byte offset + mask
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|1 << 0
|
|-
|DPAD_DOWN
|2
|1 << 1
|
|-
|DPAD_LEFT
|2
|1 << 2
|
|-
|DPAD_RIGHT
|2
|1 << 3
|
|-
|START
|2
|1 << 4
|
|-
|BACK
|2
|1 << 5
|
|-
|LEFT_THUMB
|2
|1 << 6
|
|-
|RIGHT_THUMB
|2
|1 << 7
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|Eject
|2
|0x08
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|AimingX
|9
|0xFF
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF
|
|-
|MiddlePedal
|21
|0xFF
|
|-
|RightPedal
|23
|0xFF
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
6bb9e241c87545a5c5d0daae757fd89af04f1a27
5144
5143
2017-05-12T10:11:51Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|1 << 0
|
|-
|DPAD_DOWN
|2
|1 << 1
|
|-
|DPAD_LEFT
|2
|1 << 2
|
|-
|DPAD_RIGHT
|2
|1 << 3
|
|-
|START
|2
|1 << 4
|
|-
|BACK
|2
|1 << 5
|
|-
|LEFT_THUMB
|2
|1 << 6
|
|-
|RIGHT_THUMB
|2
|1 << 7
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|Eject
|2
|0x08
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|AimingX
|9
|0xFF
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF
|
|-
|MiddlePedal
|21
|0xFF
|
|-
|RightPedal
|23
|0xFF
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
c49fe972b82447d72fc33c37bb38001e545608cb
5145
5144
2017-05-12T10:16:28Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|1 << 0
|
|-
|DPAD_DOWN
|2
|1 << 1
|
|-
|DPAD_LEFT
|2
|1 << 2
|
|-
|DPAD_RIGHT
|2
|1 << 3
|
|-
|START
|2
|1 << 4
|
|-
|BACK
|2
|1 << 5
|
|-
|LEFT_THUMB
|2
|1 << 6
|
|-
|RIGHT_THUMB
|2
|1 << 7
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19, maybe 0xFFFF at offset 18?
|0xFF
|
|-
|MiddlePedal
|21, maybe 0xFFFF at offset 20?
|0xFF
|
|-
|RightPedal
|23, maybe 0xFFFF at offset 22?
|0xFF
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
8a2376964158bf68850c89ed166eb7eb71413915
5146
5145
2017-05-12T10:17:39Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|1 << 0
|
|-
|DPAD_DOWN
|2
|1 << 1
|
|-
|DPAD_LEFT
|2
|1 << 2
|
|-
|DPAD_RIGHT
|2
|1 << 3
|
|-
|START
|2
|1 << 4
|
|-
|BACK
|2
|1 << 5
|
|-
|LEFT_THUMB
|2
|1 << 6
|
|-
|RIGHT_THUMB
|2
|1 << 7
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
2711c3e6829614bcc8803cddb65c54c5b7af3435
5147
5146
2017-05-12T10:18:21Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
18a202f6afba66698f3929eaff478c277b63bbf9
5148
5147
2017-05-12T10:29:30Z
JayFoxRox
2
Re-Added source
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
d3b418e21730a926b79b7ed3ae597602be1b5b01
5164
5148
2017-05-12T18:27:13Z
JayFoxRox
2
/* XID Overview */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
f3a237ac36730e1f0ff4f61fd88c5ba9f1a254fc
Xbox Debug Monitor
0
3689
5120
5111
2017-05-12T00:21:30Z
Furon
2477
/* Remote Debugging and Control Protocol */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Each code has a default message, but some commands use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; 200- OK
: Standard response for successful execution of a command.
; 201- connected
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; 202- multiline response follows
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; 203- binary response follows
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; 204- ready for binary data
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; 205- dedicated
: The connection has been moved to a dedicated processing thread.
====4xx Failure====
TODO
===Authentication===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
71dd5f2dd5e21bd46aa13b08d7858bd5852a76fa
Network
0
3692
5149
5114
2017-05-12T12:55:00Z
Wayo
2479
wikitext
text/x-wiki
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
=== Matchmaking servers ===
=== Game servers ===
=== Kerberos ===
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.de/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
6cf38444325da67aff77114c773ce5d7f37a91c4
5150
5149
2017-05-12T13:07:59Z
Wayo
2479
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
=== Matchmaking servers ===
=== Game servers ===
=== Kerberos ===
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.de/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
f1a2a51ff90462f6922d614b12534894cbf02c0e
5151
5150
2017-05-12T13:34:12Z
Wayo
2479
/* Kerberos */
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.de/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
35b8b22f3e41b7e6fb8791e0ac7d9c2163336279
XQEMU
0
3695
5153
2017-05-12T17:37:48Z
JayFoxRox
2
Created page with "xqemu is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes. == Compatiblity list == {{:XQEMU/Compatibility List}}"
wikitext
text/x-wiki
xqemu is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes.
== Compatiblity list ==
{{:XQEMU/Compatibility List}}
7242b1a57dbd101c14154a259ee538de7c5db68d
5155
5153
2017-05-12T17:39:12Z
JayFoxRox
2
wikitext
text/x-wiki
xqemu is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes.
The official homepage can be found at [http://xqemu.com xqemu.com]
== Compatiblity list ==
{{:XQEMU/Compatibility List}}
fccdba639b6b3d0829d8e0968c8441dc9f208a82
5163
5155
2017-05-12T18:06:46Z
JayFoxRox
2
/* Compatiblity list */
wikitext
text/x-wiki
xqemu is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes.
The official homepage can be found at [http://xqemu.com xqemu.com]
== Compatiblity list ==
The following list was almost entirely created by [https://www.youtube.com/user/pcmaker2 pcmaker (also known as John Godgames)] around 2015.
Meaning of the status fields:
{| class="wikitable"
!Status
!Meaning
|-
|Nothing
|Not showing anything due to error
|-
|Intro
|Shows something as Intro / Menu
|-
|Ingame
|Ingame (Graphical bugs)
|-
|Playable*
|Partially playable or expected to be fully playable but not tested completly yet
|-
|Playable
|Partially playable / Fully playable
|}
{{:XQEMU/Compatibility List}}
0b48a58edac8bffb5dc89bfec4fb3059593c17be
Main Page
0
1
5154
5081
2017-05-12T17:38:29Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
be9b7da550e3e7c5964fcb83056da8cc74f0149e
5157
5154
2017-05-12T17:49:53Z
JayFoxRox
2
Added link for cxbx-r
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [http://www.caustik.com/cxbx/ cxbx]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
eafcc4e75e0f50a71756b2845e8f66777ff70972
5161
5157
2017-05-12T17:57:31Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
061071d5d2d589410a1eebf8e84f9d330fb30834
5162
5161
2017-05-12T17:59:14Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* Official Xbox backwards compatibility in Xbox 360
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
bd28527e7c1ee140ea39557c07d59394aabfccf0
Resources
0
3
5156
5051
2017-05-12T17:44:43Z
JayFoxRox
2
wikitext
text/x-wiki
Random resources about xbox hacking
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Matt Borgerson about the Xbox bootrom]
* [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
About emulation
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
8d402e08c9670938f931339576817925c3d203e0
Cxbx-Reloaded
0
3696
5158
2017-05-12T17:51:04Z
JayFoxRox
2
Created page with "Cxbx-Reloaded is a hybrid LLE / HLE Xbox emulation project started by [[User:SoullessSentinel|]] on April 1st, 2016. It is based on [[Cxbx]]. Its website is can be found at [..."
wikitext
text/x-wiki
Cxbx-Reloaded is a hybrid LLE / HLE Xbox emulation project started by [[User:SoullessSentinel|SoullessSentinel]] on April 1st, 2016.
It is based on [[Cxbx]].
Its website is can be found at [http://cxbx-reloaded.co.uk cxbx-reloaded.co.uk].
d27a5f89f6145489572ab344687f7a45c72dd186
Cxbx
0
3697
5159
2017-05-12T17:56:54Z
JayFoxRox
2
Created page with "Cxbx was a HLE Xbox emulation project started by Caustik around 2002. The name is an abreviation for "Caustiks Xbox". Its official website can be found on http://www.causti..."
wikitext
text/x-wiki
Cxbx was a HLE Xbox emulation project started by Caustik around 2002.
The name is an abreviation for "Caustiks Xbox".
Its official website can be found on [[http://www.caustik.com/cxbx/ Caustiks Cxbx page]]
95e22afe9c2595c85851631f54f49025f1e37f6b
5160
5159
2017-05-12T17:57:07Z
JayFoxRox
2
wikitext
text/x-wiki
Cxbx was a HLE Xbox emulation project started by Caustik around 2002.
The name is an abreviation for "Caustiks Xbox".
Its official website can be found on [http://www.caustik.com/cxbx/ Caustiks Cxbx page]
191ab78e6c76bceb21b62dd8304839376bd614de
Engine List
0
4
5165
5106
2017-05-12T18:57:20Z
JayFoxRox
2
/* Renderware */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <sup>[Ref]</sup>]
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], [https://en.wikipedia.org/wiki/Id_Tech_3 here], and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
f0522731a57ac016d8f6b0711ceef346c8ae7ada
5166
5165
2017-05-12T18:57:56Z
JayFoxRox
2
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <sup>[Ref]</sup>]
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], [https://en.wikipedia.org/wiki/Id_Tech_3 here], and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
16bf8f40e1a6a4103882a1964da9b0f0b65f95b2
5167
5166
2017-05-12T18:58:12Z
JayFoxRox
2
/* Unreal Engine 1 */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <sup>[Ref]</sup>]
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], [https://en.wikipedia.org/wiki/Id_Tech_3 here], and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
1e3587edf10dc7edbb62f145105cec7c5cea2cec
5168
5167
2017-05-12T18:58:19Z
JayFoxRox
2
/* Unreal Engine 2 */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <sup>[Ref]</sup>]
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], [https://en.wikipedia.org/wiki/Id_Tech_3 here], and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
3179381dc7d60a1296ad75777b568e96786d9ece
Talk:BIOS
1
3698
5170
2017-05-13T15:59:13Z
Codeasm
2480
Created page with "== Typo in the know Bios versions == @Eighthpence did you mean 3944 instead of 3394"
wikitext
text/x-wiki
== Typo in the know Bios versions ==
@Eighthpence did you mean 3944 instead of 3394
75b4312dfaf7f78500dd9c71ac1f6bfed3faf50c
5198
5170
2017-05-14T15:05:21Z
JayFoxRox
2
wikitext
text/x-wiki
== Typo in the know Bios versions ==
@Eighthpence did you mean 3944 instead of 3394
== Turn lists into a table? ==
This article has various lists / sections which all mention the same list of bioses.
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)
96af933ffefbbf8aac9244eb7e2a9bd3bba7607a
5199
5198
2017-05-14T15:06:12Z
Codeasm
2480
/* Typo in the know Bios versions */
wikitext
text/x-wiki
== Typo in the know Bios versions ==
@Eighthpence did you mean 3944 instead of 3394 --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:06, 14 May 2017 (PDT)
== Turn lists into a table? ==
This article has various lists / sections which all mention the same list of bioses.
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)
4fcda9880897832450a9cb47a5f4652b61493cba
5203
5199
2017-05-14T19:23:58Z
Eighthpence
2472
/* Typo in the know Bios versions */
wikitext
text/x-wiki
== Typo in the know Bios versions ==
@Eighthpence did you mean 3944 instead of 3394 --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:06, 14 May 2017 (PDT)
They are now changed --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:23, 14 May 2017 (PDT)
== Turn lists into a table? ==
This article has various lists / sections which all mention the same list of bioses.
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)
2a74eb635241853872aa7e1059b1887a1edeb897
5205
5203
2017-05-14T19:40:46Z
Eighthpence
2472
/* Turn lists into a table? */
wikitext
text/x-wiki
== Typo in the know Bios versions ==
@Eighthpence did you mean 3944 instead of 3394 --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:06, 14 May 2017 (PDT)
They are now changed --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:23, 14 May 2017 (PDT)
== Turn lists into a table? ==
This article has various lists / sections which all mention the same list of bioses.
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)
I've added a table. It needs improving but it is a start. --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:40, 14 May 2017 (PDT)
c4cb99a34893a0b07b4faa50a0cab9a0092596de
BIOS
0
3672
5171
5022
2017-05-13T16:09:26Z
Codeasm
2480
/* Copyright String */ typo?
wikitext
text/x-wiki
The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa (type? maybe 3966?)
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
9618fafa9422fdb2e5bfa7d552766c4a793c4b44
5178
5171
2017-05-13T22:40:29Z
Furon
2477
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa (type? maybe 3966?)
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
76fe7c7085e407627d047e2584b7d4cc03553550
5195
5178
2017-05-14T14:55:41Z
Codeasm
2480
/* Copyright String */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
2178f518a350a3e184eb3c766df1050e8aeb3856
5196
5195
2017-05-14T15:03:38Z
Codeasm
2480
Undo revision 5195 by [[Special:Contributions/Codeasm|Codeasm]] ([[User talk:Codeasm|talk]])
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa (type? maybe 3966?)
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
76fe7c7085e407627d047e2584b7d4cc03553550
5197
5196
2017-05-14T15:03:52Z
Codeasm
2480
Undo revision 5171 by [[Special:Contributions/Codeasm|Codeasm]] ([[User talk:Codeasm|talk]])
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3394 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
2178f518a350a3e184eb3c766df1050e8aeb3856
5201
5197
2017-05-14T19:22:44Z
Eighthpence
2472
/* Copyright String */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3944 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3394
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
f266e456d009e39acc55f3c3c0750d120416f259
5202
5201
2017-05-14T19:23:03Z
Eighthpence
2472
/* Known Retail BIOSs */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3944 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3944
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
34fac72fe400daa7a0a66c1850c6d650d8b749e4
5204
5202
2017-05-14T19:39:33Z
Eighthpence
2472
/* Components */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{|
! Memory Type
! 3944
! 4034
! 4134
! 4817
! 5101
! 5530
! 5713
! 5838
|-
| Unknown
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
|-
| X-Codes
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
|-
| Copyright String
| 0x00cfa
| 0x00cfa
| 0x00cfa
| 0x00db9
| 0x00e49
| 0x00e59
| 0x00e59
| 0x00dcc
|-
| Kernel
|
|
|
|
|
|
|
|
|-
| Kernel Data Segment
|
|
|
|
|
|
|
|
|-
| 2BL
| 0x039E00
| 0x039E00
| 0x039E00
|
|
|
|
|
|-
| Decoy Boot Loader
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3944 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3944
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
6a982aa967f953cab4b832dcd3b4e227ea29f358
5207
5204
2017-05-14T19:59:00Z
JayFoxRox
2
table is wikitable now + header fields on the left
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944
! 4034
! 4134
! 4817
! 5101
! 5530
! 5713
! 5838
|-
! Unknown
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
|-
! X-Codes
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
|-
! Copyright String
| 0x00cfa
| 0x00cfa
| 0x00cfa
| 0x00db9
| 0x00e49
| 0x00e59
| 0x00e59
| 0x00dcc
|-
! Kernel
|
|
|
|
|
|
|
|
|-
! Kernel Data Segment
|
|
|
|
|
|
|
|
|-
! 2BL
| 0x039E00
| 0x039E00
| 0x039E00
|
|
|
|
|
|-
! Decoy Boot Loader
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
57 bytes long with the following start positions:
* 3944 - 0xcfa
* 4034 - 0xcfa
* 4134 - 0xcfa
* 4817 - 0xdb9
* 5101 - 0xe49
* 5530 - 0xe59
* 5713 - 0xe59
* 5838 - 0xdcc
Literally contains the text: "Copyright (c) Microsoft Corporation. All rights reserved.".
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3944
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
3bf64a3da773cbca1761b5c1432a59b741fee7eb
5208
5207
2017-05-14T20:01:00Z
JayFoxRox
2
/* Copyright String */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944
! 4034
! 4134
! 4817
! 5101
! 5530
! 5713
! 5838
|-
! Unknown
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
|-
! X-Codes
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
|-
! Copyright String
| 0x00cfa
| 0x00cfa
| 0x00cfa
| 0x00db9
| 0x00e49
| 0x00e59
| 0x00e59
| 0x00dcc
|-
! Kernel
|
|
|
|
|
|
|
|
|-
! Kernel Data Segment
|
|
|
|
|
|
|
|
|-
! 2BL
| 0x039E00
| 0x039E00
| 0x039E00
|
|
|
|
|
|-
! Decoy Boot Loader
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
See the table above for the start positions.
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3944
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
6f6d7fd20739de74c09c01b52732f1cd247e8046
5219
5208
2017-05-15T13:27:39Z
Eighthpence
2472
/* Components */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! Unknown
! X-Codes
! Copyright String
! Kernel
! Kernel Data Segment
! 2BL
! Decoy Boot Loader
|-
! 3944
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4034
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4134
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4817
| 0x00000
| 0x00080
| 0x00db9
|
|
|
| 0x3FE00
|-
! 5101
| 0x00000
| 0x00080
| 0x00e49
|
|
|
| 0x3FE00
|-
! 5530
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5713
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5838
| 0x00000
| 0x00080
| 0x00dcc
|
|
|
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
See the table above for the start positions.
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3944
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
8964d91fcf5c32fe08dc9e29f348a3cc947de979
Xbox Debug Monitor
0
3689
5172
5120
2017-05-13T19:45:46Z
Furon
2477
/* Remote Debugging and Control Protocol */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Each code has a default message, but some commands use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; 200- OK
: Standard response for successful execution of a command.
; 201- connected
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; 202- multiline response follows
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; 203- binary response follows
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; 204- ready for binary data
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; 205- connection dedicated
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; 400- unexpected error
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; 401- max number of connections exceeded
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; 402- file not found
: An operation was attempted on a file that does not exist.
; 403- no such module
: An operation was attempted on a module that does not exist.
; 404- memory not mapped
: An operation was attempted on a region of memory that is not mapped in the page table.
; 405- no such thread
: An operation was attempted on a thread that does not exist.
; 407- unknown command
: The command is not recognized.
; 408- not stopped
: The target thread is not stopped.
; 409- file must be copied
: A move operation was attempted on a file that can only be copied.
; 410- file already exists
: A file could not be created or moved because one already exists with the same name.
; 411- directory not empty
: A directory could not be deleted because it still contains files and/or directories.
; 412- filename is invalid
: The specified file contains invalid characters or is too long.
; 413- file cannot be created
: The file cannot be created for some unspecified reason.
; 414- access denied
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; 415- no room on device
: The target device has run out of storage space.
; 416- not debuggable
: The title is not debuggable.
; 417- type invalid
: The performance counter type is invalid.
; 418- data not available
: The performance counter data is not available.
===Connection dedication===
TODO
===Security===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
a3eac43f171d3ed759aadbb8d767c85e0ec49dcf
5176
5172
2017-05-13T21:54:26Z
Furon
2477
/* 2xx Success */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Each code has a default message, but some commands use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; 200- OK
: Standard response for successful execution of a command.
; 201- connected
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; 202- multiline response follows
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; 203- binary response follows
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; 204- ready for binary data
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; 205- connection dedicated
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
; 207- fast cap enabled
: Fast call-attribute profiling has been enabled. This status code is defined by XBDM, but does not appear to be used. It may have been a planned feature that was never implemented or left over from pre-release versions of XBDM.
====4xx Failure====
; 400- unexpected error
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; 401- max number of connections exceeded
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; 402- file not found
: An operation was attempted on a file that does not exist.
; 403- no such module
: An operation was attempted on a module that does not exist.
; 404- memory not mapped
: An operation was attempted on a region of memory that is not mapped in the page table.
; 405- no such thread
: An operation was attempted on a thread that does not exist.
; 407- unknown command
: The command is not recognized.
; 408- not stopped
: The target thread is not stopped.
; 409- file must be copied
: A move operation was attempted on a file that can only be copied.
; 410- file already exists
: A file could not be created or moved because one already exists with the same name.
; 411- directory not empty
: A directory could not be deleted because it still contains files and/or directories.
; 412- filename is invalid
: The specified file contains invalid characters or is too long.
; 413- file cannot be created
: The file cannot be created for some unspecified reason.
; 414- access denied
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; 415- no room on device
: The target device has run out of storage space.
; 416- not debuggable
: The title is not debuggable.
; 417- type invalid
: The performance counter type is invalid.
; 418- data not available
: The performance counter data is not available.
===Connection dedication===
TODO
===Security===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
54dacf4b59084e2d4f825236010c1da3f060a499
5179
5176
2017-05-14T00:56:17Z
Furon
2477
/* Connection dedication */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Each code has a default message, but some commands use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; 200- OK
: Standard response for successful execution of a command.
; 201- connected
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; 202- multiline response follows
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; 203- binary response follows
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; 204- ready for binary data
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; 205- connection dedicated
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
; 207- fast cap enabled
: Fast call-attribute profiling has been enabled. This status code is defined by XBDM, but does not appear to be used. It may have been a planned feature that was never implemented or left over from pre-release versions of XBDM.
====4xx Failure====
; 400- unexpected error
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; 401- max number of connections exceeded
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; 402- file not found
: An operation was attempted on a file that does not exist.
; 403- no such module
: An operation was attempted on a module that does not exist.
; 404- memory not mapped
: An operation was attempted on a region of memory that is not mapped in the page table.
; 405- no such thread
: An operation was attempted on a thread that does not exist.
; 407- unknown command
: The command is not recognized.
; 408- not stopped
: The target thread is not stopped.
; 409- file must be copied
: A move operation was attempted on a file that can only be copied.
; 410- file already exists
: A file could not be created or moved because one already exists with the same name.
; 411- directory not empty
: A directory could not be deleted because it still contains files and/or directories.
; 412- filename is invalid
: The specified file contains invalid characters or is too long.
; 413- file cannot be created
: The file cannot be created for some unspecified reason.
; 414- access denied
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; 415- no room on device
: The target device has run out of storage space.
; 416- not debuggable
: The title is not debuggable.
; 417- type invalid
: The performance counter type is invalid.
; 418- data not available
: The performance counter data is not available.
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
7dbfc6a7bfaa8ed7246ff94c4d07fd544b197c63
5180
5179
2017-05-14T01:18:36Z
Furon
2477
/* Status codes */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; 200- OK
: Standard response for successful execution of a command.
; 201- connected
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; 202- multiline response follows
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; 203- binary response follows
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; 204- send binary data
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; 205- connection dedicated
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; 400- unexpected error
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; 401- max number of connections exceeded
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; 402- file not found
: An operation was attempted on a file that does not exist.
; 403- no such module
: An operation was attempted on a module that does not exist.
; 404- memory not mapped
: An operation was attempted on a region of memory that is not mapped in the page table.
; 405- no such thread
: An operation was attempted on a thread that does not exist.
; 406-
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; 407- unknown command
: The command is not recognized.
; 408- not stopped
: The target thread is not stopped.
; 409- file must be copied
: A move operation was attempted on a file that can only be copied.
; 410- file already exists
: A file could not be created or moved because one already exists with the same name.
; 411- directory not empty
: A directory could not be deleted because it still contains files and/or directories.
; 412- filename is invalid
: The specified file contains invalid characters or is too long.
; 413- file cannot be created
: The file cannot be created for some unspecified reason.
; 414- access denied
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; 415- no room on device
: The target device has run out of storage space.
; 416- not debuggable
: The title is not debuggable.
; 417- type invalid
: The performance counter type is invalid.
; 418- data not available
: The performance counter data is not available.
; 420- box not locked
: The command can only be executed when security is enabled (see [[#Security]]).
; 421- key exchange required
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; 422- dedicated connection required
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
0eb2b73513b541d9836302676fe715c9a017360a
5181
5180
2017-05-14T03:58:44Z
Furon
2477
/* Status codes */ Add status code anchors
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address (forward lookup), resolve an IP address to a debug name (reverse lookup), and discover all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
cdb6e8b78f03e0a2b91ff18ae9e7aa67ffa74c77
5200
5181
2017-05-14T15:06:26Z
Furon
2477
/* Name Answering Protocol */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
5252366bc3f2b3a1b2206da60352fa8a25b9ddf4
User:Furon
2
3699
5173
2017-05-13T21:38:41Z
Furon
2477
Created page with "I enjoy documenting Xbox internals and creating open source tools that ease development of emulators and homebrew Xbox software on non-Windows platforms. ==Contact== * '''[h..."
wikitext
text/x-wiki
I enjoy documenting Xbox internals and creating open source tools that ease development of emulators and homebrew Xbox software on non-Windows platforms.
==Contact==
* '''[https://github.com/docbrown docbrown]''' on GitHub
* '''furon''' on FreeNode (usually in #qemu, #xenia, and #go-nuts)
* furon at protonmail dot com
b97a2a9e2018bef94912453d7da7261a78f414c5
5174
5173
2017-05-13T21:39:51Z
Furon
2477
wikitext
text/x-wiki
I enjoy documenting Xbox internals and creating open source tools that ease development of emulators and homebrew Xbox software on non-Windows platforms.
* '''[https://github.com/docbrown docbrown]''' on GitHub
* '''furon''' on FreeNode (usually in #qemu, #xenia, and #go-nuts)
* furon at protonmail dot com
d9ee2aec65626cb84ca8ee2b2a08ff1bc673a9ba
5175
5174
2017-05-13T21:40:25Z
Furon
2477
wikitext
text/x-wiki
I enjoy documenting Xbox internals and creating open source tools that ease development of emulators and homebrew Xbox software on non-Windows platforms.
* '''[https://github.com/docbrown docbrown]''' on GitHub
* '''furon''' on FreeNode (usually in #xqemu, #xenia, and #go-nuts)
* furon at protonmail dot com
2c1e78cc5b366bfbcad3d473afab4d313d7f6bdc
Main Page
0
1
5177
5162
2017-05-13T22:15:10Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* [http://xenoborg-emu.blogspot.com/ Xenoborg]
* Official Xbox backwards compatibility in Xbox 360
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
1d7f1e5d48679aba842384d2379ec3c1d44be079
5185
5177
2017-05-14T07:24:25Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Game Disc]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* [http://xenoborg-emu.blogspot.com/ Xenoborg]
* [[Xbox 360 Backward Compatibility]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
4c3e3363c0ac00257f1af2c74137f5013e95c487
5186
5185
2017-05-14T12:46:10Z
JayFoxRox
2
Added more emulators from http://ngemu.com/threads/.155472/
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Game Disc]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/impeachgod/Dirtbox Dirtbox]
* [https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
* [https://github.com/daeken/Steelbreeze Steelbreeze]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://ngemu.com/threads/.154342/ XbeNext]
* [http://ngemu.com/forums/.65/ Xeon]
* [http://ngemu.com/threads/.105210 XProject]
* [https://code.google.com/p/xbem xbem]
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* [http://xenoborg-emu.blogspot.com/ Xenoborg]
* [[Xbox 360 Backward Compatibility]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
bc8b05188a82283ccde410cad9f0fd9cdbcf5473
5187
5186
2017-05-14T12:46:42Z
JayFoxRox
2
Fix links
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Game Disc]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro Pictures]]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/impeachgod/Dirtbox Dirtbox]
* [https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
* [https://github.com/daeken/Steelbreeze Steelbreeze]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://ngemu.com/threads/.154342/ XbeNext]
* [http://ngemu.com/forums/.65/ Xeon]
* [http://ngemu.com/threads/.105210/ XProject]
* [https://code.google.com/p/xbem xbem]
* [http://ngemu.com/threads/.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* [http://xenoborg-emu.blogspot.com/ Xenoborg]
* [[Xbox 360 Backward Compatibility]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
570fe49ea4ed4153ca7daa0ded3d9a3fa2e03a9e
5210
5187
2017-05-14T20:05:30Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Game Disc]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/impeachgod/Dirtbox Dirtbox]
* [https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
* [https://github.com/daeken/Steelbreeze Steelbreeze]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://ngemu.com/threads/.154342/ XbeNext]
* [http://ngemu.com/forums/.65/ Xeon]
* [http://ngemu.com/threads/.105210/ XProject]
* [https://code.google.com/p/xbem xbem]
* [http://ngemu.com/threads/.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* [http://xenoborg-emu.blogspot.com/ Xenoborg]
* [[Xbox 360 Backward Compatibility]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
d246696b37fe4fe80491805203aa6809ed7c4978
5212
5210
2017-05-15T09:15:12Z
JayFoxRox
2
Added more github emu trash
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Game Disc]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/impeachgod/Dirtbox Dirtbox]
* [https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
* [https://github.com/daeken/Steelbreeze Steelbreeze]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://ngemu.com/threads/.154342/ XbeNext]
* [http://ngemu.com/forums/.65/ Xeon]
* [http://ngemu.com/threads/.105210/ XProject]
* [https://code.google.com/p/xbem xbem]
* [http://ngemu.com/threads/.146461/ Hackbox]
* [https://github.com/phire/kvmbox kvmbox]
* [https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
* [https://github.com/bjh83/boombox boombox]
* [https://github.com/docbrown/vxb vxb]
* [https://github.com/quantumdude836/exciplex exciplex]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* [http://xenoborg-emu.blogspot.com/ Xenoborg]
* [[Xbox 360 Backward Compatibility]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
f25d2d09058ee6fc10805cd0a64e6101f72f6eec
5213
5212
2017-05-15T09:17:59Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Game Disc]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation / Emulators
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/impeachgod/Dirtbox Dirtbox]
* [https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
* [https://github.com/daeken/Steelbreeze Steelbreeze]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://ngemu.com/threads/.154342/ XbeNext]
* [http://ngemu.com/forums/.65/ Xeon]
* [http://ngemu.com/threads/.105210/ XProject]
* [https://code.google.com/p/xbem xbem]
* [[Hackbox]]
* [https://github.com/phire/kvmbox kvmbox]
* [https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
* [https://github.com/bjh83/boombox boombox]
* [https://github.com/docbrown/vxb vxb]
* [https://github.com/quantumdude836/exciplex exciplex]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* [http://xenoborg-emu.blogspot.com/ Xenoborg]
* [[Xbox 360 Backward Compatibility]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
f9906d8a251c9b3471fa3462d04e69b1c2f54842
5214
5213
2017-05-15T09:19:53Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Game Disc]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
[[Emulators]]
* [[XQEMU]]
* [[Cxbx-Reloaded]]
* [[Cxbx]]
* [http://dxbx-emu.com Dxbx]
* [https://github.com/impeachgod/Dirtbox Dirtbox]
* [https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
* [https://github.com/daeken/Steelbreeze Steelbreeze]
* [https://github.com/daeken/Zookeeper Zookeeper]
* [http://ngemu.com/threads/.154342/ XbeNext]
* [http://ngemu.com/forums/.65/ Xeon]
* [http://ngemu.com/threads/.105210/ XProject]
* [https://code.google.com/p/xbem xbem]
* [[Hackbox]]
* [https://github.com/phire/kvmbox kvmbox]
* [https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
* [https://github.com/bjh83/boombox boombox]
* [https://github.com/docbrown/vxb vxb]
* [https://github.com/quantumdude836/exciplex exciplex]
* [http://mamedev.org/ MAME/Chihiro]
* [http://mamedev.org/ MAME/Xbox]
* [https://github.com/monocasa/xbvm XBVM]
* [http://xenoborg-emu.blogspot.com/ Xenoborg]
* [[Xbox 360 Backward Compatibility]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
95c82d9cc0819c44219bfc0d2c2cc1924178d99e
5216
5214
2017-05-15T09:44:05Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
* [[Xbox Game Disc]]
* [[Xbox Debug Monitor]]
* [[Xbox Input Devices]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation
* [[Emulators]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
8d253c86ce5d8911af3a3b8a09567e9a83dd4150
Xbox Game Disc
0
3700
5182
2017-05-14T07:11:59Z
JayFoxRox
2
Created page with "Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD). == References and links == * [https://web.archive.org/web/20150616131202/http://dark...."
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
66bec00353746f04e111988d0f588abfcbe48afb
5206
5182
2017-05-14T19:54:53Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
0d6d1fd457715405d4319a36ceaf22767d809fd8
Xbox 360 Backward Compatibility
0
3701
5183
2017-05-14T07:22:31Z
JayFoxRox
2
Created page with "Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360. == References and links == * [http://support.xbox.com/en-US/legacy-devices/original-con..."
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
009fc46655027cfcdaec22174021787c9012d497
Resources
0
3
5184
5156
2017-05-14T07:22:50Z
JayFoxRox
2
Moved some resources to new page
wikitext
text/x-wiki
Random resources about xbox hacking
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Matt Borgerson about the Xbox bootrom]
* [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
About emulation
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
88bc34e7193da50767f30ab9d787d91a0c9d07ca
Cxbx
0
3697
5188
5160
2017-05-14T13:14:36Z
JayFoxRox
2
wikitext
text/x-wiki
Cxbx was a HLE Xbox emulation project started by Caustik around 2002.
The name is an abreviation for "Caustiks Xbox".
Its official website can be found on [http://www.caustik.com/cxbx/ Caustiks Cxbx page]
== CXBX kingofc's dev version ==
The website for this fork can be found at [http://www.caustik.com/kingofc/]
It focused on partial LLE.
== Blueshogun's Cxbx ==
The website for this fork is [http://shogun3d-cxbx.blogspot.de/ blueshoguns blog]
== Cxbx-Reloaded ==
[[Cxbx-Reloaded|This fork has it's own article]]
d5b872821a7a1b6c078f307b9060e078ad290af4
5193
5188
2017-05-14T13:29:31Z
JayFoxRox
2
/* CXBX kingofc's dev version */
wikitext
text/x-wiki
Cxbx was a HLE Xbox emulation project started by Caustik around 2002.
The name is an abreviation for "Caustiks Xbox".
Its official website can be found on [http://www.caustik.com/cxbx/ Caustiks Cxbx page]
== CXBX kingofc's dev version ==
The website for this fork can be found at [http://www.caustik.com/kingofc/]
It focused on partial LLE{{citation needed}}.
== Blueshogun's Cxbx ==
The website for this fork is [http://shogun3d-cxbx.blogspot.de/ blueshoguns blog]
== Cxbx-Reloaded ==
[[Cxbx-Reloaded|This fork has it's own article]]
33ad1bdab1b74411d3c915b232a6d6242a4a127c
XQEMU
0
3695
5189
5163
2017-05-14T13:17:42Z
JayFoxRox
2
wikitext
text/x-wiki
xqemu is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes.
The official homepage can be found at [http://xqemu.com xqemu.com]
== Compatiblity list ==
The following list was almost entirely created by [https://www.youtube.com/user/pcmaker2 pcmaker (also known as John Godgames)] around 2015.
Meaning of the status fields:
{| class="wikitable"
!Status
!Meaning
|-
|Nothing
|Not showing anything due to error
|-
|Intro
|Shows something as Intro / Menu
|-
|Ingame
|Ingame (Graphical bugs)
|-
|Playable*
|Partially playable or expected to be fully playable but not tested completly yet
|-
|Playable
|Partially playable / Fully playable
|}
{{:XQEMU/Compatibility List}}
== XQEMU-JFR ==
XQEMU-JFR is a now defunct fork of XQEMU by JayFoxRox.
Most of the changes have since been integrated back into the official version of XQEMU.
The archived version can be found at https://github.com/JayFoxRox/xqemu-jfr
78c40b889703953d38ac8e0b0c49095a278e0dfb
Template:Citation needed
10
3702
5190
2017-05-14T13:26:26Z
JayFoxRox
2
Stolen from some other wiki
wikitext
text/x-wiki
<sup>[''[[wikipedia:Citation needed|<span title="This claim needs references to reliable sources">citation needed</span>]]'']</sup><includeonly>{{ #switch: {{NAMESPACE}} | {{ns:2}} | {{TALKSPACE}} = <!-- no category for user or talk pages --> | #default = [[Category:Citation needed]] }}</includeonly><noinclude>
==Documentation==
''<nowiki>{{citation needed}}</nowiki>''
* Tells a visitors that the statement is not supported by any form of given evidence.
* Displays: <sup>[''[[wikipedia:Citation needed|<span title="This claim needs references to reliable sources">citation needed</span>]]'']</sup>
* If you see citation needed somewhere, try to prove it (or to prove it's wrong)
<noinclude>
[[Category:Templates|{{PAGENAME}}]]</noinclude>
7a96a1437fe4af05b3d97b27081336b08a6277d6
5191
5190
2017-05-14T13:28:10Z
JayFoxRox
2
Meh.. our wiki doesn't do this right
wikitext
text/x-wiki
<sup>[''[[wikipedia:Citation needed|<span title="This claim needs references to reliable sources">citation needed</span>]]'']</sup><noinclude>
==Documentation==
''<nowiki>{{citation needed}}</nowiki>''
* Tells a visitors that the statement is not supported by any form of given evidence.
* Displays: <sup>[''[[wikipedia:Citation needed|<span title="This claim needs references to reliable sources">citation needed</span>]]'']</sup>
* If you see citation needed somewhere, try to prove it (or to prove it's wrong)
<noinclude>
[[Category:Templates|{{PAGENAME}}]]</noinclude>
a9dae98cb1ac6a031f6fc179aa5c749f3f2aa62e
CPU
0
3681
5192
5030
2017-05-14T13:28:29Z
JayFoxRox
2
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium 3 running at 733MHz. The 'custom' part of this was that that the Pentium 3 in the Xbox was that it had only 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [https://software.intel.com/en-us/articles/intel-sdm Intel® 64 and IA-32 Architectures Software Developer Manuals] (Sorry, I can't find just the documentation for the Pentium 3. Enjoy 4600+ pages, half of which is irrelevant!)
ae6463a56c4a878162956dfd0574af5456984681
Engine List
0
4
5194
5168
2017-05-14T13:31:11Z
JayFoxRox
2
Remove the fixed table width to look less stupid
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <sup>[Ref]</sup>]
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], [https://en.wikipedia.org/wiki/Id_Tech_3 here], and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
f08f4b93f8892e296cd087851ce28d909e6e0093
MCPX ROM
0
3670
5209
5035
2017-05-14T20:04:07Z
JayFoxRox
2
/* References */
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
* [https://github.com/JayFoxRox/xqemu-tools/blob/master/disassemble-mcpx.sh disassemble-mcpx.sh: A bash-script to disassemble/annotate MCPX 1.0 dumps]
f922541222747a5115a5fed6d7fc5fcf8a55bae4
Kung Fu Chaos
0
14
5211
33
2017-05-14T20:11:25Z
JayFoxRox
2
<code> -> <pre>
wikitext
text/x-wiki
== Fullscreen blit shader ==
<pre>
v0.xy {
{0,0}
{0,1}
{1,1}
{1,0}
}
surfaceSize = {640,480}
clipRange = {0,16777215}
c[58] = { 320, -240, 16777215, 0 }
c[59] = { 320.53125, 240.53125, 0, 0}
c[100] = { 640, 480, 0, 5.06639553e-05}
c[101] = { 0, 0, 0, 1}
c[102] = {1/320, -1/240, 1, 1}
c[103] = { 1, -1, 0, 0}
c[104] = { 0, 0, 0, 0}
c[105] = { 320, -240, 16777215, 0 }
c[106] = { 320.53125, 240.53125, 0, 0}
/* Slot 0: 0x00000000 0x002D001B 0x0C36106C 0x28200FF8 */
// R2.x = 0.0;
MOV(R2,x, c[104]);
/* Slot 1: 0x00000000 0x002CC01B 0x0C36106C 0x2F900FF8 */
// R9 = {1/320, -1/240, 1, 1}
MOV(R9,xyzw, c[102]);
/* Slot 2: 0x00000000 0x024CE200 0x2636186C 0x2C50F81C */
// R5.xy = R2.x * { -1, +1 } // -> R5.xy = 0.0 .. FIXME: This makes no sense? R2.x was just set to zero?! [from C104.x !!]
// oD0 = v1
MUL(R5,xy, R2.x, -c[103]);
MOV(oD0,xyzw, v1);
/* Slot 3: 0x00000000 0x006CC0AA 0x0C36146C 0x98300FF8 */
ADD(R3,x, c[102].z, -R2); // -> R3.x = C[102].z = 1.0
/* Slot 4: 0x00000000 0x008CC000 0x242A1800 0xDC400FF8 */
MAD(R4,xy, R2.x, c[102].xy, R3.x); // -> R4.xy = R3.xx = {1,1}
/* Slot 5: 0x00000000 0x008D2000 0x242A1800 0xDC600FF8 */
MAD(R6,xy, R2.x, c[105].xy, R3.x); // -> R6.xy = R3.xx = {1,1}
/* Slot 6: 0x00000000 0x004D4000 0x242A186C 0x2C700FF8 */
MUL(R7,xy, R2.x, c[106].xy); // -> R7.xy = 0.0
/* Slot 7: 0x00000000 0x0080041B 0x0836886D 0x5C800FF8 */
MAD(R8,xy, v2, R4, R5); // -> R8 = v2 * R4 = v2
oT0.xy = R8 * R6 + R7 // -> v2
oT1.xy = R8 * R6 + R7 // -> v2
/* Slot 8: 0x00000000 0x004CA01A 0x0C37286C 0x2FA00FF8 */
MUL(R10,xyzw, c[101].xyz, R9);
/* Slot 11: 0x00000000 0x006CE01B 0xA436146C 0x3070F800 */
ADD(oPos,xyzw, R10, -c[103]);
/* Slot 12: 0x00000000 0x004C8015 0x942A186C 0x2CB00FF8 */
MUL(R11,xy, R9.xy, c[100].xy);
/* Slot 13: 0x00000000 0x00800015 0x082B6857 0x1070C800 */
MAD(oPos,xy, v0.xy, R11.xy, R12.xy);
SET FOG:
/* Slot 14: 0x00000000 0x004C80FF 0x0DFF886C 0x20708828 */
MUL(oFog,x, c[100].w, R12.w);
DO VIEWPORT TRANSFORM:
/* Slot 15: 0x00000000 0x0047401B 0xC436186C 0x2070C800 */
MUL(oPos,xy, R12, c[58]);
/* Slot 16: 0x00000000 0x0067601B 0xC436106C 0x3070C801 */
ADD(oPos,xy, R12, c[59]);
SPACE CONVERSION [XQEMU only]:
if (oPos.w == 0.0 || isinf(oPos.w)) {
vtx.inv_w = 1.0;
} else {
vtx.inv_w = 1.0 / oPos.w;
}
oPos.x = 2.0 * (oPos.x - surfaceSize.x * 0.5) / surfaceSize.x;
oPos.y = -2.0 * (oPos.y - surfaceSize.y * 0.5) / surfaceSize.y;
if (clipRange.y != clipRange.x) {
oPos.z = (oPos.z - 0.5 * (clipRange.x + clipRange.y)) / (0.5 * (clipRange.y - clipRange.x));
}
if (oPos.w <= 0.0) {
oPos.xyz *= oPos.w;
} else {
oPos.w = 1.0;
}
/* Make the world a happy place! */
#if 1
oFog.xyzw = vec4(1.0);
oPos.xy = v0.xy;
oPos.y *= -1.0;
oPos.z = 0.5;
oPos.w = 1.0;
vtx.inv_w = 1.0;
#endif
</pre>
8d488ea3b212db3fc0de6cc913976ea14d31e31d
Emulators
0
3703
5215
2017-05-15T09:43:21Z
JayFoxRox
2
Trying to condense non-official xbox stuff to a minimum. I'll probably add most emu articles below into one giant meta-page
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable"
!Status
!Approach
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|[[XQEMU]]
|
|espes
|Windows
|
|
|-
|Maintained
|LLE/HLE Hybrid
|[[Cxbx-Reloaded]]
|
|SoullessSentinel
|Windows
|
|
|-
|Dead
|HLE
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|[http://dxbx-emu.com Dxbx]
|
|PatrickVL{{citation needed}}
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|Unknown
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|[[Hackbox]]
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to other developers.
|-
|Unknown
|LLE
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE with bios HLE
|[http://mamedev.org/ MAME/Chihiro]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|
|-
|Unknown
|LLE with bios HLE
|[http://mamedev.org/ MAME/Xbox]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Does this exist yet?{{citation needed}}
|-
|Dead
|Unknown
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|Unknown
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|Unknown
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|}
c99c19e0d74b826cd79bd27e8ab5d6a04b5f7335
5217
5215
2017-05-15T09:51:15Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable"
!Status
!Approach
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|[[XQEMU]]
|
|espes
|Windows
|
|
|-
|Maintained
|LLE/HLE Hybrid
|[[Cxbx-Reloaded]]
|
|SoullessSentinel
|Windows
|
|
|-
|Dead
|HLE
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|[http://dxbx-emu.com Dxbx]
|
|PatrickVL{{citation needed}}
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|Unknown
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|[[Hackbox]]
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers.
|-
|Unknown
|LLE
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE with bios HLE
|[http://mamedev.org/ MAME/Chihiro]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|
|-
|Unknown
|LLE with bios HLE
|[http://mamedev.org/ MAME/Xbox]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Does this exist yet?{{citation needed}}
|-
|Dead
|Unknown
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|Unknown
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|Unknown
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|}
7797db4b7e53bfd3a8fc81be3ebe5e67d4f9b61a
5218
5217
2017-05-15T12:06:34Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable"
!Status
!Approach
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|[[XQEMU]]
|
|espes
|Windows
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|LLE/HLE Hybrid
|[[Cxbx-Reloaded]]
|
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|Unknown
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE with bios HLE
|[http://mamedev.org/ MAME/Chihiro]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|
|-
|Unknown
|LLE with bios HLE
|[http://mamedev.org/ MAME/Xbox]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Does this exist yet?{{citation needed}}
|-
|Dead
|Unknown
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|Unknown
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|Unknown
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|}
ccea8854e27d49837de768669fd65fd664dc7a7e
Memory
0
3674
5220
5072
2017-05-15T13:28:34Z
Eighthpence
2472
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively. On Debug Xboxs and Chihiro, only the BIOS is mapped.
{| class="wikitable"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|BIOS
|0xFF000000 - 0xFFFFFFFF
|0xFF000000 - 0xFFFFFFFF
|-
|MCPX
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MAIN_MEMORY 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MAIN_MEMORY 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define BIOS_SIZE 256 * 1024
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)
uint8_t memory[MAIN_MEMORY] = {0};
uint8_t bios[BIOS_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MAIN_MEMORY) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MEMORY) {
return mcpx[location - MCPX_MEMORY];
}
if (location >= BIOS_MEMORY) {
return bios[(location - BIOS_MEMORY) % BIOS_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
73a5aa3e9f513dd796ca4e592111bbc9bb499d6e
MCPX ROM
0
3670
5221
5209
2017-05-15T21:05:36Z
JayFoxRox
2
/* Dumping the MCPX ROM */
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX ROM Dumping]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
* [https://github.com/JayFoxRox/xqemu-tools/blob/master/disassemble-mcpx.sh disassemble-mcpx.sh: A bash-script to disassemble/annotate MCPX 1.0 dumps]
3a03353d94fb8158eb0d5f53007ced1eb86d85e0
Resources
0
3
5222
5184
2017-05-16T01:29:07Z
Mborgerson
2478
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom MCPX ROM Disassembly]
* [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== About emulation ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
== History ==
* [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php Designing the Boot Sound for the Original Xbox (Brian Schmidt)]
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past]
ebdacd60372019dd63bddfb02e50dcac9a6bb8ab
5224
5222
2017-05-16T10:03:34Z
JayFoxRox
2
Moved some resources to related articles
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php Designing the Boot Sound for the Original Xbox (Brian Schmidt)]
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past]
78cf422435b74f038f9cd2d84a367ce6ac63c16d
5228
5224
2017-05-16T10:09:27Z
JayFoxRox
2
Moved to "DVD Drive" article
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php Designing the Boot Sound for the Original Xbox (Brian Schmidt)]
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past]
bac2ebaf425580e78c4676b6e046252ec87fd64b
Emulators
0
3703
5223
5218
2017-05-16T10:02:58Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable"
!Status
!Approach
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|[[XQEMU]]
|
|espes
|Windows
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|LLE/HLE Hybrid
|[[Cxbx-Reloaded]]
|
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|Unknown
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE with bios HLE
|[http://mamedev.org/ MAME/Chihiro]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|
|-
|Unknown
|LLE with bios HLE
|[http://mamedev.org/ MAME/Xbox]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Does this exist yet?{{citation needed}}
|-
|Dead
|Unknown
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|Unknown
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|Unknown
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
529b462b37c43820ce8d964db78c7e08823c2610
5251
5223
2017-05-19T11:25:31Z
JayFoxRox
2
Tried to be more specific about approaches
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable"
!Status
!Approach
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|[[XQEMU]]
|
|espes
|Windows
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|LLE/HLE Hybrid
|[[Cxbx-Reloaded]]
|
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|HLE
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|Unknown
|HLE
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|LLE/HLE Hybrid
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|HLE
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE with MCPX ROM HLE
|[http://mamedev.org/ MAME/Chihiro]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|
|-
|Unknown
|LLE with MCPX ROM HLE
|[http://mamedev.org/ MAME/Xbox]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Does this exist yet?{{citation needed}}
|-
|Dead
|Unknown
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|Unknown
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
30e3a8fbc8dbb333c487122e1fabb91783c2c8d3
5252
5251
2017-05-19T11:26:23Z
JayFoxRox
2
Make table sortable
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|[[XQEMU]]
|
|espes
|Windows
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|LLE/HLE Hybrid
|[[Cxbx-Reloaded]]
|
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|HLE
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|Unknown
|HLE
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|LLE/HLE Hybrid
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|HLE
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE with MCPX ROM HLE
|[http://mamedev.org/ MAME/Chihiro]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|
|-
|Unknown
|LLE with MCPX ROM HLE
|[http://mamedev.org/ MAME/Xbox]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Does this exist yet?{{citation needed}}
|-
|Dead
|Unknown
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|Unknown
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
92174582eebacd6c4e1b1f7f72c21939114e63fc
Main Page
0
1
5225
5216
2017-05-16T10:05:12Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
** [[DVD Drive]] [[Xbox Game Disc]]
** [[USB]] [[Xbox Input Devices]]
* [[Xbox Debug Monitor]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation
* [[Emulators]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
ceb7d36bae5f3e57d942c708070958f99dc2ef43
5226
5225
2017-05-16T10:06:40Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
** [[DVD Drive]]
** [[USB]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[Xbox Debug Monitor]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation
* [[Emulators]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
f4d1fd6a5c2fa47ad1c8613a7747e8970ad7d838
5248
5226
2017-05-19T06:01:41Z
KaosEngineer
2482
Missing one piece of hardware -- the Hard drive.
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
** [[DVD Drive]]
** [[Hard Drive]]
** [[USB]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[Xbox Debug Monitor]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
Games
* [[Engine List]]
* [[Games/Azurik: Rise of Perathia]]
* [[Games/Grand Theft Auto 3]]
* [[Games/Grand Theft Auto Vice City]]
* [[Games/Grand Theft Auto San Andreas]]
* [[Games/Kung Fu Chaos]]
* [[Games/Tony Hawk's Pro Skater 2x]]
Emulation
* [[Emulators]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
bce52a49c9ba9f1753bb17de386bc1de5d5775a3
DVD Drive
0
3704
5227
2017-05-16T10:08:46Z
JayFoxRox
2
Created page with "The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]]. == References and links == * [http://web.archive.org/web/20151026074806/http://home.comcast..."
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
383436d441ebc1e1debc1c66e1d024cc36230599
BIOS
0
3672
5229
5219
2017-05-16T11:25:35Z
JayFoxRox
2
/* References */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! Unknown
! X-Codes
! Copyright String
! Kernel
! Kernel Data Segment
! 2BL
! Decoy Boot Loader
|-
! 3944
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4034
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4134
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4817
| 0x00000
| 0x00080
| 0x00db9
|
|
|
| 0x3FE00
|-
! 5101
| 0x00000
| 0x00080
| 0x00e49
|
|
|
| 0x3FE00
|-
! 5530
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5713
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5838
| 0x00000
| 0x00080
| 0x00dcc
|
|
|
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
See the table above for the start positions.
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== Known Retail BIOSs ==
* 3944
* 4034
* 4134
* 4817
* 5101
* 5530
* 5713
* 5838
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
6caa3757a22e5093c74dbf4fa1fd9edb55ef709d
5236
5229
2017-05-17T19:39:04Z
Eighthpence
2472
/* Known Retail BIOSs */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! Unknown
! X-Codes
! Copyright String
! Kernel
! Kernel Data Segment
! 2BL
! Decoy Boot Loader
|-
! 3944
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4034
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4134
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4817
| 0x00000
| 0x00080
| 0x00db9
|
|
|
| 0x3FE00
|-
! 5101
| 0x00000
| 0x00080
| 0x00e49
|
|
|
| 0x3FE00
|-
! 5530
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5713
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5838
| 0x00000
| 0x00080
| 0x00dcc
|
|
|
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
See the table above for the start positions.
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
0dc24267966f86cb2554fbad1ae79ce970668c8a
Xbox Game Disc
0
3700
5230
5206
2017-05-16T11:27:32Z
JayFoxRox
2
Added redump links
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ Dumping Guide by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
670fab93547fea78dc5cdd16f7b7f93f08235bfc
5231
5230
2017-05-16T14:47:13Z
JayFoxRox
2
Added list of drives.
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Firmware
|-
|{{citation needed}}
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|Kreon (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|Kreon (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|Kreon (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|Kreon (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
206d094a499ef8780620bbf7e93f91ef07bcdc7a
5247
5231
2017-05-18T17:21:12Z
JayFoxRox
2
Added some hard to find flashing tools and original firmwares from Samsung
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|Kreon (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/]
|Kreon (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
dbc9492f547bcd7c21c85f7202403775df4beab9
5256
5247
2017-05-20T14:04:22Z
JayFoxRox
2
Added list of Kreon 1.00 commands from the README
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|Kreon (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/]
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
1b2008e7e6fe16fe41518cdebb35ee9aec99ac70
Engine List
0
4
5233
5194
2017-05-16T21:38:53Z
JayFoxRox
2
Fixed bug in markup
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <sup>[Ref]</sup>][http://www.extremegamer.ca/xbox/games/combat121.php <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <sup>[Ref]</sup>][http://pc.ign.com/objects/665/665243.html <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <sup>[Ref]</sup>]</ref>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <sup>[Ref]</sup>]
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <sup>[Ref]</sup>]
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <sup>[Ref]</sup>]
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from [https://en.wikipedia.org/wiki/List_of_CryEngine_games here], [https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], [https://en.wikipedia.org/wiki/Id_Tech_3 here], and [https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
000a012b5aef5687aef450f15d31d2715b306406
5234
5233
2017-05-16T21:41:02Z
JayFoxRox
2
Fixed link markup
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup></ref><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here], <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here], and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
a3f860734f0027072a0a0a3cfd5ad4b3286ff1c4
5235
5234
2017-05-16T21:42:07Z
JayFoxRox
2
One link was still broken
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars Jedi Knight II: Jedi Outcast
|-
| Star Wars Jedi Knight: Jedi Academy
|-
| James Bond 007: Everything or Nothing
|-
| James Bond 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here], <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here], and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
9adb1c2fd844173bee4864026aeb45861250845c
5258
5235
2017-05-21T16:30:10Z
JayFoxRox
2
/* id Tech 3 */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein: Tides of War
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars: Jedi Knight II: Jedi Outcast
|-
| Star Wars: Jedi Knight: Jedi Academy
|-
| 007: Everything or Nothing
|-
| 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout: Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Harry Potter and the Order of the Phoenix
| 2007
| Nintendo DS, PlayStation 2, PSP, Windows, Wii, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| MLB 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 20-03
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| NRL Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| S.C.A.R. - Squadra Corse Alfa Romeo / Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here], <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here], and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
02110e0236a3fd75f34c4e3b25112f42b9903be1
5259
5258
2017-05-21T16:38:50Z
JayFoxRox
2
/* Renderware */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein: Tides of War
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars: Jedi Knight II: Jedi Outcast
|-
| Star Wars: Jedi Knight: Jedi Academy
|-
| 007: Everything or Nothing
|-
| 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| Major League Baseball 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 2003
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop: Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie Game
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose: A Gunslinger's Tale in Mexico
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers In Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers In Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations(City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic: The Gathering - Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor: Vietnam
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3: Raven Shield
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here], <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here], <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here], and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here].
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
d8faf2de166b5aec8ee0273ad94e3948dbffbae3
5261
5259
2017-05-21T16:47:50Z
JayFoxRox
2
/* Unreal Engine 2 */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein: Tides of War
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars: Jedi Knight II: Jedi Outcast
|-
| Star Wars: Jedi Knight: Jedi Academy
|-
| 007: Everything or Nothing
|-
| 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| Major League Baseball 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 2003
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop: Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie Game
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose: A Gunslinger's Tale in Mexico
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers in Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers in Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121<br>America's Secret Operations (City Interactive Europe version)
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic the Gathering: Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon: Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin<br>Battlestrike: Secret Weapons(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima<br>The Heat of War(City Interactive Europe version)
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
392ad97a3dbd9da95a1c83b723d6ff36f8d7b8e0
5262
5261
2017-05-21T16:55:34Z
JayFoxRox
2
Remove alternative titles
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Counter-Strike
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Return to Castle Wolfenstein: Tides of War
|-
| Soldier of Fortune II: Double Helix
|-
| Star Wars: Jedi Knight II: Jedi Outcast
|-
| Star Wars: Jedi Knight: Jedi Academy
|-
| 007: Everything or Nothing
|-
| 007: Agent Under Fire
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| Half-Life 2
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| Far Cry Instincts
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| Far Cry Instincts: Evolution
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| AFL Live 2003
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live 2004
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| AFL Live Premiership Edition
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| Major League Baseball 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 2003
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop: Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| Tech Deck: Bare Knuckle Grind
| 2005
| Xbox
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie Game
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose: A Gunslinger's Tale in Mexico
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers in Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers in Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic the Gathering: Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon: Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
56de857b2fbf9004411fe9b03391f6c4571b70b1
NV2A/Pixel Combiner
0
8
5237
35
2017-05-17T23:50:42Z
JayFoxRox
2
Cleanup links and add a super userful nvidia doc
wikitext
text/x-wiki
The NV2A implements [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners] (and [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]?)
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
b0053ccc9f4e4e04138e6669033bd0f0742b97e7
5265
5237
2017-05-21T23:41:52Z
JayFoxRox
2
/* References and links */
wikitext
text/x-wiki
The NV2A implements [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners] (and [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]?)
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
b17fda35a4c436dae9f49062f1d493f95cc57d1c
5266
5265
2017-05-21T23:51:28Z
JayFoxRox
2
Table for texturemodes
wikitext
text/x-wiki
The NV2A implements [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners] (and [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]?)
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|*
|*
|*
|*
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|*
|*
|*
|*
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|*
|*
|*
|*
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|*
|*
|*
|*
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|*
|*
|*
|*
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|*
|*
|*
|*
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|
|*
|*
|*
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|
|*
|*
|*
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|
|
|*
|*
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|
|
|*
|*
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|
|
|*
|*
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|
|
|*
|
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|
|
|
|*
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|
|
|
|*
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|
|
|
|*
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|
|*
|*
|*
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|
|*
|*
|*
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|
|*
|*
|
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|
|
|
|*
|
|}
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
6b89ed0b5fc21b55f7b775fdb9b5910786eb5bbd
5267
5266
2017-05-21T23:59:47Z
JayFoxRox
2
Attempted to add D3D names
wikitext
text/x-wiki
The NV2A implements [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners] (and [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]?)
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE<br>texcoord?{{citation needed}}
|*
|*
|*
|*
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D<br>tex
|*
|*
|*
|*
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|*
|*
|*
|*
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|*
|*
|*
|*
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU<br>texcoord?{{citation needed}}
|*
|*
|*
|*
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE<br>texkill
|*
|*
|*
|*
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP<br>texbem
|
|*
|*
|*
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM<br>texbeml
|
|*
|*
|*
|
|-
|0x08
|PS_TEXTUREMODES_BRDF<br>texm3x2tex
|
|
|*
|*
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST<br>texm3x2pad?{{citation needed}}
|
|
|*
|*
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW<br>texm3x2tex?{{citation needed}}
|
|
|*
|*
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|
|
|*
|
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|
|
|
|*
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|
|
|
|*
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|
|
|
|*
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR<br>texreg2ar
|
|*
|*
|*
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB<br>texreg2gb
|
|*
|*
|*
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|
|*
|*
|
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|
|
|
|*
|
|}
Also known from nvidia docs:
* texm3x3pad [stage 1, stage 2]
* texm3x3spec [stage 3]
* texm3x3vspec [stage 3]
* texm3x3tex [stage 3]
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
cde892f34466204bc531a8e04fee531f14a10fa4
Kernel/XboxSignatureKey
0
3705
5239
2017-05-18T11:33:54Z
Wayo
2479
Created page with "This is used to find the Xbox Public RSA-2048 Key. This key is used to verify the signed XBE executables. == XBE signing process == The XBE signing process consists of two s..."
wikitext
text/x-wiki
This is used to find the Xbox Public RSA-2048 Key. This key is used to verify the signed XBE executables.
== XBE signing process ==
The XBE signing process consists of two stages:
1. Calculate a SHA-1 hash of the contents of each of the XBE sections and store it in a table in the XBE header.
2. Calculate a SHA-1 hash of the XBE header, except for the ''magic'' 'XBEH' value and the ''digital signature'' field. The hash is then encrypted with a 2048-bit RSA private key. The signature of all official titles has been encrypted with The resulting encrypted hash ''signature'' stored near after the XBE header XBEH ''magic'' field, in the ''digital signature'' field.
== XBE signature verification ==
When an Xbox verifies an executable, a similar process is followed:
1. All the XBE section hashes are recalculated and compared to the ones stored in the XBE header section table. If these don't match, verification fails.
2. Calculate a SHA-1 hash of the XBE header, except for the ''magic'' 'XBEH' value and the ''digital signature'' field.
3. The ''digital signature'' field from the XBE is decrypted with the 2048-bit RSA public key and compared to the SHA-1 hash of the XBE header. Finally, if the two values match, the game is verified.
1459d2b4eff187d522d7423d493eb52f441bcdfc
5240
5239
2017-05-18T13:44:37Z
Wayo
2479
wikitext
text/x-wiki
This is used to find the Xbox Public RSA-2048 Key. This key is used to verify the signed XBE executables.
struct RSA_PUBLIC_KEY
{
char Magic[4]; // "RSA1"
unsigned int Bloblen; // 264 (Modulus + Exponent + Modulussize)
unsigned char Bitlen[4]; // 2048
unsigned int ModulusSize; // 255 (bytes in the Modulus)
unsigned char Exponent[4];
unsigned char Modulus[256]; // Bit endian style
unsigned char Privatekey[256]; // Private Key -- Big endian style
};
struct RSA_PUBLIC_KEY xePublicKeyData;
== XBE signing process ==
The XBE signing process consists of two stages:
1. Calculate a SHA-1 hash of the contents of each of the XBE sections and store it in a table in the XBE header.
2. Calculate a SHA-1 hash of the XBE header, except for the ''magic'' 'XBEH' value and the ''digital signature'' field. The hash is then encrypted with a 2048-bit RSA private key. The signature of all official titles has been encrypted with The resulting encrypted hash ''signature'' stored near after the XBE header XBEH ''magic'' field, in the ''digital signature'' field.
== XBE signature verification ==
When an Xbox verifies an executable, a similar process is followed:
1. All the XBE section hashes are recalculated and compared to the ones stored in the XBE header section table. If these don't match, verification fails.
2. Calculate a SHA-1 hash of the XBE header, except for the ''magic'' 'XBEH' value and the ''digital signature'' field.
3. The ''digital signature'' field from the XBE is decrypted with the 2048-bit RSA public key and compared to the SHA-1 hash of the XBE header. Finally, if the two values match, the game is verified.
== References and links ==
* [https://github.com/xqemu/xbedump/blob/master/xboxlib.c Xbedump source]
33953cac6c54a20879c86294e1fed0e91b574353
5245
5240
2017-05-18T16:57:40Z
Wayo
2479
wikitext
text/x-wiki
This is used to find the Xbox Public RSA-2048 Key. This key is used to verify the signed [[XBE]] executables.
struct RSA_PUBLIC_KEY
{
char Magic[4]; // "RSA1"
unsigned int Bloblen; // 264 (Modulus + Exponent + Modulussize)
unsigned char Bitlen[4]; // 2048
unsigned int ModulusSize; // 255 (bytes in the Modulus)
unsigned char Exponent[4];
unsigned char Modulus[256]; // Bit endian style
unsigned char Privatekey[256]; // Private Key -- Big endian style
};
struct RSA_PUBLIC_KEY xePublicKeyData;
== XBE signing process ==
The XBE signing process consists of two stages:
1. Calculate a SHA-1 hash of the contents of each of the XBE sections and store it in a table in the XBE header.
2. Calculate a SHA-1 hash of the XBE header, except for the ''magic'' 'XBEH' value and the ''digital signature'' field. The hash is then encrypted with a 2048-bit RSA private key. The signature of all official titles has been encrypted with The resulting encrypted hash ''signature'' stored near after the XBE header XBEH ''magic'' field, in the ''digital signature'' field.
== XBE signature verification ==
When an Xbox verifies an executable, a similar process is followed:
1. All the XBE section hashes are recalculated and compared to the ones stored in the XBE header section table. If these don't match, verification fails.
2. Calculate a SHA-1 hash of the XBE header, except for the ''magic'' 'XBEH' value and the ''digital signature'' field.
3. The ''digital signature'' field from the XBE is decrypted with the 2048-bit RSA public key and compared to the SHA-1 hash of the XBE header. Finally, if the two values match, the game is verified.
== References and links ==
* [https://github.com/xqemu/xbedump/blob/master/xboxlib.c Xbedump source]
24b8b7115bd84a60b8eaef18ef0d63376a827a3a
5246
5245
2017-05-18T16:58:03Z
Wayo
2479
wikitext
text/x-wiki
This is used to find the Xbox Public RSA-2048 Key. This key is used to verify the signed [[Xbe]] executables.
struct RSA_PUBLIC_KEY
{
char Magic[4]; // "RSA1"
unsigned int Bloblen; // 264 (Modulus + Exponent + Modulussize)
unsigned char Bitlen[4]; // 2048
unsigned int ModulusSize; // 255 (bytes in the Modulus)
unsigned char Exponent[4];
unsigned char Modulus[256]; // Bit endian style
unsigned char Privatekey[256]; // Private Key -- Big endian style
};
struct RSA_PUBLIC_KEY xePublicKeyData;
== XBE signing process ==
The XBE signing process consists of two stages:
1. Calculate a SHA-1 hash of the contents of each of the XBE sections and store it in a table in the XBE header.
2. Calculate a SHA-1 hash of the XBE header, except for the ''magic'' 'XBEH' value and the ''digital signature'' field. The hash is then encrypted with a 2048-bit RSA private key. The signature of all official titles has been encrypted with The resulting encrypted hash ''signature'' stored near after the XBE header XBEH ''magic'' field, in the ''digital signature'' field.
== XBE signature verification ==
When an Xbox verifies an executable, a similar process is followed:
1. All the XBE section hashes are recalculated and compared to the ones stored in the XBE header section table. If these don't match, verification fails.
2. Calculate a SHA-1 hash of the XBE header, except for the ''magic'' 'XBEH' value and the ''digital signature'' field.
3. The ''digital signature'' field from the XBE is decrypted with the 2048-bit RSA public key and compared to the SHA-1 hash of the XBE header. Finally, if the two values match, the game is verified.
== References and links ==
* [https://github.com/xqemu/xbedump/blob/master/xboxlib.c Xbedump source]
bab5b2388435ace5743cdaa5d180c032221e4e70
Microsoft XDK
0
12
5241
5049
2017-05-18T13:53:11Z
Wayo
2479
/* List of known versions */
wikitext
text/x-wiki
The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times.
== List of known versions ==
* 3424 (alpha?)
* 3911 (*)
* 3925 (*)
* 3936 (*)
* 3937 (*)
* 3941 (*)
* 3948 (*)
* 3950 (*)
* 4020 (Seen on an official Xbox recovery tool)
* 4034 (*)
* 4039 (*)
* 4134 (*)
* 4242 (*)
* 4361
* 4400 (rare)
* 4432
* 4531
* 4627
* 4721
* 4831
* 4928
* 5028
* 5120
* 5233
* 5344
* 5455
* 5558
* 5659
* 5788
* 5849 (Dec 2003)
* 5849.16
* 5933 (uncertain number - Dxbx code mentions 5911)
* 5960 (last official dashboard)
(*) : Earlier XDK's contained libraries with different versions numbers. Before or around XDK version 4361, all libraries in the XDK were given the same version number.
Note : An even more complete listing can be found here : http://codeasm.com/xbox/files/Xbox%20Kernel_Dash_XDK%20versions.txt
67b55f8afe8d9522372705861552a51d1e248e27
5242
5241
2017-05-18T14:05:15Z
Wayo
2479
/* List of known versions */
wikitext
text/x-wiki
The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times.
== List of known versions ==
{| class="wikitable"
! Version
! Comments
|-
! 3424
| April 2001 XDK and SDK (03.01.01 - New for April XDK release)
|-
! 3911
| August XDK 2001 (( Final Hardware Recovery) (build on WIN2000 5. 2134/2195 ? 5.1.2258.400)(*)
|-
! 3925
| Retail? XDK(*)
|-
! 3936
| (*)
|-
! 3937
| (*)
|-
! 3941
| (*)
|-
! 3948
| (*)
|-
! 3950
| (*)
|-
! 4020
| Seen on an official Xbox recovery tool
|-
! 4034
| (*)
|-
! 4039
| (*)
|-
! 4134
| December 2001 XDK (*)
|-
! 4242
| February 2002 XDK (*)
|-
! 4361
| March 2002 XDK
|-
! 4400
| Barnabas XDK - rare
|-
! 4432
| April 2002 XDK
|-
! 4531
| May 2002 XDK
|-
! 4627
| June 2002 XDK
|-
! 4721
| July 2002 XDK
|-
! 4831
| August 2002 XDK
|-
! 4928
| September 2002 XDK
|-
! 5028
| October 2002 XDK
|-
! 5120
| November 2002 XDK
|-
! 5233
| December 2002 XDK
|-
! 5344
| February 2003 XDK
|-
! 5455
| April 2003 XDK
|-
! 5558
| June 2003 XDK
|-
! 5659
| August 2003 XDK
|-
! 5788
| November 2003 XDK
|-
! 5849
| December 2003 XDK
|-
! 5849
| .16
|-
! 5933
| uncertain number - Dxbx code mentions 5911
|-
! 5960
| last official dashboard
|}
(*) : Earlier XDK's contained libraries with different versions numbers. Before or around XDK version 4361, all libraries in the XDK were given the same version number.
Note : An even more complete listing can be found here : http://codeasm.com/xbox/files/Xbox%20Kernel_Dash_XDK%20versions.txt
ef839f9dd2708d282e67524a11f7718c69a157d8
Xbe
0
3706
5243
2017-05-18T16:50:42Z
Wayo
2479
Created page with "XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsof..."
wikitext
text/x-wiki
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm]
d4e18cede06f4a436da8a68116b79bcb3267bc7e
5244
5243
2017-05-18T16:56:58Z
Wayo
2479
/* Resources and links */
wikitext
text/x-wiki
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
a6c1831d67b9ad1bb93f3a2cfacf9f67064dc699
Hard Drive
0
3707
5249
2017-05-19T06:03:38Z
KaosEngineer
2482
Created page with "The original Xbox hard disk drive was 8GB in size. Later releases, 1.4's had 10GB drives; however, only the first 8GB of the drive was used."
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.4's had 10GB drives; however, only the first 8GB of the drive was used.
b24aaf90645456920b8aff46dbb3ce764115025c
5250
5249
2017-05-19T06:08:54Z
KaosEngineer
2482
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
36dd315024a3d4d8adf83ac289e5af684e5da51d
5253
5250
2017-05-20T00:59:30Z
Mborgerson
2478
Add partition info, stub other sections
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
== Models ==
{| class="wikitable
|-
! Xbox Version
! Manufacturer
! Model Number
! Capacity
|-
| 1.0?
| ?
| ?
| 8G
|-
| 1.3+
| Seagate
| ?
| 10G
|}
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the EEPROM data.
== How To: Backup an HDD ==
'''FIXME'''
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
9b85ecf156210287c094d0c012ac270a1c64e0a8
5255
5253
2017-05-20T07:19:15Z
JayFoxRox
2
EEPROM Link
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
== Models ==
{| class="wikitable
|-
! Xbox Version
! Manufacturer
! Model Number
! Capacity
|-
| 1.0?
| ?
| ?
| 8G
|-
| 1.3+
| Seagate
| ?
| 10G
|}
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
'''FIXME'''
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
fe23493f1152c9765e648c289b6359030fa455c7
5257
5255
2017-05-20T19:18:21Z
Mborgerson
2478
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
== Models ==
{| class="wikitable
|-
! Xbox Version
! Manufacturer
! Model Number
! Capacity
|-
| 1.0?
| ?
| ?
| 8G
|-
| 1.3+
| Seagate
| ?
| 10G
|}
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
2dd9ae49781e5ff6832ab32c1a19e3528b80db8f
FATX
0
3708
5254
2017-05-20T01:08:41Z
Mborgerson
2478
Created page with "The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox. == Implementations == {| class="wikitable |- ! Name ! P..."
wikitext
text/x-wiki
The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
== Implementations ==
{| class="wikitable
|-
! Name
! Platform
! Read/Write
! Description
|-
| Official
| Xbox
| Read/Write
| Official FATX implementation by Microsoft
|-
| [https://github.com/mborgerson/fatx fatxfs]
| GNU/Linux, macOS
| Read-Only
| [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]-based implementation
|}
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/File%20systems/FATX%2C%20File%20Allocation%20Table%20%28X-Box%29/Differences_between_Xbox_FATX_and_MS-DOS_FAT.htm Differences between Xbox FATX and MS-DOS FAT]
c97a9e92aae891fb4081e307374959647f1053c2
Talk:Engine List
1
3686
5260
5048
2017-05-21T16:39:16Z
JayFoxRox
2
/* Unreleased games */ new section
wikitext
text/x-wiki
Shall we merge this with https://en.wikipedia.org/wiki/List_of_Xbox_games and https://en.wikipedia.org/wiki/List_of_Xbox_games_with_alternate_display_modes ?
We could just add a column for the engine so the list could be sorted.
We could also add a column for all the XDK versions etc - it would be a massive table, but probably useful?
Shall we do this somewhere else? google sheets?
Shall we use a program to generate a mediawiki version for this wiki?
Eitherway, we'd then create a page for every game to mention further technical details (See "Games/" articles)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 14:29, 29 March 2017 (PDT)
== Unreleased games ==
How to handle unreleased games like "Tech Deck: Bare Knuckle Grind" ?
eb41a6757fe2ac05d02abd9ed0862977540dafe0
5263
5260
2017-05-21T16:57:11Z
JayFoxRox
2
wikitext
text/x-wiki
Shall we merge this with https://en.wikipedia.org/wiki/List_of_Xbox_games and https://en.wikipedia.org/wiki/List_of_Xbox_games_with_alternate_display_modes ?
We could just add a column for the engine so the list could be sorted.
We could also add a column for all the XDK versions etc - it would be a massive table, but probably useful?
Shall we do this somewhere else? google sheets?
Shall we use a program to generate a mediawiki version for this wiki?
Eitherway, we'd then create a page for every game to mention further technical details (See "Games/" articles)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 14:29, 29 March 2017 (PDT)
== Unreleased games ==
How to handle unreleased games like "Tech Deck: Bare Knuckle Grind" ?
(the list might be incomplete, I believe this was released on PC - no idea what engine though)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 09:57, 21 May 2017 (PDT)
916a57e211bb6094b6dc78742708b6884dbe292b
Xbox Debug Monitor
0
3689
5264
5200
2017-05-21T21:00:13Z
Furon
2477
/* External Links */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
471f40aee4ff41572aac6ce1c7e8b1f68ac09927
Kernel/LaunchDataPage
0
3709
5268
2017-05-22T11:45:42Z
JayFoxRox
2
Created page with "=== Switch to Dashboard === <pre> struct LaunchDataPage_Dashboard { uint32_t reason; uint32_t context; uint32_t parameters[2]; uint8_t padding[3072 - 16]; }; </pre>..."
wikitext
text/x-wiki
=== Switch to Dashboard ===
<pre>
struct LaunchDataPage_Dashboard {
uint32_t reason;
uint32_t context;
uint32_t parameters[2];
uint8_t padding[3072 - 16];
};
</pre>
{| class="wikitable"
!<code>reason</code>
!<code>parameters[0]</code>
!<code>parameters[1]</code>
!Note
|-
|0 = MainMenu
|
|
|-
|rowspan="5"|1 = Error
|1 = InvalidXbe
|
|
|-
|2 = InvalidHdd
|
|
|-
|3 = Region
|
|
|-
|4 = ParentalControl
|
|
|-
|5 = MediaType
|Rating which caused this error
|
|-
|2 = Savedata
|
|
|
|-
|rowspan="5"|3 = Settings flags
|0x01 = Clock
|
|
|-
|0x02 = Timezone
|
|
|-
|0x04 = Language
|
|
|-
|0x08 = Video
|
|
|-
|0x10 = Audio
|
|
|-
|4 = Music
|
|
|
|}
f0ea6c4d34b6d44a6067860f930d023b0aa57f85
Fatal Error
0
3710
5269
2017-05-22T12:14:47Z
JayFoxRox
2
Created page with "These are the errors which will be displayed {| class="wikitable" !Value (2 digit decimal) !Meaning |- |0 |No error (used internally to clear error flags from EEPROM) |- |01..."
wikitext
text/x-wiki
These are the errors which will be displayed
{| class="wikitable"
!Value (2 digit decimal)
!Meaning
|-
|0
|No error (used internally to clear error flags from EEPROM)
|-
|01
|
|-
|02
|EEPROM Checksum failure
|-
|03
|
|-
|04
|RAM bad
|-
|05
|Harddrive not locked
|-
|06
|Unable to unlock Harddrive
|-
|07
|Harddrive unresponsive{{citation needed}}
|-
|08
|Harddrive missing
|-
|09
|Wrong Harddrive{{citation needed}}
|-
|10
|DVD Drive unresponsive
|-
|11
|DVD Drive missing
|-
|12
|Wrong DVD Drive{{citation needed}}
|-
|13
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 0</code> (MainMenu)
|-
|14
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 0</code> (Error)
|-
|15
|
|-
|16
|Dashboard settings error{{citation needed}}
|-
|17
|
|-
|18
|
|-
|19
|
|-
|20
|Dashboard failed to launch, but DVD security check was successful
|-
|21
|Used to manually display fatal error after reboot (on purpose)
|}
28de008503bff8b9feb22caa86506dc9f4a2f1d9
5270
5269
2017-05-22T12:15:08Z
JayFoxRox
2
Fixed typo
wikitext
text/x-wiki
These are the errors which will be displayed
{| class="wikitable"
!Value (2 digit decimal)
!Meaning
|-
|0
|No error (used internally to clear error flags from EEPROM)
|-
|01
|
|-
|02
|EEPROM Checksum failure
|-
|03
|
|-
|04
|RAM bad
|-
|05
|Harddrive not locked
|-
|06
|Unable to unlock Harddrive
|-
|07
|Harddrive unresponsive{{citation needed}}
|-
|08
|Harddrive missing
|-
|09
|Wrong Harddrive{{citation needed}}
|-
|10
|DVD Drive unresponsive
|-
|11
|DVD Drive missing
|-
|12
|Wrong DVD Drive{{citation needed}}
|-
|13
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 0</code> (MainMenu)
|-
|14
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 1</code> (Error)
|-
|15
|
|-
|16
|Dashboard settings error{{citation needed}}
|-
|17
|
|-
|18
|
|-
|19
|
|-
|20
|Dashboard failed to launch, but DVD security check was successful
|-
|21
|Used to manually display fatal error after reboot (on purpose)
|}
568b8f3dbc41d2a57bc58fd3a8da50f0f8e8a059
5271
5270
2017-05-22T12:15:27Z
JayFoxRox
2
Meh.. 0 -> 00
wikitext
text/x-wiki
These are the errors which will be displayed
{| class="wikitable"
!Value (2 digit decimal)
!Meaning
|-
|00
|No error (used internally to clear error flags from EEPROM)
|-
|01
|
|-
|02
|EEPROM Checksum failure
|-
|03
|
|-
|04
|RAM bad
|-
|05
|Harddrive not locked
|-
|06
|Unable to unlock Harddrive
|-
|07
|Harddrive unresponsive{{citation needed}}
|-
|08
|Harddrive missing
|-
|09
|Wrong Harddrive{{citation needed}}
|-
|10
|DVD Drive unresponsive
|-
|11
|DVD Drive missing
|-
|12
|Wrong DVD Drive{{citation needed}}
|-
|13
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 0</code> (MainMenu)
|-
|14
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 1</code> (Error)
|-
|15
|
|-
|16
|Dashboard settings error{{citation needed}}
|-
|17
|
|-
|18
|
|-
|19
|
|-
|20
|Dashboard failed to launch, but DVD security check was successful
|-
|21
|Used to manually display fatal error after reboot (on purpose)
|}
5f56c0b94d55a2704a4d26a6826687cb88221bb6
Kernel/HalReturnToFirmware
0
3711
5272
2017-05-22T12:30:23Z
JayFoxRox
2
Created page with "HalReturnToFirmware is used to reboot the Xbox. The Xbox is also quick-rebooted to launch a new XBE."
wikitext
text/x-wiki
HalReturnToFirmware is used to reboot the Xbox.
The Xbox is also quick-rebooted to launch a new XBE.
0defce6bb2ccff9a21c9782c42457beecc5f311d
Kernel/LaunchDataPage
0
3709
5273
5268
2017-05-22T13:06:27Z
JayFoxRox
2
Lots of new stuff
wikitext
text/x-wiki
LaunchDataPage is a pointer to a memory page (4096 Bytes) which is persisted across reboots.
The pointer might be <code>NULL</code> until the memory page is allocated.
Allocation and persisting the page is responsibility of the application.
<pre>struct {
uint32_t launch_data_type;
uint32_t title_id;
char launch_path[520];
uint32_t flags;
uint8_t pad[492];
uint32_t launch_data[3072];
}* LaunchDataPage;</pre>
== Launch data ==
=== Type 0x00000000: Switch to title ===
Will reboot to a new XBE. The data is application dependent.
Official game demos should respect additional data:
<pre>struct LaunchData00000000 {
uint32_t id;
uint32_t runmode; // 0x00000001 = Kiosk / 0x00000002 = Normal (user selected)
uint32_t timeout;
char launcher_xbe_path[64];
char title_xbe_path[64];
uint8_t padding[3072 - 140];
};</pre>
=== Type 0x00000001: Switch to dashboard ===
Will reboot to the [[Dashboard]].
<pre>struct LaunchData00000001 {
uint32_t reason;
uint32_t context;
uint32_t parameters[2];
uint8_t padding[3072 - 16];
};</pre>
{| class="wikitable"
!<code>reason</code>
!<code>parameters[0]</code>
!<code>parameters[1]</code>
!Note
|-
|0 = Show Dashboard
|
|
|-
|rowspan="5"|1 = Error
|1 = Invalid XBE
|
|
|-
|2 = Invalid Harddrive
|
|
|-
|3 = Region
|
|
|-
|4 = Parental control
|
|
|-
|5 = Media type bad
|Rating which caused this error
|
|-
|2 = Savedata
|
|
|
|-
|rowspan="5"|3 = Settings (flags)
|0x01 = Clock
|
|
|-
|0x02 = Timezone
|
|
|-
|0x04 = Language
|
|
|-
|0x08 = Video
|
|
|-
|0x10 = Audio
|
|
|-
|4 = Music
|
|
|
|-
|5
|
|
|
|-
|6 = Network Configuration
|
|
|
|-
|7 = Create new account
|
|
|
|-
|8 = MessageServerInfo
|
|
|
|-
|rowspan="4"|9 = Show policies (flags)
|0x01 = Subscription agreement
|
|
|-
|0x02 = Terms of use
|
|
|-
|0x04 = Code of conduct
|
|
|-
|0x08 = Privacy statement
|
|
|-
|10 = Online menu
|
|
|
|-
|11 = Force change of account name
|
|
|
|-
|12 = Force change of billing information
|
|
|
|}
=== Type 0x00000002: Switch from dashboard ===
This passes back the context which was originally passed to the dashboard.
<pre>struct LaunchData00000002 {
uint32_t context;
uint8_t padding[3072 - 4];
};</pre>
=== Type 0x00000003: Run from debugger ===
<pre>struct LaunchData00000003 {
char command_line[3072];
};</pre>
=== Type 0x00000004: Switch to title update ===
=== Type 0x00000006: Switch from title update ===
<pre>struct LaunchData00000006 {
uint32_t context;
uint32_t hr; // Microsoft result code
char padding[3072 - 8];
};</pre>
=== Type 0xFFFFFFFF: None ===
<code>launch_data</code> remains unused.
17573da13e0e913c794eb30959afd3253999e639
File:Fatal Error 13.png
6
3712
5274
2017-05-22T13:11:52Z
JayFoxRox
2
Xbox Fatal Error screen showing error 13
wikitext
text/x-wiki
Xbox Fatal Error screen showing error 13
6733e674c56d117a8e7fbd7a2c4714f7ca0f2afd
Fatal Error
0
3710
5275
5271
2017-05-22T13:13:57Z
JayFoxRox
2
Added screenshot
wikitext
text/x-wiki
These are the errors which will be displayed [[File:Fatal_Error_13.png|300px|thumb|right|Fatal Error 13 being displayed]]
{| class="wikitable"
!Value (2 digit decimal)
!Meaning
|-
|00
|No error (used internally to clear error flags from EEPROM)
|-
|01
|
|-
|02
|EEPROM Checksum failure
|-
|03
|
|-
|04
|RAM bad
|-
|05
|Harddrive not locked
|-
|06
|Unable to unlock Harddrive
|-
|07
|Harddrive unresponsive{{citation needed}}
|-
|08
|Harddrive missing
|-
|09
|Wrong Harddrive{{citation needed}}
|-
|10
|DVD Drive unresponsive
|-
|11
|DVD Drive missing
|-
|12
|Wrong DVD Drive{{citation needed}}
|-
|13
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 0</code> (MainMenu)
|-
|14
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 1</code> (Error)
|-
|15
|
|-
|16
|Dashboard settings error{{citation needed}}
|-
|17
|
|-
|18
|
|-
|19
|
|-
|20
|Dashboard failed to launch, but DVD security check was successful
|-
|21
|Used to manually display fatal error after reboot (on purpose)
|}
548c642ef346480aa2ac65d28dc8c4512a31fac2
Kernel
0
3678
5276
5073
2017-05-22T13:16:41Z
JayFoxRox
2
JayFoxRox moved page [[Operating System]] to [[Kernel]]: OS was too vague
wikitext
text/x-wiki
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/RtlSnprintf]]
|361
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
8e56eb4e69266eef10a22ae30e06453ed1d75878
Operating System
0
3713
5277
2017-05-22T13:16:41Z
JayFoxRox
2
JayFoxRox moved page [[Operating System]] to [[Kernel]]: OS was too vague
wikitext
text/x-wiki
#REDIRECT [[Kernel]]
28becd4c631146ed076fc578d2a51510c07a7972
Tech Deck Dude Bare Knuckle Grind
0
3714
5278
2017-05-22T14:15:33Z
JayFoxRox
2
Created page with "This is an unreleased game for the original Xbox. The same engine was to be used for [[Games/Rocket Power: Zero Gravity Zone]] and [[Games/Sonic Extreme]] [https://www.youtube..."
wikitext
text/x-wiki
This is an unreleased game for the original Xbox.
The same engine was to be used for [[Games/Rocket Power: Zero Gravity Zone]] and [[Games/Sonic Extreme]] [https://www.youtube.com/watch?v=H6lXV1YNjVA].
4 versions of the game were released as "Digital Playset" for PC [https://www.youtube.com/watch?v=s4yIQkU5PZs]:
* Tech Deck Dude Bare Knuckle Grind Fareast-Town
* Tech Deck Dude Bare Knuckle Grind Down-Town
* Tech Deck Dude Bare Knuckle Grind Freak-Town
* Tech Deck Dude Bare Knuckle Grind Space-Town
= Rocket Power: Zero Gravity Zone =
https://www.unseen64.net/2009/10/14/rocket-power-zero-gravity-zone-ps2-xbox-gamecube-cancelled/|
= Sonic Extreme =
https://www.unseen64.net/2011/06/03/sonic-extreme-xbox-pitch-prototype/
327c651eead23d790b8c677b09ae847e171c7fa1
5289
5278
2017-05-22T14:55:44Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
This is an unreleased game for the original Xbox.
The same engine was to be used for [[Games/Rocket Power: Zero Gravity Zone]] and [[Games/Sonic Extreme]] [https://www.youtube.com/watch?v=H6lXV1YNjVA].
4 versions of the game were released as "Digital Playset" for PC [https://www.youtube.com/watch?v=s4yIQkU5PZs]:
* Tech Deck Dude Bare Knuckle Grind Fareast-Town
* Tech Deck Dude Bare Knuckle Grind Down-Town
* Tech Deck Dude Bare Knuckle Grind Freak-Town
* Tech Deck Dude Bare Knuckle Grind Space-Town
= Rocket Power: Zero Gravity Zone =
https://www.unseen64.net/2009/10/14/rocket-power-zero-gravity-zone-ps2-xbox-gamecube-cancelled/|
= Sonic Extreme =
https://www.unseen64.net/2011/06/03/sonic-extreme-xbox-pitch-prototype/
6e762a0ab72e8b68a0c48231c9c0f84b0ce33ea2
5290
5289
2017-05-22T14:56:01Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
This is an unreleased game for the original Xbox.
The same engine was to be used for [[Rocket Power: Zero Gravity Zone]] and [[Sonic Extreme]] [https://www.youtube.com/watch?v=H6lXV1YNjVA].
4 versions of the game were released as "Digital Playset" for PC [https://www.youtube.com/watch?v=s4yIQkU5PZs]:
* Tech Deck Dude Bare Knuckle Grind Fareast-Town
* Tech Deck Dude Bare Knuckle Grind Down-Town
* Tech Deck Dude Bare Knuckle Grind Freak-Town
* Tech Deck Dude Bare Knuckle Grind Space-Town
= Rocket Power: Zero Gravity Zone =
https://www.unseen64.net/2009/10/14/rocket-power-zero-gravity-zone-ps2-xbox-gamecube-cancelled/|
= Sonic Extreme =
https://www.unseen64.net/2011/06/03/sonic-extreme-xbox-pitch-prototype/
b3df2a519ae3625ad8d283c45e280f50601df6c0
5295
5290
2017-05-22T14:59:28Z
JayFoxRox
2
JayFoxRox moved page [[Games/Tech Deck Dude Bare Knuckle Grind]] to [[Tech Deck Dude Bare Knuckle Grind]] without leaving a redirect
wikitext
text/x-wiki
{{Game}}
This is an unreleased game for the original Xbox.
The same engine was to be used for [[Rocket Power: Zero Gravity Zone]] and [[Sonic Extreme]] [https://www.youtube.com/watch?v=H6lXV1YNjVA].
4 versions of the game were released as "Digital Playset" for PC [https://www.youtube.com/watch?v=s4yIQkU5PZs]:
* Tech Deck Dude Bare Knuckle Grind Fareast-Town
* Tech Deck Dude Bare Knuckle Grind Down-Town
* Tech Deck Dude Bare Knuckle Grind Freak-Town
* Tech Deck Dude Bare Knuckle Grind Space-Town
= Rocket Power: Zero Gravity Zone =
https://www.unseen64.net/2009/10/14/rocket-power-zero-gravity-zone-ps2-xbox-gamecube-cancelled/|
= Sonic Extreme =
https://www.unseen64.net/2011/06/03/sonic-extreme-xbox-pitch-prototype/
b3df2a519ae3625ad8d283c45e280f50601df6c0
Rocket Power: Zero Gravity Zone
0
3715
5279
2017-05-22T14:17:54Z
JayFoxRox
2
Redirected page to [[Games/Tech Deck Dude Bare Knuckle Grind#Rocket Power: Zero Gravity Zone]]
wikitext
text/x-wiki
#REDIRECT [[Games/Tech Deck Dude Bare Knuckle Grind#Rocket_Power:_Zero_Gravity_Zone]]
374f657e3cdd20f36c578f70947e8a2e11e725d1
5296
5279
2017-05-22T14:59:53Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
#REDIRECT [[Tech Deck Dude Bare Knuckle Grind#Rocket_Power:_Zero_Gravity_Zone]]
c6346ba7b37317c559623dde3f42eb62db5c02cc
5297
5296
2017-05-22T15:00:06Z
JayFoxRox
2
Redirected page to [[Tech Deck Dude Bare Knuckle Grind#Rocket Power: Zero Gravity Zone]]
wikitext
text/x-wiki
#REDIRECT [[Tech Deck Dude Bare Knuckle Grind#Rocket_Power:_Zero_Gravity_Zone]]
{{Game}}
f229b06b135e4dc33c9a90344f41ee1384743ade
5298
5297
2017-05-22T15:00:15Z
JayFoxRox
2
JayFoxRox moved page [[Games/Rocket Power: Zero Gravity Zone]] to [[Rocket Power: Zero Gravity Zone]] without leaving a redirect
wikitext
text/x-wiki
#REDIRECT [[Tech Deck Dude Bare Knuckle Grind#Rocket_Power:_Zero_Gravity_Zone]]
{{Game}}
f229b06b135e4dc33c9a90344f41ee1384743ade
Sonic Extreme
0
3716
5280
2017-05-22T14:18:25Z
JayFoxRox
2
Redirected page to [[Games/Tech Deck Dude Bare Knuckle Grind#Sonic Extreme]]
wikitext
text/x-wiki
#REDIRECT [[Games/Tech Deck Dude Bare Knuckle Grind#Sonic Extreme]]
55fa15317ca7a915f9541a7d6cb316a6081f771b
5299
5280
2017-05-22T15:00:43Z
JayFoxRox
2
Redirected page to [[Tech Deck Dude Bare Knuckle Grind#Sonic Extreme]]
wikitext
text/x-wiki
#REDIRECT [[Tech Deck Dude Bare Knuckle Grind#Sonic Extreme]]
{{Game}}
be054a6c6228c4b1c4c9fc06a957d92f9253eebb
5300
5299
2017-05-22T15:00:52Z
JayFoxRox
2
JayFoxRox moved page [[Games/Sonic Extreme]] to [[Sonic Extreme]] without leaving a redirect
wikitext
text/x-wiki
#REDIRECT [[Tech Deck Dude Bare Knuckle Grind#Sonic Extreme]]
{{Game}}
be054a6c6228c4b1c4c9fc06a957d92f9253eebb
Template:Game
10
3717
5281
2017-05-22T14:39:39Z
JayFoxRox
2
Creating game template
wikitext
text/x-wiki
[[Category:Games]]
1f0be2923d4179a065c9d4a005a02daf12dcb217
5283
5281
2017-05-22T14:40:38Z
JayFoxRox
2
wikitext
text/x-wiki
<includeonly>[[Category:Games]]</includeonly>
98267a1cda85ccefc1e1edc9468d14dde779218d
Azurik: Rise of Perathia
0
3685
5282
5046
2017-05-22T14:40:04Z
JayFoxRox
2
Testing template
wikitext
text/x-wiki
{{Game}}
=== Known tricky behaviour ===
==== Skinning code / Shader rounding mode ====
This game depends on correct GPU rounding. If an emulator suffers from issues with non-exact rounding in the shaders which do the skinning / skeletal animation the character models will be very broken.
[[File:http://i.imgur.com/tpmLpjP.png]]
IIRC Code is like:
A0 = c[113].x + c[113].z = 18
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].x + c[113].z = 21
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].y * v2
*do stuff with c[96+A0] to c[98+A0]*
c[113] is vec4(15, 765, 3, 0). 765 = 3*255.
v2 is GL_UNSIGNED_BYTE, normalized => v2 = raw/255.
A0 = 765 * raw/255 = 3*raw.
This should all be working, but it's not. [[NV2A/Vertex Shader]] does round-to-zero. Behaviour for GLSL and other modern graphic APIs is undefined..
To work around this rounding issue <code>A0 += 1.0/255.0</code> can be used as a temporary hack
7d2e3cd84529b1b599bbd444d77ac2b8fbc72cf1
5284
5282
2017-05-22T14:48:07Z
JayFoxRox
2
JayFoxRox moved page [[Games/Azurik: Rise of Perathia]] to [[Game:Azurik: Rise of Perathia]]
wikitext
text/x-wiki
{{Game}}
=== Known tricky behaviour ===
==== Skinning code / Shader rounding mode ====
This game depends on correct GPU rounding. If an emulator suffers from issues with non-exact rounding in the shaders which do the skinning / skeletal animation the character models will be very broken.
[[File:http://i.imgur.com/tpmLpjP.png]]
IIRC Code is like:
A0 = c[113].x + c[113].z = 18
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].x + c[113].z = 21
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].y * v2
*do stuff with c[96+A0] to c[98+A0]*
c[113] is vec4(15, 765, 3, 0). 765 = 3*255.
v2 is GL_UNSIGNED_BYTE, normalized => v2 = raw/255.
A0 = 765 * raw/255 = 3*raw.
This should all be working, but it's not. [[NV2A/Vertex Shader]] does round-to-zero. Behaviour for GLSL and other modern graphic APIs is undefined..
To work around this rounding issue <code>A0 += 1.0/255.0</code> can be used as a temporary hack
7d2e3cd84529b1b599bbd444d77ac2b8fbc72cf1
5291
5284
2017-05-22T14:56:51Z
JayFoxRox
2
JayFoxRox moved page [[Game:Azurik: Rise of Perathia]] to [[Azurik: Rise of Perathia]] without leaving a redirect
wikitext
text/x-wiki
{{Game}}
=== Known tricky behaviour ===
==== Skinning code / Shader rounding mode ====
This game depends on correct GPU rounding. If an emulator suffers from issues with non-exact rounding in the shaders which do the skinning / skeletal animation the character models will be very broken.
[[File:http://i.imgur.com/tpmLpjP.png]]
IIRC Code is like:
A0 = c[113].x + c[113].z = 18
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].x + c[113].z = 21
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].y * v2
*do stuff with c[96+A0] to c[98+A0]*
c[113] is vec4(15, 765, 3, 0). 765 = 3*255.
v2 is GL_UNSIGNED_BYTE, normalized => v2 = raw/255.
A0 = 765 * raw/255 = 3*raw.
This should all be working, but it's not. [[NV2A/Vertex Shader]] does round-to-zero. Behaviour for GLSL and other modern graphic APIs is undefined..
To work around this rounding issue <code>A0 += 1.0/255.0</code> can be used as a temporary hack
7d2e3cd84529b1b599bbd444d77ac2b8fbc72cf1
5292
5291
2017-05-22T14:57:05Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
=== Known tricky behaviour ===
==== Skinning code / Shader rounding mode ====
This game depends on correct GPU rounding. If an emulator suffers from issues with non-exact rounding in the shaders which do the skinning / skeletal animation the character models will be very broken.
[[File:http://i.imgur.com/tpmLpjP.png]]
IIRC Code is like:
A0 = c[113].x + c[113].z = 18
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].x + c[113].z = 21
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].y * v2
*do stuff with c[96+A0] to c[98+A0]*
c[113] is vec4(15, 765, 3, 0). 765 = 3*255.
v2 is GL_UNSIGNED_BYTE, normalized => v2 = raw/255.
A0 = 765 * raw/255 = 3*raw.
This should all be working, but it's not. [[NV2A/Vertex Shader]] does round-to-zero. Behaviour for GLSL and other modern graphic APIs is undefined..
To work around this rounding issue <code>A0 += 1.0/255.0</code> can be used as a temporary hack
52cf39fb9b30a86a6afac881d59542ea74b16e81
Tony Hawk's Pro Skater 2x
0
13
5286
30
2017-05-22T14:52:33Z
JayFoxRox
2
JayFoxRox moved page [[Games/Tony Hawk's Pro Skater 2x]] to [[Tony Hawk's Pro Skater 2x]] without leaving a redirect
wikitext
text/x-wiki
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
==== World ====
==== Skater ====
Shader:
<code>
/* Slot 0: 0x00000000 0x00320000 0x0C36106C 0x21200FF8 */
MOV(R2,w, c[144].x);
/* Slot 1: 0x00000000 0x005600FF 0x2554186C 0x21300FF8 */
MUL(R3,w, R2.w, c[176].z);
/* Slot 2: 0x00000000 0x00960000 0x0C3413FC 0xDE400FF8 */
MAD(R4,xyz, c[176].x, v0.xyz, R3.w);
/* Slot 3: 0x00000000 0x007002AA 0x0C361400 0x28500FF8 */
ADD(R5,x, c[128].z, -v1.x);
/* Slot 4: 0x00000000 0x0ACC001B 0x0836186D 0x18640FF8 */
DPH(R6,x, v0, c[96]);
EXP(R1,y, R4.x);
/* Slot 5: 0x00000000 0x00CC201B 0x0836186C 0x24600FF8 */
DPH(R6,y, v0, c[97]);
/* Slot 6: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 7: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 8: 0x00000000 0x00B0801A 0x1436186C 0x28700FF8 */
DP3(R7,x, R1.xyz, c[132]);
/* Slot 9: 0x00000000 0x0ACC401B 0x08361955 0x12640FF8 */
DPH(R6,z, v0, c[98]);
EXP(R1,y, R4.y);
/* Slot 10: 0x00000000 0x00CC601B 0x0836186C 0x28800FF8 */
DPH(R8,x, v0, c[99]);
/* Slot 11: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 12: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 13: 0x00000000 0x00B0801A 0x1436186C 0x24700FF8 */
DP3(R7,y, R1.xyz, c[132]);
/* Slot 14: 0x00000000 0x0ACC801B 0x08361AA9 0x14840FF8 */
DPH(R8,y, v0, c[100]);
EXP(R1,y, R4.z);
/* Slot 15: 0x00000000 0x00CCA01B 0x0836186C 0x22800FF8 */
DPH(R8,z, v0, c[101]);
/* Slot 16: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 17: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 18: 0x00000000 0x00B0801A 0x1436186C 0x22700FF8 */
DP3(R7,z, R1.xyz, c[132]);
/* Slot 19: 0x00000000 0x0040021A 0x6400106C 0x2E900FF8 */
MUL(R9,xyz, R6.xyz, v1.x);
/* Slot 20: 0x00000000 0x0080001A 0x8400A86A 0x5EA00FF8 */
MAD(R10,xyz, R8.xyz, R5.x, R9.xyz);
/* Slot 21: 0x00000000 0x00560655 0x08AA186C 0x21B00FF8 */
MUL(R11,w, v3.y, c[176].y);
/* Slot 22: 0x00000000 0x005780FF 0xB5FE186C 0x21000FF8 */
MUL(R0,w, R11.w, c[188].w);
/* Slot 23: 0x00000000 0x0080001A 0x75FE086A 0x9E200FF8 */
MAD(R2,xyz, R7.xyz, R0.w, R10.xyz);
/* Slot 24: 0x00000000 0x0097871A 0x0D541068 0x9E300FF8 */
MAD(R3,xyz, -c[188].xyz, v3.z, R2.xyz);
/* Slot 25: 0x00000000 0x00AC041B 0x0836186C 0x28400FF8 */
DP3(R4,x, v2, c[96]);
/* Slot 26: 0x00000000 0x00AC241B 0x0836186C 0x24400FF8 */
DP3(R4,y, v2, c[97]);
/* Slot 27: 0x00000000 0x00AC441B 0x0836186C 0x22400FF8 */
DP3(R4,z, v2, c[98]);
/* Slot 28: 0x00000000 0x00AC641B 0x0836186C 0x28600FF8 */
DP3(R6,x, v2, c[99]);
/* Slot 29: 0x00000000 0x00AC841B 0x0836186C 0x24600FF8 */
DP3(R6,y, v2, c[100]);
/* Slot 30: 0x00000000 0x00ACA41B 0x0836186C 0x22600FF8 */
DP3(R6,z, v2, c[101]);
/* Slot 31: 0x00000000 0x0040021A 0x4400106C 0x2E700FF8 */
MUL(R7,xyz, R4.xyz, v1.x);
/* Slot 32: 0x00000000 0x0080001A 0x6400A869 0xDE800FF8 */
MAD(R8,xyz, R6.xyz, R5.x, R7.xyz);
/* Slot 33: 0x00000000 0x00CEA01B 0x3436186C 0x20708800 */
DPH(oPos,x, R3, c[117]);
/* Slot 34: 0x00000000 0x00CEC01B 0x3436186C 0x20704800 */
DPH(oPos,y, R3, c[118]);
/* Slot 35: 0x00000000 0x00CEE01B 0x3436186C 0x20702800 */
DPH(oPos,z, R3, c[119]);
/* Slot 36: 0x00000000 0x00CF001B 0x3436186C 0x20701800 */
DPH(oPos,w, R3, c[120]);
/* Slot 37: 0x00000000 0x00A0001A 0x8435086C 0x21800FF8 */
DP3(R8,w, R8.xyz, R8.xyz);
/* Slot 38: 0x00000000 0x00CD321B 0x0836186C 0x20708848 */
DPH(oT0,x, v9, c[105]);
/* Slot 39: 0x00000000 0x0833401B 0x0C3613FE 0x1F910FF8 */
MOV(R9,xyzw, c[154]);
RSQ(R1,w, R8.w);
/* Slot 40: 0x00000000 0x00CD521B 0x0836186C 0x20704848 */
DPH(oT0,y, v9, c[106]);
/* Slot 41: 0x00000000 0x0040001A 0x85FE286C 0x2EA00FF8 */
MUL(R10,xyz, R8.xyz, R1.w);
/* Slot 42: 0x00000000 0x00B3001B 0xA636186C 0x28B00FF8 */
DP3(R11,x, R10, -c[152]);
/* Slot 43: 0x00000000 0x00B3201B 0xA636186C 0x24B00FF8 */
DP3(R11,y, R10, -c[153]);
/* Slot 44: 0x00000000 0x00CF001B 0x3436186C 0x20708828 */
DPH(oFog,x, R3, c[120]);
/* Slot 45: 0x00000000 0x01500015 0xB400186C 0x2C000FF8 */
MAX(R0,xy, R11.xy, c[128].x);
/* Slot 46: 0x00000000 0x00936000 0x0436186E 0x5F200FF8 */
MAD(R2,xyzw, R0.x, c[155], R9);
/* Slot 47: 0x00000000 0x00938055 0x0436186C 0x9F300FF8 */
MAD(R3,xyzw, R0.y, c[156], R2);
/* Slot 48: 0x00000000 0x0647401B 0xC4361BFF 0x1078E800 */
MUL(oPos,xyz, R12, c[58]);
RCC(R1,x, R12.w);
/* Slot 49: 0x00000000 0x0057401B 0x3436186C 0x2070F818 */
MUL(oD0,xyzw, R3, c[186]);
/* Slot 50: 0x00000000 0x0087601B 0xC400286C 0x3070E801 */
MAD(oPos,xyz, R12, R1.x, c[59]);
</code>
==== HUD ====
==== Shadow ====
===== Skater =====
Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
====== Shader ======
<code>
/* Slot 0: 0x00000000 0x007002AA 0x0C361400 0x28200FF8 */
ADD(R2,x, c[128].z, -v1.x);
/* Slot 1: 0x00000000 0x00CC001B 0x0836186C 0x28300FF8 */
DPH(R3,x, v0, c[96]);
/* Slot 2: 0x00000000 0x00CC201B 0x0836186C 0x24300FF8 */
DPH(R3,y, v0, c[97]);
/* Slot 3: 0x00000000 0x00CC401B 0x0836186C 0x22300FF8 */
DPH(R3,z, v0, c[98]);
/* Slot 4: 0x00000000 0x00CC601B 0x0836186C 0x28400FF8 */
DPH(R4,x, v0, c[99]);
/* Slot 5: 0x00000000 0x00CC801B 0x0836186C 0x24400FF8 */
DPH(R4,y, v0, c[100]);
/* Slot 6: 0x00000000 0x00CCA01B 0x0836186C 0x22400FF8 */
DPH(R4,z, v0, c[101]);
/* Slot 7: 0x00000000 0x0040021A 0x3400106C 0x2E500FF8 */
MUL(R5,xyz, R3.xyz, v1.x);
/* Slot 8: 0x00000000 0x0080001A 0x44004869 0x5E600FF8 */
MAD(R6,xyz, R4.xyz, R2.x, R5.xyz);
/* Slot 9: 0x00000000 0x00CEA01B 0x6436186C 0x20708800 */
DPH(oPos,x, R6, c[117]);
/* Slot 10: 0x00000000 0x00CEC01B 0x6436186C 0x20704800 */
DPH(oPos,y, R6, c[118]);
/* Slot 11: 0x00000000 0x00CEE01B 0x6436186C 0x20702800 */
DPH(oPos,z, R6, c[119]);
/* Slot 12: 0x00000000 0x00CF001B 0x6436186C 0x20701800 */
DPH(oPos,w, R6, c[120]);
/* Slot 13: 0x00000000 0x0647401B 0xC4361BFF 0x1078E800 */
MUL(oPos,xyz, R12, c[58]);
RCC(R1,x, R12.w);
/* Slot 14: 0x00000000 0x0087601B 0xC400286C 0x3070E801 */
MAD(oPos,xyz, R12, R1.x, c[59]);
</code>
8383f255d00fa5f862293f7f8d4923302f02f5fa
5302
5286
2017-05-22T15:04:50Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
==== World ====
==== Skater ====
Shader:
<code>
/* Slot 0: 0x00000000 0x00320000 0x0C36106C 0x21200FF8 */
MOV(R2,w, c[144].x);
/* Slot 1: 0x00000000 0x005600FF 0x2554186C 0x21300FF8 */
MUL(R3,w, R2.w, c[176].z);
/* Slot 2: 0x00000000 0x00960000 0x0C3413FC 0xDE400FF8 */
MAD(R4,xyz, c[176].x, v0.xyz, R3.w);
/* Slot 3: 0x00000000 0x007002AA 0x0C361400 0x28500FF8 */
ADD(R5,x, c[128].z, -v1.x);
/* Slot 4: 0x00000000 0x0ACC001B 0x0836186D 0x18640FF8 */
DPH(R6,x, v0, c[96]);
EXP(R1,y, R4.x);
/* Slot 5: 0x00000000 0x00CC201B 0x0836186C 0x24600FF8 */
DPH(R6,y, v0, c[97]);
/* Slot 6: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 7: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 8: 0x00000000 0x00B0801A 0x1436186C 0x28700FF8 */
DP3(R7,x, R1.xyz, c[132]);
/* Slot 9: 0x00000000 0x0ACC401B 0x08361955 0x12640FF8 */
DPH(R6,z, v0, c[98]);
EXP(R1,y, R4.y);
/* Slot 10: 0x00000000 0x00CC601B 0x0836186C 0x28800FF8 */
DPH(R8,x, v0, c[99]);
/* Slot 11: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 12: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 13: 0x00000000 0x00B0801A 0x1436186C 0x24700FF8 */
DP3(R7,y, R1.xyz, c[132]);
/* Slot 14: 0x00000000 0x0ACC801B 0x08361AA9 0x14840FF8 */
DPH(R8,y, v0, c[100]);
EXP(R1,y, R4.z);
/* Slot 15: 0x00000000 0x00CCA01B 0x0836186C 0x22800FF8 */
DPH(R8,z, v0, c[101]);
/* Slot 16: 0x00000000 0x00400055 0x14AA286C 0x28100FF8 */
MUL(R1,x, R1.y, R1.y);
/* Slot 17: 0x00000000 0x00400000 0x14AA286C 0x22100FF8 */
MUL(R1,z, R1.x, R1.y);
/* Slot 18: 0x00000000 0x00B0801A 0x1436186C 0x22700FF8 */
DP3(R7,z, R1.xyz, c[132]);
/* Slot 19: 0x00000000 0x0040021A 0x6400106C 0x2E900FF8 */
MUL(R9,xyz, R6.xyz, v1.x);
/* Slot 20: 0x00000000 0x0080001A 0x8400A86A 0x5EA00FF8 */
MAD(R10,xyz, R8.xyz, R5.x, R9.xyz);
/* Slot 21: 0x00000000 0x00560655 0x08AA186C 0x21B00FF8 */
MUL(R11,w, v3.y, c[176].y);
/* Slot 22: 0x00000000 0x005780FF 0xB5FE186C 0x21000FF8 */
MUL(R0,w, R11.w, c[188].w);
/* Slot 23: 0x00000000 0x0080001A 0x75FE086A 0x9E200FF8 */
MAD(R2,xyz, R7.xyz, R0.w, R10.xyz);
/* Slot 24: 0x00000000 0x0097871A 0x0D541068 0x9E300FF8 */
MAD(R3,xyz, -c[188].xyz, v3.z, R2.xyz);
/* Slot 25: 0x00000000 0x00AC041B 0x0836186C 0x28400FF8 */
DP3(R4,x, v2, c[96]);
/* Slot 26: 0x00000000 0x00AC241B 0x0836186C 0x24400FF8 */
DP3(R4,y, v2, c[97]);
/* Slot 27: 0x00000000 0x00AC441B 0x0836186C 0x22400FF8 */
DP3(R4,z, v2, c[98]);
/* Slot 28: 0x00000000 0x00AC641B 0x0836186C 0x28600FF8 */
DP3(R6,x, v2, c[99]);
/* Slot 29: 0x00000000 0x00AC841B 0x0836186C 0x24600FF8 */
DP3(R6,y, v2, c[100]);
/* Slot 30: 0x00000000 0x00ACA41B 0x0836186C 0x22600FF8 */
DP3(R6,z, v2, c[101]);
/* Slot 31: 0x00000000 0x0040021A 0x4400106C 0x2E700FF8 */
MUL(R7,xyz, R4.xyz, v1.x);
/* Slot 32: 0x00000000 0x0080001A 0x6400A869 0xDE800FF8 */
MAD(R8,xyz, R6.xyz, R5.x, R7.xyz);
/* Slot 33: 0x00000000 0x00CEA01B 0x3436186C 0x20708800 */
DPH(oPos,x, R3, c[117]);
/* Slot 34: 0x00000000 0x00CEC01B 0x3436186C 0x20704800 */
DPH(oPos,y, R3, c[118]);
/* Slot 35: 0x00000000 0x00CEE01B 0x3436186C 0x20702800 */
DPH(oPos,z, R3, c[119]);
/* Slot 36: 0x00000000 0x00CF001B 0x3436186C 0x20701800 */
DPH(oPos,w, R3, c[120]);
/* Slot 37: 0x00000000 0x00A0001A 0x8435086C 0x21800FF8 */
DP3(R8,w, R8.xyz, R8.xyz);
/* Slot 38: 0x00000000 0x00CD321B 0x0836186C 0x20708848 */
DPH(oT0,x, v9, c[105]);
/* Slot 39: 0x00000000 0x0833401B 0x0C3613FE 0x1F910FF8 */
MOV(R9,xyzw, c[154]);
RSQ(R1,w, R8.w);
/* Slot 40: 0x00000000 0x00CD521B 0x0836186C 0x20704848 */
DPH(oT0,y, v9, c[106]);
/* Slot 41: 0x00000000 0x0040001A 0x85FE286C 0x2EA00FF8 */
MUL(R10,xyz, R8.xyz, R1.w);
/* Slot 42: 0x00000000 0x00B3001B 0xA636186C 0x28B00FF8 */
DP3(R11,x, R10, -c[152]);
/* Slot 43: 0x00000000 0x00B3201B 0xA636186C 0x24B00FF8 */
DP3(R11,y, R10, -c[153]);
/* Slot 44: 0x00000000 0x00CF001B 0x3436186C 0x20708828 */
DPH(oFog,x, R3, c[120]);
/* Slot 45: 0x00000000 0x01500015 0xB400186C 0x2C000FF8 */
MAX(R0,xy, R11.xy, c[128].x);
/* Slot 46: 0x00000000 0x00936000 0x0436186E 0x5F200FF8 */
MAD(R2,xyzw, R0.x, c[155], R9);
/* Slot 47: 0x00000000 0x00938055 0x0436186C 0x9F300FF8 */
MAD(R3,xyzw, R0.y, c[156], R2);
/* Slot 48: 0x00000000 0x0647401B 0xC4361BFF 0x1078E800 */
MUL(oPos,xyz, R12, c[58]);
RCC(R1,x, R12.w);
/* Slot 49: 0x00000000 0x0057401B 0x3436186C 0x2070F818 */
MUL(oD0,xyzw, R3, c[186]);
/* Slot 50: 0x00000000 0x0087601B 0xC400286C 0x3070E801 */
MAD(oPos,xyz, R12, R1.x, c[59]);
</code>
==== HUD ====
==== Shadow ====
===== Skater =====
Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
====== Shader ======
<code>
/* Slot 0: 0x00000000 0x007002AA 0x0C361400 0x28200FF8 */
ADD(R2,x, c[128].z, -v1.x);
/* Slot 1: 0x00000000 0x00CC001B 0x0836186C 0x28300FF8 */
DPH(R3,x, v0, c[96]);
/* Slot 2: 0x00000000 0x00CC201B 0x0836186C 0x24300FF8 */
DPH(R3,y, v0, c[97]);
/* Slot 3: 0x00000000 0x00CC401B 0x0836186C 0x22300FF8 */
DPH(R3,z, v0, c[98]);
/* Slot 4: 0x00000000 0x00CC601B 0x0836186C 0x28400FF8 */
DPH(R4,x, v0, c[99]);
/* Slot 5: 0x00000000 0x00CC801B 0x0836186C 0x24400FF8 */
DPH(R4,y, v0, c[100]);
/* Slot 6: 0x00000000 0x00CCA01B 0x0836186C 0x22400FF8 */
DPH(R4,z, v0, c[101]);
/* Slot 7: 0x00000000 0x0040021A 0x3400106C 0x2E500FF8 */
MUL(R5,xyz, R3.xyz, v1.x);
/* Slot 8: 0x00000000 0x0080001A 0x44004869 0x5E600FF8 */
MAD(R6,xyz, R4.xyz, R2.x, R5.xyz);
/* Slot 9: 0x00000000 0x00CEA01B 0x6436186C 0x20708800 */
DPH(oPos,x, R6, c[117]);
/* Slot 10: 0x00000000 0x00CEC01B 0x6436186C 0x20704800 */
DPH(oPos,y, R6, c[118]);
/* Slot 11: 0x00000000 0x00CEE01B 0x6436186C 0x20702800 */
DPH(oPos,z, R6, c[119]);
/* Slot 12: 0x00000000 0x00CF001B 0x6436186C 0x20701800 */
DPH(oPos,w, R6, c[120]);
/* Slot 13: 0x00000000 0x0647401B 0xC4361BFF 0x1078E800 */
MUL(oPos,xyz, R12, c[58]);
RCC(R1,x, R12.w);
/* Slot 14: 0x00000000 0x0087601B 0xC400286C 0x3070E801 */
MAD(oPos,xyz, R12, R1.x, c[59]);
</code>
80eabe4335b139faf09d0512c6488c6b73a4ff07
Kung Fu Chaos
0
14
5287
5211
2017-05-22T14:52:56Z
JayFoxRox
2
JayFoxRox moved page [[Games/Kung Fu Chaos]] to [[Kung Fu Chaos]] without leaving a redirect
wikitext
text/x-wiki
== Fullscreen blit shader ==
<pre>
v0.xy {
{0,0}
{0,1}
{1,1}
{1,0}
}
surfaceSize = {640,480}
clipRange = {0,16777215}
c[58] = { 320, -240, 16777215, 0 }
c[59] = { 320.53125, 240.53125, 0, 0}
c[100] = { 640, 480, 0, 5.06639553e-05}
c[101] = { 0, 0, 0, 1}
c[102] = {1/320, -1/240, 1, 1}
c[103] = { 1, -1, 0, 0}
c[104] = { 0, 0, 0, 0}
c[105] = { 320, -240, 16777215, 0 }
c[106] = { 320.53125, 240.53125, 0, 0}
/* Slot 0: 0x00000000 0x002D001B 0x0C36106C 0x28200FF8 */
// R2.x = 0.0;
MOV(R2,x, c[104]);
/* Slot 1: 0x00000000 0x002CC01B 0x0C36106C 0x2F900FF8 */
// R9 = {1/320, -1/240, 1, 1}
MOV(R9,xyzw, c[102]);
/* Slot 2: 0x00000000 0x024CE200 0x2636186C 0x2C50F81C */
// R5.xy = R2.x * { -1, +1 } // -> R5.xy = 0.0 .. FIXME: This makes no sense? R2.x was just set to zero?! [from C104.x !!]
// oD0 = v1
MUL(R5,xy, R2.x, -c[103]);
MOV(oD0,xyzw, v1);
/* Slot 3: 0x00000000 0x006CC0AA 0x0C36146C 0x98300FF8 */
ADD(R3,x, c[102].z, -R2); // -> R3.x = C[102].z = 1.0
/* Slot 4: 0x00000000 0x008CC000 0x242A1800 0xDC400FF8 */
MAD(R4,xy, R2.x, c[102].xy, R3.x); // -> R4.xy = R3.xx = {1,1}
/* Slot 5: 0x00000000 0x008D2000 0x242A1800 0xDC600FF8 */
MAD(R6,xy, R2.x, c[105].xy, R3.x); // -> R6.xy = R3.xx = {1,1}
/* Slot 6: 0x00000000 0x004D4000 0x242A186C 0x2C700FF8 */
MUL(R7,xy, R2.x, c[106].xy); // -> R7.xy = 0.0
/* Slot 7: 0x00000000 0x0080041B 0x0836886D 0x5C800FF8 */
MAD(R8,xy, v2, R4, R5); // -> R8 = v2 * R4 = v2
oT0.xy = R8 * R6 + R7 // -> v2
oT1.xy = R8 * R6 + R7 // -> v2
/* Slot 8: 0x00000000 0x004CA01A 0x0C37286C 0x2FA00FF8 */
MUL(R10,xyzw, c[101].xyz, R9);
/* Slot 11: 0x00000000 0x006CE01B 0xA436146C 0x3070F800 */
ADD(oPos,xyzw, R10, -c[103]);
/* Slot 12: 0x00000000 0x004C8015 0x942A186C 0x2CB00FF8 */
MUL(R11,xy, R9.xy, c[100].xy);
/* Slot 13: 0x00000000 0x00800015 0x082B6857 0x1070C800 */
MAD(oPos,xy, v0.xy, R11.xy, R12.xy);
SET FOG:
/* Slot 14: 0x00000000 0x004C80FF 0x0DFF886C 0x20708828 */
MUL(oFog,x, c[100].w, R12.w);
DO VIEWPORT TRANSFORM:
/* Slot 15: 0x00000000 0x0047401B 0xC436186C 0x2070C800 */
MUL(oPos,xy, R12, c[58]);
/* Slot 16: 0x00000000 0x0067601B 0xC436106C 0x3070C801 */
ADD(oPos,xy, R12, c[59]);
SPACE CONVERSION [XQEMU only]:
if (oPos.w == 0.0 || isinf(oPos.w)) {
vtx.inv_w = 1.0;
} else {
vtx.inv_w = 1.0 / oPos.w;
}
oPos.x = 2.0 * (oPos.x - surfaceSize.x * 0.5) / surfaceSize.x;
oPos.y = -2.0 * (oPos.y - surfaceSize.y * 0.5) / surfaceSize.y;
if (clipRange.y != clipRange.x) {
oPos.z = (oPos.z - 0.5 * (clipRange.x + clipRange.y)) / (0.5 * (clipRange.y - clipRange.x));
}
if (oPos.w <= 0.0) {
oPos.xyz *= oPos.w;
} else {
oPos.w = 1.0;
}
/* Make the world a happy place! */
#if 1
oFog.xyzw = vec4(1.0);
oPos.xy = v0.xy;
oPos.y *= -1.0;
oPos.z = 0.5;
oPos.w = 1.0;
vtx.inv_w = 1.0;
#endif
</pre>
8d488ea3b212db3fc0de6cc913976ea14d31e31d
5303
5287
2017-05-22T15:05:22Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
== Fullscreen blit shader ==
<pre>
v0.xy {
{0,0}
{0,1}
{1,1}
{1,0}
}
surfaceSize = {640,480}
clipRange = {0,16777215}
c[58] = { 320, -240, 16777215, 0 }
c[59] = { 320.53125, 240.53125, 0, 0}
c[100] = { 640, 480, 0, 5.06639553e-05}
c[101] = { 0, 0, 0, 1}
c[102] = {1/320, -1/240, 1, 1}
c[103] = { 1, -1, 0, 0}
c[104] = { 0, 0, 0, 0}
c[105] = { 320, -240, 16777215, 0 }
c[106] = { 320.53125, 240.53125, 0, 0}
/* Slot 0: 0x00000000 0x002D001B 0x0C36106C 0x28200FF8 */
// R2.x = 0.0;
MOV(R2,x, c[104]);
/* Slot 1: 0x00000000 0x002CC01B 0x0C36106C 0x2F900FF8 */
// R9 = {1/320, -1/240, 1, 1}
MOV(R9,xyzw, c[102]);
/* Slot 2: 0x00000000 0x024CE200 0x2636186C 0x2C50F81C */
// R5.xy = R2.x * { -1, +1 } // -> R5.xy = 0.0 .. FIXME: This makes no sense? R2.x was just set to zero?! [from C104.x !!]
// oD0 = v1
MUL(R5,xy, R2.x, -c[103]);
MOV(oD0,xyzw, v1);
/* Slot 3: 0x00000000 0x006CC0AA 0x0C36146C 0x98300FF8 */
ADD(R3,x, c[102].z, -R2); // -> R3.x = C[102].z = 1.0
/* Slot 4: 0x00000000 0x008CC000 0x242A1800 0xDC400FF8 */
MAD(R4,xy, R2.x, c[102].xy, R3.x); // -> R4.xy = R3.xx = {1,1}
/* Slot 5: 0x00000000 0x008D2000 0x242A1800 0xDC600FF8 */
MAD(R6,xy, R2.x, c[105].xy, R3.x); // -> R6.xy = R3.xx = {1,1}
/* Slot 6: 0x00000000 0x004D4000 0x242A186C 0x2C700FF8 */
MUL(R7,xy, R2.x, c[106].xy); // -> R7.xy = 0.0
/* Slot 7: 0x00000000 0x0080041B 0x0836886D 0x5C800FF8 */
MAD(R8,xy, v2, R4, R5); // -> R8 = v2 * R4 = v2
oT0.xy = R8 * R6 + R7 // -> v2
oT1.xy = R8 * R6 + R7 // -> v2
/* Slot 8: 0x00000000 0x004CA01A 0x0C37286C 0x2FA00FF8 */
MUL(R10,xyzw, c[101].xyz, R9);
/* Slot 11: 0x00000000 0x006CE01B 0xA436146C 0x3070F800 */
ADD(oPos,xyzw, R10, -c[103]);
/* Slot 12: 0x00000000 0x004C8015 0x942A186C 0x2CB00FF8 */
MUL(R11,xy, R9.xy, c[100].xy);
/* Slot 13: 0x00000000 0x00800015 0x082B6857 0x1070C800 */
MAD(oPos,xy, v0.xy, R11.xy, R12.xy);
SET FOG:
/* Slot 14: 0x00000000 0x004C80FF 0x0DFF886C 0x20708828 */
MUL(oFog,x, c[100].w, R12.w);
DO VIEWPORT TRANSFORM:
/* Slot 15: 0x00000000 0x0047401B 0xC436186C 0x2070C800 */
MUL(oPos,xy, R12, c[58]);
/* Slot 16: 0x00000000 0x0067601B 0xC436106C 0x3070C801 */
ADD(oPos,xy, R12, c[59]);
SPACE CONVERSION [XQEMU only]:
if (oPos.w == 0.0 || isinf(oPos.w)) {
vtx.inv_w = 1.0;
} else {
vtx.inv_w = 1.0 / oPos.w;
}
oPos.x = 2.0 * (oPos.x - surfaceSize.x * 0.5) / surfaceSize.x;
oPos.y = -2.0 * (oPos.y - surfaceSize.y * 0.5) / surfaceSize.y;
if (clipRange.y != clipRange.x) {
oPos.z = (oPos.z - 0.5 * (clipRange.x + clipRange.y)) / (0.5 * (clipRange.y - clipRange.x));
}
if (oPos.w <= 0.0) {
oPos.xyz *= oPos.w;
} else {
oPos.w = 1.0;
}
/* Make the world a happy place! */
#if 1
oFog.xyzw = vec4(1.0);
oPos.xy = v0.xy;
oPos.y *= -1.0;
oPos.z = 0.5;
oPos.w = 1.0;
vtx.inv_w = 1.0;
#endif
</pre>
8f881a1f86dee5ad5e2134cb605a10df75f54205
Xbe
0
3706
5288
5244
2017-05-22T14:54:25Z
JayFoxRox
2
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
f8947836c54ea266e143b40ea0dd3b9cc29ad8a3
Category:Games
14
3719
5293
2017-05-22T14:57:23Z
JayFoxRox
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Main Page
0
1
5294
5248
2017-05-22T14:59:10Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
** [[DVD Drive]]
** [[Hard Drive]]
** [[USB]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[Xbox Debug Monitor]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
[[:Category:Games|Games]]
* [[Engine List]]
Emulation
* [[Emulators]]
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
7c1e95a71ded73be3507ffc66852d442ac74632a
Engine List
0
4
5301
5262
2017-05-22T15:03:15Z
JayFoxRox
2
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| [[Far Cry Instincts]]
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| [[Far Cry Instincts: Evolution]]
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!width="11%"| Title
!width="9%"| Year
!width="15%"| Platform
!width="30%"| Publisher/Developer
|-
| [[AFL Live 2003]]
| 2002
| PlayStation 2, Xbox
| IR Gurus
|-
| [[AFL Live 2004]]
| 2003
| PlayStation 2, Xbox
| IR Gurus
|-
| [[AFL Live Premiership Edition]]
| 2004
| PlayStation 2, Xbox
| IR Gurus
|-
| Battlefield 2: Modern Combat
| 2005
| PlayStation 2, Xbox, Xbox 360
| Digital Illusions CE
|-
| Black
| 2006
| PlayStation 2, Xbox,
| Criterion Games/Electronic Arts
|-
| Blitz: The League
| 2005
| PlayStation 2, Xbox
| Midway Games
|-
| Broken Sword: The Sleeping Dragon
| 2003
| PlayStation 2, PC, Xbox
| The Adventure Company, THQ
|-
| Burnout
| 2001
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 2: Point of Impact
| 2002
| GameCube, PlayStation 2, Xbox
| Criterion Games/Acclaim Entertainment
|-
| Burnout 3: Takedown
| 2004
| PlayStation 2, Xbox
| Criterion Games/Electronic Arts
|-
| Burnout Revenge
| 2005
| PlayStation 2, Xbox, Xbox 360
| Criterion Games/Electronic Arts
|-
| Call of Duty: Finest Hour
| 2004
| GameCube, PlayStation 2, Xbox
| Activision Publishing
|-
| Cold Fear
| 2005
| PlayStation 2, Xbox, PC
| Darkworks, Ubisoft
|-
| Commandos: Strike Force
| 2006
| PlayStation 2, PC, Xbox
| Eidos Interactive
|-
| Darkwatch
| 2005
| PlayStation 2, Xbox
| Capcom
|-
| Dead to Rights II
| 2005
| PlayStation 2, Xbox
| WideScreen Games, Namco Hometek
|-
| Evil Dead: Regeneration
| 2005
| PlayStation 2, Xbox, Windows
| Cranky Pants Games, THQ
|-
| Gauntlet: Seven Sorrows
| 2005
| PlayStation 2, Xbox
| Midway Home Entertainment Inc.
|-
| Grand Theft Auto III
| 2001
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: Vice City
| 2002
| PlayStation 2, PlayStation 3, PC, Xbox, Mac OS X, IOS, Android
| Rockstar Games, Take-Two Interactive
|-
| Grand Theft Auto: San Andreas
| 2004
| PlayStation 2, PlayStation 3, PC, Xbox, Xbox 360, Mac OS X, IOS, Android, Windows Phone, Amazon Kindle
| Rockstar Games, Take-Two Interactive
|-
| Harry Potter and the Prisoner of Azkaban
| 2004
| PlayStation 2, GameCube, Xbox
| Electronic Arts
|-
| Harry Potter and the Goblet of Fire
| 2005
| Nintendo DS, PlayStation 2, PSP, GameCube, Windows, Xbox
| Electronic Arts
|-
| Headhunter Redemption
| 2004
| PlayStation 2, Xbox
| SEGA of America
|-
| Hello Kitty: Roller Rescue
| 2005
| PlayStation 2, GameCube, Xbox, PC
| XPEC Entertainment
|-
| Kill Switch
| 2003
| PlayStation 2, PC, Xbox
| Hip Interactive, Namco Hometek
|-
| Madagascar
| 2005
| GameCube, PlayStation 2, PC, Xbox
| Activision Publishing
|-
| Manhunt
| 2003
| PC, PlayStation 2, Xbox
| Rockstar North
|-
| Max Payne 2: The Fall of Max Payne
| 2003
| PlayStation 2, Xbox
| Rockstar Vienna
|-
| Major League Baseball 2K5
| 2004
| PlayStation 2, Xbox
| 2K Sports
|-
| Mortal Kombat: Armageddon
| 2006
| PlayStation 2, Xbox, Wii
| Midway Home Entertainment Inc.
|-
| Mortal Kombat: Deadly Alliance
| 2002
| Game Boy Advance, GameCube, PlayStation 2, Xbox
| Midway
|-
| Mortal Kombat: Deception
| 2004
| GameCube, PlayStation 2, Xbox
| Midway Home Entertainment
|-
| NBA Ballers
| 2004
| PlayStation 2, Xbox
| Midway, Midway Games
|-
| NFL Blitz 2003
| 2002
| PlayStation 2, GameCube, Microsoft Xbox
| Midway
|-
| Rugby League
| 2003
| PlayStation 2, PC, Xbox
| Tru Blu Entertainment
|-
| ObsCure
| 2004
| PlayStation 2, Windows, Xbox
| DreamCatcher Interactive, MC2 France, MC2-Microïds
|-
| Outlaw Golf 2
| 2004
| PlayStation 2, Xbox
| Global Star Software
|-
| Puyo Pop: Fever
| 2004
| PlayStation 2, GameCube, Xbox
| SEGA
|-
| RoboCop
| 2003
| PC, PlayStation 2, Xbox
| Titus Software
|-
| Rolling
| 2003
| PlayStation 2, Xbox
| Rage Software
|-
| Alfa Romeo Racing Italiano
| 2005
| PlayStation 2, Xbox, PC
| Black Bean, Milestone
|-
| Secret Weapons Over Normandy
| 2003
| PlayStation 2, Xbox, PC
| Lucas Arts/Totally Games
|-
| Shadow the Hedgehog
| 2005
| PlayStation 2, GameCube, Xbox
| SEGA/Sonic Team USA
|-
| Sonic Heroes
| 2003
| PlayStation 2, GameCube, Xbox, PC
| SEGA/Sonic Team USA
|-
| SpongeBob SquarePants: Battle for Bikini Bottom
| 2003
| GameCube, PlayStation 2, PC, Xbox
| THQ, Heavy Iron Studios, Aspyr
|-
| [[Tech Deck Dude Bare Knuckle Grind]]
| 2005
| Xbox, PC
| Visionscape Interactive
|-
| Teenage Mutant Ninja Turtles: Mutant Melee
| 2005
| GameCube, PlayStation 2, Xbox, PC
| Konami
|-
| The Incredibles: Rise of the Underminer
| 2005
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| THQ
|-
| The Incredibles
| 2004
| Mac OS X, GameCube, PlayStation 2, Windows, Xbox
| D3 Publisher, Noviy Disk, Snowball.ru, THQ
|-
| The SpongeBob SquarePants Movie Game
| 2005
| GameCube, PlayStation 2, PC, Xbox
| THQ, Aspyr, Heavy Iron Studios
|-
| The Warriors
| 2005
| PlayStation 2, Xbox
| Rockstar Toronto, Rockstar Games
|-
| Tony Hawk's Pro Skater 3
| 2001
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Tony Hawk's Pro Skater 4
| 2002
| GameCube, PlayStation 2, PC, Xbox
| Neversoft, Activision
|-
| Total Overdose: A Gunslinger's Tale in Mexico
| 2005
| PlayStation 2, Xbox, PC
| SCI Games
|-
| Toxic Grind
| 2002
| Xbox
| THQ, Blue Shift Inc.
|-
| Without Warning
| 2005
| PlayStation 2, Xbox
| Capcom Entertainment
|-
| Yourself!Fitness
| 2004
| PlayStation 2, Xbox, PC
| responDESIGN
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers in Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers in Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic the Gathering: Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon: Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
6483d20f5d547fb4ea7d7d008c30c3bd6b311e29
5304
5301
2017-05-22T15:14:36Z
JayFoxRox
2
/* Renderware */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
! Year
! Developer
! Publisher
! Platform
|-
| [[Far Cry Instincts]]
| 2005
| Ubisoft Montreal
| Ubisoft
| Xbox
|-
| [[Far Cry Instincts: Evolution]]
| 2006
| Ubisoft Montreal
| Ubisoft
| Xbox
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[AFL Live 2003]]
|-
|[[AFL Live 2004]]
|-
|[[AFL Live Premiership Edition]]
|-
|[[Battlefield 2: Modern Combat]]
|-
|[[Black]]
|-
|[[Blitz: The League]]
|-
|[[Broken Sword: The Sleeping Dragon]]
|-
|[[Burnout]]
|-
|[[Burnout 2: Point of Impact]]
|-
|[[Burnout 3: Takedown]]
|-
|[[Burnout Revenge]]
|-
|[[Call of Duty: Finest Hour]]
|-
|[[Cold Fear]]
|-
|[[Commandos: Strike Force]]
|-
|[[Darkwatch]]
|-
|[[Dead to Rights II]]
|-
|[[Evil Dead: Regeneration]]
|-
|[[Gauntlet: Seven Sorrows]]
|-
|[[Grand Theft Auto III]]
|-
|[[Grand Theft Auto: Vice City]]
|-
|[[Grand Theft Auto: San Andreas]]
|-
|[[Harry Potter and the Prisoner of Azkaban]]
|-
|[[Harry Potter and the Goblet of Fire]]
|-
|[[Headhunter Redemption]]
|-
|[[Hello Kitty: Roller Rescue]]
|-
|[[Kill Switch]]
|-
|[[Madagascar]]
|-
|[[Manhunt]]
|-
|[[Max Payne 2: The Fall of Max Payne]]
|-
|[[Major League Baseball 2K5]]
|-
|[[Mortal Kombat: Armageddon]]
|-
|[[Mortal Kombat: Deadly Alliance]]
|-
|[[Mortal Kombat: Deception]]
|-
|[[NBA Ballers]]
|-
|[[NFL Blitz 2003]]
|-
|[[Rugby League]]
|-
|[[ObsCure]]
|-
|[[Outlaw Golf 2]]
|-
|[[Puyo Pop: Fever]]
|-
|[[RoboCop]]
|-
|[[Rolling]]
|-
|[[Alfa Romeo Racing Italiano]]
|-
|[[Secret Weapons Over Normandy]]
|-
|[[Shadow the Hedgehog]]
|-
|[[Sonic Heroes]]
|-
|[[SpongeBob SquarePants: Battle for Bikini Bottom]]
|-
|[[Tech Deck Dude Bare Knuckle Grind]]
|-
|[[Teenage Mutant Ninja Turtles: Mutant Melee]]
|-
|[[The Incredibles: Rise of the Underminer]]
|-
|[[The Incredibles]]
|-
|[[The SpongeBob SquarePants Movie Game]]
|-
|[[The Warriors]]
|-
|[[Tony Hawk's Pro Skater 3]]
|-
|[[Tony Hawk's Pro Skater 4]]
|-
|[[Total Overdose: A Gunslinger's Tale in Mexico]]
|-
|[[Toxic Grind]]
|-
|[[Without Warning]]
|-
|[[Yourself!Fitness]]
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers in Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers in Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic the Gathering: Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon: Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
3650b2586912fbf70e6d53688365a8f05fd46562
5305
5304
2017-05-22T15:15:20Z
JayFoxRox
2
/* CryEngine 1 */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Far Cry Instincts]]
|-
| [[Far Cry Instincts: Evolution]]
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[AFL Live 2003]]
|-
|[[AFL Live 2004]]
|-
|[[AFL Live Premiership Edition]]
|-
|[[Battlefield 2: Modern Combat]]
|-
|[[Black]]
|-
|[[Blitz: The League]]
|-
|[[Broken Sword: The Sleeping Dragon]]
|-
|[[Burnout]]
|-
|[[Burnout 2: Point of Impact]]
|-
|[[Burnout 3: Takedown]]
|-
|[[Burnout Revenge]]
|-
|[[Call of Duty: Finest Hour]]
|-
|[[Cold Fear]]
|-
|[[Commandos: Strike Force]]
|-
|[[Darkwatch]]
|-
|[[Dead to Rights II]]
|-
|[[Evil Dead: Regeneration]]
|-
|[[Gauntlet: Seven Sorrows]]
|-
|[[Grand Theft Auto III]]
|-
|[[Grand Theft Auto: Vice City]]
|-
|[[Grand Theft Auto: San Andreas]]
|-
|[[Harry Potter and the Prisoner of Azkaban]]
|-
|[[Harry Potter and the Goblet of Fire]]
|-
|[[Headhunter Redemption]]
|-
|[[Hello Kitty: Roller Rescue]]
|-
|[[Kill Switch]]
|-
|[[Madagascar]]
|-
|[[Manhunt]]
|-
|[[Max Payne 2: The Fall of Max Payne]]
|-
|[[Major League Baseball 2K5]]
|-
|[[Mortal Kombat: Armageddon]]
|-
|[[Mortal Kombat: Deadly Alliance]]
|-
|[[Mortal Kombat: Deception]]
|-
|[[NBA Ballers]]
|-
|[[NFL Blitz 2003]]
|-
|[[Rugby League]]
|-
|[[ObsCure]]
|-
|[[Outlaw Golf 2]]
|-
|[[Puyo Pop: Fever]]
|-
|[[RoboCop]]
|-
|[[Rolling]]
|-
|[[Alfa Romeo Racing Italiano]]
|-
|[[Secret Weapons Over Normandy]]
|-
|[[Shadow the Hedgehog]]
|-
|[[Sonic Heroes]]
|-
|[[SpongeBob SquarePants: Battle for Bikini Bottom]]
|-
|[[Tech Deck Dude Bare Knuckle Grind]]
|-
|[[Teenage Mutant Ninja Turtles: Mutant Melee]]
|-
|[[The Incredibles: Rise of the Underminer]]
|-
|[[The Incredibles]]
|-
|[[The SpongeBob SquarePants Movie Game]]
|-
|[[The Warriors]]
|-
|[[Tony Hawk's Pro Skater 3]]
|-
|[[Tony Hawk's Pro Skater 4]]
|-
|[[Total Overdose: A Gunslinger's Tale in Mexico]]
|-
|[[Toxic Grind]]
|-
|[[Without Warning]]
|-
|[[Yourself!Fitness]]
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2002/02/17
| New Legends
| Action-adventure
| Xbox
| Infinite Machine<sup>[http://www.smartcomputing.com/editorial/article.asp?article=articles/archive/g0810/029g10/29g10.asp&guid=%20this <nowiki>[Ref]</nowiki>]</sup>
| THQ
| UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers in Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers in Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic the Gathering: Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon: Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
f96c4fc3e0d05ec25a0f917d8bce6952a560a120
5306
5305
2017-05-22T15:16:25Z
JayFoxRox
2
/* Unreal Engine 1 */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Far Cry Instincts]]
|-
| [[Far Cry Instincts: Evolution]]
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[AFL Live 2003]]
|-
|[[AFL Live 2004]]
|-
|[[AFL Live Premiership Edition]]
|-
|[[Battlefield 2: Modern Combat]]
|-
|[[Black]]
|-
|[[Blitz: The League]]
|-
|[[Broken Sword: The Sleeping Dragon]]
|-
|[[Burnout]]
|-
|[[Burnout 2: Point of Impact]]
|-
|[[Burnout 3: Takedown]]
|-
|[[Burnout Revenge]]
|-
|[[Call of Duty: Finest Hour]]
|-
|[[Cold Fear]]
|-
|[[Commandos: Strike Force]]
|-
|[[Darkwatch]]
|-
|[[Dead to Rights II]]
|-
|[[Evil Dead: Regeneration]]
|-
|[[Gauntlet: Seven Sorrows]]
|-
|[[Grand Theft Auto III]]
|-
|[[Grand Theft Auto: Vice City]]
|-
|[[Grand Theft Auto: San Andreas]]
|-
|[[Harry Potter and the Prisoner of Azkaban]]
|-
|[[Harry Potter and the Goblet of Fire]]
|-
|[[Headhunter Redemption]]
|-
|[[Hello Kitty: Roller Rescue]]
|-
|[[Kill Switch]]
|-
|[[Madagascar]]
|-
|[[Manhunt]]
|-
|[[Max Payne 2: The Fall of Max Payne]]
|-
|[[Major League Baseball 2K5]]
|-
|[[Mortal Kombat: Armageddon]]
|-
|[[Mortal Kombat: Deadly Alliance]]
|-
|[[Mortal Kombat: Deception]]
|-
|[[NBA Ballers]]
|-
|[[NFL Blitz 2003]]
|-
|[[Rugby League]]
|-
|[[ObsCure]]
|-
|[[Outlaw Golf 2]]
|-
|[[Puyo Pop: Fever]]
|-
|[[RoboCop]]
|-
|[[Rolling]]
|-
|[[Alfa Romeo Racing Italiano]]
|-
|[[Secret Weapons Over Normandy]]
|-
|[[Shadow the Hedgehog]]
|-
|[[Sonic Heroes]]
|-
|[[SpongeBob SquarePants: Battle for Bikini Bottom]]
|-
|[[Tech Deck Dude Bare Knuckle Grind]]
|-
|[[Teenage Mutant Ninja Turtles: Mutant Melee]]
|-
|[[The Incredibles: Rise of the Underminer]]
|-
|[[The Incredibles]]
|-
|[[The SpongeBob SquarePants Movie Game]]
|-
|[[The Warriors]]
|-
|[[Tony Hawk's Pro Skater 3]]
|-
|[[Tony Hawk's Pro Skater 4]]
|-
|[[Total Overdose: A Gunslinger's Tale in Mexico]]
|-
|[[Toxic Grind]]
|-
|[[Without Warning]]
|-
|[[Yourself!Fitness]]
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|[[New Legends]]
|UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!width="18%"| Release date
!width="9%"| Title
!width="9%"| Genre
!width="13%"| Platform
!width="14%"| Developer
!width="14%"| Publisher
!width="20%"| Engine Version
|-
| 2005/05/31 - Xbox<br>2005/08/09 - PC
| Advent Rising
| Third person action-adventure
| Microsoft Windows, Xbox
| GlyphX Games
| Majesco Entertainment
| UE2 Build 2226
|-
| 2005/11/17
| America's Army: Rise of a Soldier
| First Person Shooter
| Xbox
| Secret Level
| Ubisoft
| UT2003 Build 928
|-
| 2005/10/06 - PC<br>2005/10/06 - Xbox<br>2005/10/26 - PS2
| Brothers in Arms: Earned in Blood
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/01 - Xbox<br>2005/03/15 - PC<br>2005/03/15 - Xbox
| Brothers in Arms: Road to Hill 30
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2
| Gearbox Software
| Ubisoft
| UE2 Build 2226
|-
| 2005/03/23 - PC<br>2005/03/23 - Xbox<br>2006/01/26 - Europe(PC)
| Combat: Task Force 121
| First-person shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://www.xgpgaming.com/news/news.php?id=1216%20XGP%20Gaming:%20Combat:%20Task%20Force%20121%20Announced <nowiki>[Ref]</nowiki>]</sup><sup>[http://www.extremegamer.ca/xbox/games/combat121.php <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2004/03/03 - Xbox<br>2004/03/18 - PC
| Dead Man's Hand
| First Person Shooter
| Microsoft Windows, Xbox
| Human Head Studios
| Atari
| UE2 Build 2110
|-
| 2003/12/02
| Deus Ex: Invisible War
| Action role-playing game
| Microsoft Windows, Xbox
| Ion Storm Inc.
| Eidos Interactive
| Warfare Build 777
|-
| 2005/10/20 - PC<br>2005/10/26 - Xbox
| Land of the Dead: Road to Fiddler's Green
| First Person Shooter
| Microsoft Windows, Xbox
| Brainbox Games
| Groove Games
| UE2 BUild 2226
|-
| 2003/11/18
| Magic the Gathering: Battlegrounds
| Fighting
| Microsoft Windows, Xbox
| Secret Level
| Atari
| Warfare Build 926
|-
| 2004/10/19 - Xbox<br>2004/10/26 - PC
| Men of Valor
| First Person Shooter
| Microsoft Windows, Xbox
| 2015, Inc.
| Vivendi Universal Games
| Warfare Build 926
|-
| 2006/09/19 - PC<br>2006/09/19 - Xbox<br>2006/09/19 - Xbox 360<br>2006/09/19 - PS2<br>2006/09/19 - PS3<br>2006/09/19 - PSP<br>2006/09/19 - GC<br>2006/11/30 - Wii
| Open Season
| Action-adventure
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>Xbox 360,<br>GameCube, Wii,<br> PlayStation Portable
| Ubisoft Montreal(PC and Consoles),<br>Ubisoft Quebec(PSP)
| Ubisoft
| Warfare Build 927
|-
| 2005/05/03
| Pariah
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20080223094646/http://www.pcauthority.com.au/review.aspx?CIaRID=2691%20Pariah%20-%20Games%20-%20Review%20-%20www.pcauthority.com.au <nowiki>[Ref]</nowiki>]</sup><sup>[http://pc.ign.com/objects/665/665243.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2004/06/15 - Xbox<br>2004/09/21 - PC
| Shadow Ops: Red Mercury
| First Person Shooter
| Microsoft Windows, Xbox
| Zombie Studios
| Atari
| UE2 Build 2110
|-
| 2005/03/01
| Star Wars: Republic Commando
| First Person Shooter
| Microsoft Windows, Xbox
| LucasArts<sup>[http://pc.ign.com/objects/566/566923.html%20IGN:%20Star%20Wars%20Republic%20Commando <nowiki>[Ref]</nowiki>]</sup><sup>[http://web.archive.org/web/20060530190850/http://www.gameaxis.com/articles/view.gax?id=530&gid=884 <nowiki>[Ref]</nowiki>]</sup>
| LucasArts
| UE2 Build 2226
|-
| 2004/05/25
| Thief: Deadly Shadows
| Stealth
| Microsoft Windows, Xbox
| Ion Storm
| Eidos Interactive
| Warfare Build 777
|-
| 2006/03/09 - Xbox<br>2006/03/28 - PS2
| Tom Clancy's Ghost Recon: Advanced Warfighter
| First Person Shooter
| Xbox, PlayStation 2
| Ubisoft Shanghai / Ubisoft Paris
| Ubisoft
| Warfare Build 927
|-
| 2003/10/28 - Xbox<br>2004/03/23 - PS2<br>2004/06/15 - GC
| Tom Clancy's Rainbow Six 3
| First Person Shooter
| Xbox, PlayStation 2,<br>GameCube
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2004/08/04
| Tom Clancy's Rainbow Six 3: Black Arrow
| First Person Shooter
| Xbox
| Ubisoft Montreal
| Ubisoft
| Warfare Build 927
|-
| 2002/11/17 - Xbox<br>2003/02/19 - PC<br>2003/04/08 - PS2<br>2003/04/10 - GC
| Tom Clancy's Splinter Cell
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube, OS X
| Ubisoft Montreal
| Ubisoft
| Warfare Build 829
|-
| 2005/03/28 - PC<br>2005/03/28 - Xbox<br>2005/03/28 - PS2<br>2005/03/31 - GC<br>2008/04/21 - Xbox 360
| Tom Clancy's Splinter Cell: Chaos Theory
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube,<br>Xbox 360
| Ubisoft Montreal - Singleplayer & Co-op mode<br>Ubisoft Annency - Versus mode
| Ubisoft
| Warfare Build 829 - Singleplayer & Co-op mode<br>UE2 Build 2110 - Versus mode
|-
| 2006/10/17 - Xbox 360<br>2006/10/24 - Xbox<br>2006/10/24 - PS2<br>2006/10/26 - GC<br>2006/11/07 - PC<br>2007/11/28 - Wii<br>2007/03/30 - PS3
| Tom Clancy's Splinter Cell: Double Agent
| Stealth
| Microsoft Windows,<br> Xbox, PlayStation 2,<br>Xbox 360, PlayStation 3,<br>GameCube, Wii
| Ubisoft Montreal - Offline mode for Xbox, PlayStation 2, GameCube, and Wii versions<br>Ubisoft Shanghai - Offline mode for Xbox 360, PlayStation 3, and PC versions<br>Ubisoft Annency - Online mode for PC, Xbox, Xbox 360, PlayStation 2, and PlayStation 3 version<br>online excluded that GC and Wii versions
| Ubisoft
| Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
| 2004/03/23 - PC<br>2004/03/23 - Xbox<br>2004/06/16 - PS2<br>2004/06/20 - GC
| Tom Clancy's Splinter Cell: Pandora Tomorrow
| Stealth
| Microsoft Windows, Xbox,<br>PlayStation 2, GameCube
| Ubisoft Shanghai - Singleplayer mode<br>Ubisoft Annency - Multiplayer mode
| Ubisoft
| Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
| 2003/02/03 - PC<br>2004/02/10 - Xbox
| Unreal II: The Awakening
| First Person Shooter
| Microsoft Windows, Xbox
| Legend Entertainment
| Atari
| Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
| 2002/11/12
| Unreal Championship
| First Person Shooter
| Xbox
| Digital Extremes
| Atari
| UT2003 Build 928
|-
| 2005/04/18
| Unreal Championship 2: The Liandri Conflict
| First Person Shooter / Third Person Shooter
| Xbox
| Epic Games
| Midway Games
| UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
| 2006/06/18 - PC<br>2006/06/24 - Xbox
| Warpath
| First Person Shooter
| Microsoft Windows, Xbox
| Digital Extremes<sup>[http://web.archive.org/web/20070323035959/http://www.groovegames.com/Games/Warpath/index.php%3E <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UT2003 Build 928 with some UE2.5 code
|-
| 2006/01/24 - Xbox<br>2006/04/03 - PC<br>2007/03/27 - Europe(PC)
| World War II Combat: Road to Berlin
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games
| Groove Games
| UE2 Build 2110
|-
| 2006/06/21 - Xbox<br>2006/06/25 - PC<br>2007/06/25 - Europe(PC)
| World War II Combat: Iwo Jima
| First Person Shooter
| Microsoft Windows, Xbox
| Direct Action Games<sup>[http://web.archive.org/web/20110718173237/http://bonusweb.idnes.cz/download/screenshoty/ww2combat_ijscr.html <nowiki>[Ref]</nowiki>]</sup>
| Groove Games
| UE2 Build 2110
|-
| 2003/11/18 - PC<br>2003/11/18 - PS2<br>2003/11/24 - Xbox
| XIII
| First Person Shooter
| Microsoft Windows,<br>Xbox, PlayStation 2,<br>GameCube, OS X
| Ubisoft Paris
| Ubisoft
| Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
3ac9218cb76f125e04ce37155c6884c5e329287e
5308
5306
2017-05-22T15:21:20Z
JayFoxRox
2
/* Unreal Engine 2 */
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Far Cry Instincts]]
|-
| [[Far Cry Instincts: Evolution]]
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[AFL Live 2003]]
|-
|[[AFL Live 2004]]
|-
|[[AFL Live Premiership Edition]]
|-
|[[Battlefield 2: Modern Combat]]
|-
|[[Black]]
|-
|[[Blitz: The League]]
|-
|[[Broken Sword: The Sleeping Dragon]]
|-
|[[Burnout]]
|-
|[[Burnout 2: Point of Impact]]
|-
|[[Burnout 3: Takedown]]
|-
|[[Burnout Revenge]]
|-
|[[Call of Duty: Finest Hour]]
|-
|[[Cold Fear]]
|-
|[[Commandos: Strike Force]]
|-
|[[Darkwatch]]
|-
|[[Dead to Rights II]]
|-
|[[Evil Dead: Regeneration]]
|-
|[[Gauntlet: Seven Sorrows]]
|-
|[[Grand Theft Auto III]]
|-
|[[Grand Theft Auto: Vice City]]
|-
|[[Grand Theft Auto: San Andreas]]
|-
|[[Harry Potter and the Prisoner of Azkaban]]
|-
|[[Harry Potter and the Goblet of Fire]]
|-
|[[Headhunter Redemption]]
|-
|[[Hello Kitty: Roller Rescue]]
|-
|[[Kill Switch]]
|-
|[[Madagascar]]
|-
|[[Manhunt]]
|-
|[[Max Payne 2: The Fall of Max Payne]]
|-
|[[Major League Baseball 2K5]]
|-
|[[Mortal Kombat: Armageddon]]
|-
|[[Mortal Kombat: Deadly Alliance]]
|-
|[[Mortal Kombat: Deception]]
|-
|[[NBA Ballers]]
|-
|[[NFL Blitz 2003]]
|-
|[[Rugby League]]
|-
|[[ObsCure]]
|-
|[[Outlaw Golf 2]]
|-
|[[Puyo Pop: Fever]]
|-
|[[RoboCop]]
|-
|[[Rolling]]
|-
|[[Alfa Romeo Racing Italiano]]
|-
|[[Secret Weapons Over Normandy]]
|-
|[[Shadow the Hedgehog]]
|-
|[[Sonic Heroes]]
|-
|[[SpongeBob SquarePants: Battle for Bikini Bottom]]
|-
|[[Tech Deck Dude Bare Knuckle Grind]]
|-
|[[Teenage Mutant Ninja Turtles: Mutant Melee]]
|-
|[[The Incredibles: Rise of the Underminer]]
|-
|[[The Incredibles]]
|-
|[[The SpongeBob SquarePants Movie Game]]
|-
|[[The Warriors]]
|-
|[[Tony Hawk's Pro Skater 3]]
|-
|[[Tony Hawk's Pro Skater 4]]
|-
|[[Total Overdose: A Gunslinger's Tale in Mexico]]
|-
|[[Toxic Grind]]
|-
|[[Without Warning]]
|-
|[[Yourself!Fitness]]
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|[[New Legends]]
|UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|-
|[[Advent Rising]]
|UE2 Build 2226
|-
|[[America's Army: Rise of a Soldier]]
|UT2003 Build 928
|-
|[[Brothers in Arms: Earned in Blood]]
|UE2 Build 2226
|-
|[[Brothers in Arms: Road to Hill 30]]
|UE2 Build 2226
|-
|[[Combat: Task Force 121]]
|UE2 Build 2110
|-
|[[Dead Man's Hand]]
|UE2 Build 2110
|-
|[[Deus Ex: Invisible War]]
|Warfare Build 777
|-
|[[Land of the Dead: Road to Fiddler's Green]]
|UE2 BUild 2226
|-
|[[Magic the Gathering: Battlegrounds]]
|Warfare Build 926
|-
|[[Men of Valor]]
|Warfare Build 926
|-
|[[Open Season]]
|Warfare Build 927
|-
|[[Pariah]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[Shadow Ops: Red Mercury]]
|UE2 Build 2110
|-
|[[Star Wars: Republic Commando]]
|UE2 Build 2226
|-
|[[Thief: Deadly Shadows]]
|Warfare Build 777
|-
|[[Tom Clancy's Ghost Recon: Advanced Warfighter]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3: Black Arrow]]
|Warfare Build 927
|-
|[[Tom Clancy's Splinter Cell]]
|Warfare Build 829
|-
|[[Tom Clancy's Splinter Cell: Chaos Theory]]
|Warfare Build 829 - Singleplayer & Co-op mode
UE2 Build 2110 - Versus mode
|-
|[[Tom Clancy's Splinter Cell: Double Agent]]
|Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
|[[Tom Clancy's Splinter Cell: Pandora Tomorrow]]
|Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
|[[Unreal II: The Awakening]]
|Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
|[[Unreal Championship]]
|UT2003 Build 928
|-
|[[Unreal Championship 2: The Liandri Conflict]]
|UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
|[[Warpath]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[World War II Combat: Road to Berlin]]
|UE2 Build 2110
|-
|[[World War II Combat: Iwo Jima]]
|UE2 Build 2110
|-
|[[XIII]]
|Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License*
003cccc6e74a444411ed445ef6cc0aebdeb575bd
Xbox Debug Monitor
0
3689
5307
5264
2017-05-22T15:18:42Z
Furon
2477
/* Commands */ Start work on command table
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|+ Command availability by XBDM version
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | altaddr
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | bye
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | capcontrol
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | continue
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | debugger
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | deftitle
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | delete
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | dirlist
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | drivefreespace
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | except
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | exceptif
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | flash
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | fmtfat
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | funccall
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | getcontext
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | getextcontext
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | getfile
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | getfileattributes
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | getmem
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | go
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | gpucount
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | halt
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | irtsweep
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | isbreak
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | isstopped
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | kd
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | magicboot
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | mkdir
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | modlong
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | modsections
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | modules
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | nostopon
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | notify
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | notifyat
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | pssnap
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | querypc
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | reboot
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | rename
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | resume
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | screenshot
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | sendfile
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | setcontext
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | setfileattributes
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | setsystime
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | stopon
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | suspend
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | systime
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | threadinfo
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | threads
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | xbeinfo
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|-
| style="font-family: monospace; text-align: left" | xtlinfo
| style="background-color: #CEF2E0" | ✓
| colspan=20 |
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
25fcd898a3a5e8f8142c4cc8379c4d8658ce869a
5311
5307
2017-05-22T16:05:05Z
Furon
2477
/* Commands */ Fix 3944 and add 4039
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|+ Command availability by XBDM version
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | altaddr
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | authuser
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | break
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | bye
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | capcontrol
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | continue
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | dbgname
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | debugger
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | debugmode
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | deftitle
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | delete
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | dirlist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | drivefreespace
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | drivelist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | flash
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | fmtfat
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | funccall
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getextcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getfile
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getfileattributes
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getmem
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getuserpriv
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | go
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | gpucount
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | halt
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | irtsweep
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | isbreak
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | isstopped
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | kd
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | keyxchg
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | lockmode
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | magicboot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | mkdir
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | modlong
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | modsections
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | modules
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | nostopon
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | notify
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | notifyat
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | pclist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | pssnap
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | querypc
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | reboot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | rename
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | resume
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | screenshot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | sendfile
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setconfig
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setfileattributes
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setsystime
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setuserpriv
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | stop
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | stopon
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | suspend
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | systime
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | threadinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | threads
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | title
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | user
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | userlist
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | vssnap
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | xbeinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | xtlinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
68b329f015e4bace367c883f4f93360aae83afe2
5312
5311
2017-05-22T16:08:26Z
Furon
2477
/* Remote Debugging and Control Protocol */ Mention that 3944 sends 200 instead of 201 on connect
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|+ Command availability by XBDM version
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | altaddr
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | authuser
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | break
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | bye
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | capcontrol
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | continue
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | dbgname
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | debugger
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | debugmode
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | deftitle
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | delete
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | dirlist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | drivefreespace
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | drivelist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | flash
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | fmtfat
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | funccall
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getextcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getfile
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getfileattributes
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getmem
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | getuserpriv
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | go
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | gpucount
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | halt
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | irtsweep
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | isbreak
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | isstopped
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | kd
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | keyxchg
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | lockmode
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | magicboot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | mkdir
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | modlong
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | modsections
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | modules
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | nostopon
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | notify
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | notifyat
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | pclist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | pssnap
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | querypc
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | reboot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | rename
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | resume
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | screenshot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | sendfile
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setconfig
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setfileattributes
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setsystime
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | setuserpriv
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | stop
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | stopon
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | suspend
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | systime
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | threadinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | threads
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | title
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | user
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | userlist
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | vssnap
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | xbeinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|-
| style="font-family: monospace; text-align: left" | xtlinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=19 |
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
0e84605cebd1da251e072a162fe610812dd20468
5313
5312
2017-05-22T16:38:19Z
Furon
2477
/* Commands */ Add 4134, 4242, and 4361
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|+ Command availability by XBDM version
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | adminpw
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | altaddr
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | authuser
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | boxid
| style="background-color: #F2CECE" | ✗
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | break
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | bye
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | capcontrol
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | continue
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | dbgname
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | debugger
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | debugmode
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | dedicate
| style="background-color: #F2CECE" | ✗
| style="background-color: #F2CECE" | ✗
| style="background-color: #F2CECE" | ✗
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | deftitle
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | delete
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | dirlist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | drivefreespace
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | drivelist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | dvdblk
| style="background-color: #F2CECE" | ✗
| style="background-color: #F2CECE" | ✗
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | flash
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | fmtfat
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | funccall
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | getcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | getextcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | getfile
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | getfileattributes
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | getmem
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | getuserpriv
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | go
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | gpucount
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | halt
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | irtsweep
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | isbreak
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | isstopped
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | kd
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | keyxchg
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | lockmode
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | magicboot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | mkdir
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | mmglobal
| style="background-color: #F2CECE" | ✗
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | modlong
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | modsections
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | modules
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | nostopon
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | notify
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | notifyat
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | pclist
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | pssnap
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | querypc
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | reboot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | rename
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | resume
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | screenshot
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | sendfile
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | setconfig
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | setcontext
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | setfileattributes
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | setsystime
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | setuserpriv
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | stop
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | stopon
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | suspend
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | systime
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | threadinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | threads
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | title
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | user
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | userlist
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | vssnap
| style="background-color: #F2CECE" | ✗
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | xbeinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|-
| style="font-family: monospace; text-align: left" | xtlinfo
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| style="background-color: #CEF2E0" | ✓
| colspan=16 |
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
3b1d424b5167d1ab19ee28945f6e055fadce6c50
5320
5313
2017-05-22T20:03:47Z
Furon
2477
/* Commands */ Move command table to a separate page
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
TODO
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
10e9e1e8d62fe04e0fd073978bed6415b814a8ef
5327
5320
2017-05-22T21:08:06Z
Furon
2477
Add command section stubs
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
71a14a4a5dba9f948600f8807a64a45816f7673f
Shrek
0
3720
5309
2017-05-22T15:26:59Z
JayFoxRox
2
Created page with "{{Game}} * [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]"
wikitext
text/x-wiki
{{Game}}
* [https://sites.google.com/site/richgel99/home Deferred Rendering in Shrek]
8f20be5909eb5c46b8c743cfb6ea571cee0d7089
Resources
0
3
5310
5228
2017-05-22T15:27:39Z
JayFoxRox
2
Link moved to Shrek page
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php Designing the Boot Sound for the Original Xbox (Brian Schmidt)]
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past]
02176496e0d69c8da2a5a41f98f0aefc53db6af1
XBDM commands by version
0
3721
5319
2017-05-22T20:02:57Z
Furon
2477
Created page with "{| class="wikitable" style="margin: 0 auto; text-align: center;" |- style="font-size: x-small" ! ! 3944 ! 4039 ! 4134 ! 4242 ! 4361 ! 4432 ! 4531 ! 4627 ! 4721 ! 4831 ! 4928 !..."
wikitext
text/x-wiki
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | adminpw
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | altaddr
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | authuser
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | boxid
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | break
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | bye
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | capcontrol
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
|-
| style="font-family: monospace; text-align: left" | capctrl
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | continue
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | crashdump
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | d3dopcode
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dbgname
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dbgoptions
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | debugger
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | debugmode
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dedicate
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | deftitle
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | delete
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dirlist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dmversion
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | drivefreespace
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | drivelist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dvdblk
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dvdperf
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | fileeof
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | flash
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | fmtfat
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | funccall
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getd3dstate
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getextcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getfile
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getfileattributes
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getgamma
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getmem
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getmem2
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getpalette
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getpid
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getsum
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getsurf
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getuserpriv
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getutildrvinfo
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | go
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | gpucount
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | halt
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | irtsweep
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | isbreak
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | isdebugger
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | isstopped
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | kd
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | keyxchg
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | lockmode
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | lop
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | magicboot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | memtrack
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | mkdir
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | mmglobal
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modlong
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modsections
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modules
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | nostopon
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | notify
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | notifyat
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pbsnap
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pclist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pdbinfo
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pssnap
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | querypc
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | reboot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | rename
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | resume
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | screenshot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | sendfile
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | servname
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setconfig
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setfileattributes
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setsystime
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setuserpriv
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | signcontent
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | stop
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | stopon
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | suspend
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | sysfileupd
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | systime
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | threadinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | threads
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | title
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | user
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | userlist
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | vssnap
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | walkmem
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | writefile
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | xbeinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | xtlinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
4cb293cf453b32fc67431da4e824fb97e238d2ae
5321
5319
2017-05-22T20:23:39Z
Furon
2477
Add description
wikitext
text/x-wiki
The following table shows the commands available in each version of the [[Xbox Debug Monitor]].
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | adminpw
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | altaddr
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | authuser
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | boxid
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | break
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | bye
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | capcontrol
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
|-
| style="font-family: monospace; text-align: left" | capctrl
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | continue
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | crashdump
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | d3dopcode
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dbgname
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dbgoptions
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | debugger
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | debugmode
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dedicate
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | deftitle
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | delete
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dirlist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dmversion
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | drivefreespace
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | drivelist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dvdblk
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dvdperf
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | fileeof
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | flash
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | fmtfat
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | funccall
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getd3dstate
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getextcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getfile
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getfileattributes
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getgamma
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getmem
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getmem2
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getpalette
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getpid
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getsum
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getsurf
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getuserpriv
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getutildrvinfo
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | go
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | gpucount
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | halt
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | irtsweep
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | isbreak
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | isdebugger
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | isstopped
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | kd
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | keyxchg
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | lockmode
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | lop
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | magicboot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | memtrack
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | mkdir
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | mmglobal
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modlong
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modsections
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modules
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | nostopon
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | notify
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | notifyat
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pbsnap
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pclist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pdbinfo
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pssnap
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | querypc
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | reboot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | rename
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | resume
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | screenshot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | sendfile
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | servname
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setconfig
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setfileattributes
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setsystime
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setuserpriv
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | signcontent
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | stop
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | stopon
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | suspend
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | sysfileupd
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | systime
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | threadinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | threads
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | title
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | user
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | userlist
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | vssnap
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | walkmem
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | writefile
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | xbeinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | xtlinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
f07953db8c173e444e3d473f354ced10e6cf9298
Talk:DVD Drive
1
3722
5322
2017-05-22T20:24:40Z
Codeasm
2480
Created page with "The comcast url is broken maybe another source? Im not deleting it, because maybe you have another archive or link --~~~~"
wikitext
text/x-wiki
The comcast url is broken maybe another source?
Im not deleting it, because maybe you have another archive or link
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 13:24, 22 May 2017 (PDT)
64f1afe2088b1c633228e3b8b7f8be970d2ee726
5325
5322
2017-05-22T20:35:31Z
JayFoxRox
2
wikitext
text/x-wiki
== Broken comcast URL ==
The comcast url is broken maybe another source?
Im not deleting it, because maybe you have another archive or link
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 13:24, 22 May 2017 (PDT)
It looks like comcast retroactively created a robots.txt which prevents this page from being shown.
I've contacted archive.org about this on april 16th, but I didn't get a response yet.
If I don't get a response soon I'll contact comcast about this too.
I'm super pissed about the situation. That link worked when I added it a couple of months ago.
I trusted archive to be an archive. - Looks like we'll need an archive archive:
'''Please archive anything which is stored on archive (saving it locally or moving information to this wiki asap). New domain owners can retroactively delete stuff..'''
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 13:35, 22 May 2017 (PDT)
f8214228ffca78ff397864ea4b06d456b0826af1
File:Xbox drivedetermination.png
6
3723
5323
2017-05-22T20:25:59Z
Codeasm
2480
Xbox dvd drive types. edited by CodeAsm for use on xboxdevwiki.
wikitext
text/x-wiki
Xbox dvd drive types. edited by CodeAsm for use on xboxdevwiki.
1870e788c99af4c1102648c51d4d5c38f9fc776f
DVD Drive
0
3704
5324
5227
2017-05-22T20:33:24Z
Codeasm
2480
Added some more text and image I made with a nice comparison of the diferent drives. please edit text, my english is not grammar correct
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
There are four retail drives known to be used by Microsoft in the retail version of the console.
any xbox dvd drive can be used in any retail xbox. Development kits can use and read debug signed code from these drives.
Other drives that might work are firmware modded PC drives like Kreon drives.
List of Xbox DVD Drive manufacturers
* Thomson
* Philips
* Samsung
* Hitachi-LG (mainly 1.6?)
[[File:http://xboxdevwiki.net/images/b/b1/Xbox_drivedetermination.png]]
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
dc44a8b72a695869b37b059d127b5e20cfdfd919
5326
5324
2017-05-22T20:48:16Z
Codeasm
2480
image trouble :P
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
There are four retail drives known to be used by Microsoft in the retail version of the console.
any xbox dvd drive can be used in any retail xbox. Development kits can use and read debug signed code from these drives.
Other drives that might work are firmware modded PC drives like Kreon drives.
List of Xbox DVD Drive manufacturers
* Thomson
* Philips
* Samsung
* Hitachi-LG (mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
4397a51ca6981bcbc477724e79bc446fea1087b6
Xbox Debug Monitor
0
3689
5328
5327
2017-05-22T23:02:16Z
Furon
2477
Add getfile info
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{| class="wikitable"
! 3944-4432
| width="99%" | <span style="font: 14px monospace">getfile name=</span>
|-
! 4532+
| <span style="font: 14px monospace">getfile name= [offset= size=]</span>
|}
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
6ba071ee90d6d828b97b25839a0ab1dcbf2a2449
5329
5328
2017-05-22T23:10:35Z
Furon
2477
/* getfile (Download file) */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{| class="wikitable"
! 3944-4432
| width="99%" | <span style="font: 14px monospace">getfile name=</span>
|-
! 4531+
| <span style="font: 14px monospace">getfile name= [offset= size=]</span>
|}
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
edc295efabd4f0f28ad0050bd5c927e804b22313
Xbox Game Disc
0
3700
5330
5256
2017-05-23T10:05:39Z
JayFoxRox
2
/* Dumping */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|Kreon 0.80 (September 9th 2006)
|Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/]
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
601940e8310c1a87ca4b34a9bea1e5224d5cc417
5331
5330
2017-05-23T10:06:20Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|Kreon 0.80 (September 9th 2006) <br> Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/]
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
cc663856f99fa3cb635f7ec25cca6063e71e8bac
5332
5331
2017-05-23T10:07:56Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|Kreon 0.60 July 30th 2006) <br> Kreon 0.80 (September 9th 2006) <br> Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/]
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
568533e677e3fcfe058e669c347972050c15f209
5333
5332
2017-05-23T10:08:07Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|Kreon 0.60 (July 30th 2006) <br> Kreon 0.80 (September 9th 2006) <br> Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/]
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
9ed61ed708f146e1fec9a8e961c0784715b1b03d
5334
5333
2017-05-23T10:08:37Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|Kreon 0.60 (July 30th 2006) <br> Kreon 0.80 (September 9th 2006) <br> Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/]
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
a467eab338e3e1af01ef2348774c7f809af2afa9
5335
5334
2017-05-23T10:13:03Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/][https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
9e4bbdae03ce41d7bd0a4871cfda385c39d737c1
5336
5335
2017-05-23T10:17:05Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumping ==
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
186ee9dfc3986932051cf10d9b6252d957a3bed8
5351
5336
2017-05-23T19:57:40Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== SS.bin ====
2048 Bytes
Challenge entry:
{| class="wikitable"
! Offset !! Field !! Notes
|-
|0 || Level ||
|-
|1 || Challenge id ||
|-
|2 || Challenge value ||
|-
|6 || Response modifier ||
|-
|7 || Response value ||
|}
Security sector range
{| class="wikitable"
! Offset !! Field !! Notes
|-
|3 || Start PSN ||
|-
|6 || End PSN ||
|}
Overall format:
{| class="wikitable"
! Offset !! Field !! Notes
|-
|0 || Bookversion and Booktype ||
|-
|768 || Version of challenge table ||
|-
|769 || Number of challenge entries ||
|-
|770 || Challenge entries ||
|-
|1633 || 16 security sector ranges ||
|-
|1840 || 16 security sector ranges || Copy from Offset 1633
|-
|}
Note that this information is still incomplete!
==== DMI.bin ====
2048 Bytes
==== PFI.bin ====
2048 Bytes
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
f0c92bd8627476f9741b4b67d933143a75a45b1d
5352
5351
2017-05-23T19:58:21Z
JayFoxRox
2
/* SS.bin */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== SS.bin ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Field !! Notes
|-
|0 || Level ||
|-
|1 || Challenge id ||
|-
|2 || Challenge value ||
|-
|6 || Response modifier ||
|-
|7 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Field !! Notes
|-
|3 || Start PSN ||
|-
|6 || End PSN ||
|}
Overall format (2048 Bytes):
{| class="wikitable"
! Offset !! Field !! Notes
|-
|0 || Bookversion and Booktype ||
|-
|768 || Version of challenge table ||
|-
|769 || Number of challenge entries ||
|-
|770 || Challenge entries ||
|-
|1633 || 16 security sector ranges ||
|-
|1840 || 16 security sector ranges || Copy from Offset 1633
|-
|}
Note that this information is still incomplete!
==== DMI.bin ====
2048 Bytes
==== PFI.bin ====
2048 Bytes
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
1b5e6e0823a67f922ea065417c03c96035061de1
5354
5352
2017-05-23T20:22:56Z
JayFoxRox
2
/* SS.bin */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== SS.bin ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Field !! Notes
|-
|0 || Level ||
|-
|1 || Challenge id ||
|-
|2 || Challenge value ||
|-
|6 || Response modifier ||
|-
|7 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Field !! Notes
|-
|3 || Start PSN ||
|-
|6 || End PSN ||
|}
Overall format (2048 Bytes):
{| class="wikitable"
! Offset !! Field !! Notes
|-
|0 || Bookversion and Booktype ||
|-
|768 || Version of challenge table ||
|-
|769 || Number of challenge entries ||
|-
|770 || Challenge entries ||
|-
|1633 || 23 security sector ranges || Only 16 of which are used.
|-
|1840 || 23 security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|-
|}
Note that this information is still incomplete!
==== DMI.bin ====
2048 Bytes
==== PFI.bin ====
2048 Bytes
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
f567d54d6be8ce6aea94a9339a798794ca4adf53
5356
5354
2017-05-24T05:41:42Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== SS.bin ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Level ||
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier ||
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Overall format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u4, u4|| Bookversion and Booktype ||
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table ||
|-
|769 || u8 || Number of challenge entries ||
|-
|770 || Challenge entry[] || Challenge entries ||
|-
|1633 || Security sector range[23] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[23] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|-
|}
Note that this information is still incomplete!
==== DMI.bin ====
2048 Bytes
==== PFI.bin ====
2048 Bytes
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
db582461744b6dd9b7e6effb29e9590dfcf7881c
5357
5356
2017-05-24T05:51:33Z
JayFoxRox
2
/* SS.bin */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== SS.bin ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Level ||
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier ||
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Overall format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u4, u4|| Bookversion and Booktype ||
|-
|4 || u32 || Some PSN? ||
|-
|8 || u32 || Some PSN? ||
|-
|12 || u32 || Some PSN? ||
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table ||
|-
|769 || u8 || Number of challenge entries ||
|-
|770 || Challenge entry[] || Challenge entries ||
|-
|1633 || Security sector range[23] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[23] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|-
|}
Note that this information is still incomplete!
==== DMI.bin ====
2048 Bytes
==== PFI.bin ====
2048 Bytes
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
3eee23115e500a120bbe48b7180230966b47c7a4
5358
5357
2017-05-24T06:02:40Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Level ||
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier ||
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Overall format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table ||
|-
|769 || u8 || Number of challenge entries ||
|-
|770 || Challenge entry[] || Challenge entries ||
|-
|1633 || Security sector range[23] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[23] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|-
|}
Note that this information is still incomplete!
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
cd4b961673d5c2eb7c0fb528b15b3aca53d1846e
5360
5358
2017-05-24T12:31:58Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Level ||
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier ||
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table ||
|-
|769 || u8 || Number of challenge entries ||
|-
|770 || Challenge entry[] || Challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || u64 || || Another timestamp? (similar to 1055)
|-
|1191 || u32 || || Unknown
|-
|1210 || Unknown1 || || Unknown
|-
|1530 || Unknown1 || || Unknown
|-
|1633 || Security sector range[23] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[23] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|-
|}
Note that this information is still incomplete!
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
7ec57f9e7c867c1093a1b80c729f497fe896b835
5361
5360
2017-05-24T12:34:07Z
JayFoxRox
2
/* Security Sectors (SS.bin) */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Level ||
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier ||
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table ||
|-
|769 || u8 || Number of challenge entries ||
|-
|770 || Challenge entry[] || Challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown
|-
|1503 || Unknown1 || || Unknown
|-
|1633 || Security sector range[23] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[23] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|-
|}
Note that this information is still incomplete!
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
04d03ea20ceb38be8fa4cf2dc4716ba669f5e177
5363
5361
2017-05-24T12:49:59Z
JayFoxRox
2
/* Security Sectors (SS.bin) */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Level ||
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier ||
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table ||
|-
|769 || u8 || Number of challenge entries ||
|-
|770 || Challenge entry[] || Challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown
|-
|1503 || Unknown1 || || Unknown
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges ||
|-
|1633 || Security sector range[23] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[23] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
e871a8921eae5c3160d7b3835b1a0b0a9ed7e0b0
5364
5363
2017-05-24T13:01:34Z
JayFoxRox
2
/* Security Sectors (SS.bin) */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, 44 bytes SHA-1 hash are generated here to be used as RC4 key to decrypt challenge entries
|-
|1503 || Unknown1 || || Unknown
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
8022f8db45e85c367f52197020e0671aa909065a
5371
5364
2017-05-24T15:02:12Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Different blank background without text / logos (opposite of the "XBOX" text without logo)
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, 44 bytes SHA-1 hash are generated here to be used as RC4 key to decrypt challenge entries
|-
|1503 || Unknown1 || || Unknown
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
4e79108da8d931b7f74b3f3a64a9cf6b13bcba8e
5372
5371
2017-05-24T15:02:59Z
JayFoxRox
2
/* Visible information on ring */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Different blank background without text / logos (opposite of the "XBOX" text without logo)
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, 44 bytes SHA-1 hash are generated here to be used as RC4 key to decrypt challenge entries
|-
|1503 || Unknown1 || || Unknown
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
3c455fdab28852fc3907189a42ee294ed0c57a43
5374
5372
2017-05-24T15:03:49Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Different blank background without text / logos (opposite of the "XBOX" text without logo)
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, 44 bytes SHA-1 hash are generated here to be used as RC4 key to decrypt challenge entries
|-
|1503 || Unknown1 || || Unknown
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
770cbff75963530878fb1f1b53b328504cb42de0
Main Page
0
1
5337
5294
2017-05-23T10:44:54Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
** [[DVD Drive]]
** [[Hard Drive]]
** [[USB]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[Xbox Debug Monitor]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
[[:Category:Games|Games]]
* [[Engine List]]
Emulation
* [[Emulators]]
{{:Main Page/Xbox Live}}
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
b7958f94fbf46ef9c3212321a7a4f75748706bc5
Star Wars: Jedi Knight: Jedi Academy
0
3724
5338
2017-05-23T10:53:00Z
JayFoxRox
2
Created page with "The game source code has been released under the GPLv2: https://github.com/grayj/Jedi-Academy"
wikitext
text/x-wiki
The game source code has been released under the GPLv2: https://github.com/grayj/Jedi-Academy
7619be4d6c1637f930fc912026feebd3b62e3cd2
5342
5338
2017-05-23T10:56:20Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
The game source code has been released under the GPLv2: https://github.com/grayj/Jedi-Academy
1bed87c7c47da5765b3e00df7db8601465461683
Star Wars: Jedi Knight II: Jedi Outcast
0
3725
5339
2017-05-23T10:53:46Z
JayFoxRox
2
Created page with "The game source code has been released under the GPLv2: https://github.com/grayj/Jedi-Outcast"
wikitext
text/x-wiki
The game source code has been released under the GPLv2: https://github.com/grayj/Jedi-Outcast
910156658b22c4ef795924475ffce0650753e09d
5341
5339
2017-05-23T10:56:02Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
The game source code has been released under the GPLv2: https://github.com/grayj/Jedi-Outcast
391180f0d877b89a2d61d7a27a0b92e79e609976
Re-Volt
0
3726
5340
2017-05-23T10:55:42Z
JayFoxRox
2
Created page with "{{Game}} Re-Volt is an unreleased Xbox game. It was included on the XBL beta disc{{citation needed}}. The source code was accidentally and leaked on purpose a couple of times..."
wikitext
text/x-wiki
{{Game}}
Re-Volt is an unreleased Xbox game. It was included on the XBL beta disc{{citation needed}}.
The source code was accidentally and leaked on purpose a couple of times.
Due to copyright issues we can not link or share the code here.
29efb327d2384c24787f27a1f31931508bcb5597
5383
5340
2017-05-24T15:28:53Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
Re-Volt is an unreleased Xbox game. It was included on the XBL beta disc{{citation needed}}.
The source code was leaked accidentally and on purpose a couple of times.
Due to copyright issues we can not link or share the code here.
585e2c09dc7b53e710b47a3a4e5678b6a31cfc44
Tony Hawk's Underground
0
3727
5343
2017-05-23T10:58:45Z
JayFoxRox
2
Created page with "The source code was publicly posted to GitHub without comments or license information on February 13th, 2016. Due to possible copyright issues we can not link or share the cod..."
wikitext
text/x-wiki
The source code was publicly posted to GitHub without comments or license information on February 13th, 2016.
Due to possible copyright issues we can not link or share the code here.
1e19a933c321b5ade6875ba8cea15d576a125f4a
5344
5343
2017-05-23T10:58:57Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
The source code was publicly posted to GitHub without comments or license information on February 13th, 2016.
Due to possible copyright issues we can not link or share the code here.
1fbfe50e48bfa23cc7e4de1b6f7fb6647e04a2ec
Kameo Elements of Power
0
3728
5346
2017-05-23T13:22:26Z
JayFoxRox
2
Created page with "{{Game}} Kameo Elements of Power is an unreleased Xbox game[https://www.unseen64.net/2008/04/16/kameo-xbox-cancelled/]. It eventually came out on Xbox 360. An Xbox version of..."
wikitext
text/x-wiki
{{Game}}
Kameo Elements of Power is an unreleased Xbox game[https://www.unseen64.net/2008/04/16/kameo-xbox-cancelled/]. It eventually came out on Xbox 360.
An Xbox version of the game was leaked.
1bd3572da58a82aaf10da5ffc64d3bc8cabdaf23
User:Codeasm
2
3729
5359
2017-05-24T09:33:51Z
Codeasm
2480
added some usb notes
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Game list ===
To be added, still working on it.
82b12805f700423105026e73390df16c73e39ef4
DVD Drive
0
3704
5362
5326
2017-05-24T12:41:16Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
There are four retail drives known to be used by Microsoft in the retail version of the console.
any xbox dvd drive can be used in any retail xbox. Development kits can use and read debug signed code from these drives.
Other drives that might work are firmware modded PC drives like Kreon drives.
List of Xbox DVD Drive manufacturers
* Thomson
* Philips
* Samsung
* Hitachi-LG (mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
0da4eafdecc232c9ad430f5b72c912b96f796664
Xbe
0
3706
5365
5288
2017-05-24T13:22:27Z
JayFoxRox
2
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| MS || Microsoft
|-
| EA || EA
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
It is expressed in 3 decimal digits here which suggests that the title ID integer will always be below 1000.
'''Examples''':
FIFA 2003:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
Halo (1.02):
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
Halo (1.04):
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
caffda537c4ba6165eb2d0fb8f6d4bb492dea292
5366
5365
2017-05-24T13:24:25Z
JayFoxRox
2
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| MS || Microsoft
|-
| EA || EA
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
FIFA 2003:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
Halo (1.02):
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
Halo (1.04):
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
0b003e521e11411d1ea2e004a94f834a13e533f6
5367
5366
2017-05-24T13:56:27Z
JayFoxRox
2
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH ||
|-
| AQ ||
|-
| AT ||
|-
| AV || Activision
|-
| AY ||
|-
| BA ||
|-
| BM ||
|-
| BR ||
|-
| BS || Bethesda Softworks
|-
| BU ||
|-
| BV ||
|-
| BW ||
|-
| CC ||
|-
| CK ||
|-
| CM ||
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL ||
|-
| EM ||
|-
| ES ||
|-
| FI ||
|-
| FS ||
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG ||
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN ||
|-
| KO ||
|-
| KU ||
|-
| LA ||
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI ||
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE ||
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM ||
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV ||
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD ||
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
FIFA 2003:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
Halo (1.02):
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
Halo (1.04):
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
551d4c870db0dca9d58d16001714823249ab32d0
5368
5367
2017-05-24T13:59:38Z
JayFoxRox
2
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ ||
|-
| AT ||
|-
| AV || Activision
|-
| AY ||
|-
| BA ||
|-
| BM ||
|-
| BR ||
|-
| BS || Bethesda Softworks
|-
| BU ||
|-
| BV ||
|-
| BW ||
|-
| CC ||
|-
| CK ||
|-
| CM ||
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL ||
|-
| EM ||
|-
| ES ||
|-
| FI ||
|-
| FS ||
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG ||
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN ||
|-
| KO ||
|-
| KU ||
|-
| LA ||
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI ||
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE ||
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM ||
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV ||
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD ||
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
FIFA 2003:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
Halo (1.02):
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
Halo (1.04):
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
8ab17219acf73639b643ba0abd47e4b9a387a6cb
5369
5368
2017-05-24T14:39:14Z
Codeasm
2480
/* Title ID */ Zushi Games, formerly Zoo Digital Publishing
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ ||
|-
| AT ||
|-
| AV || Activision
|-
| AY ||
|-
| BA ||
|-
| BM ||
|-
| BR ||
|-
| BS || Bethesda Softworks
|-
| BU ||
|-
| BV ||
|-
| BW ||
|-
| CC ||
|-
| CK ||
|-
| CM ||
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL ||
|-
| EM ||
|-
| ES ||
|-
| FI ||
|-
| FS ||
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG ||
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN ||
|-
| KO ||
|-
| KU ||
|-
| LA ||
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI ||
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE ||
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM ||
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV ||
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
FIFA 2003:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number Zushi Games, formerly Zoo Digital Publishing023, version 02, region Europe)
* Title ID:
Halo (1.02):
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
Halo (1.04):
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
4e186f6db2304f78a0873abe9d5acc9e63ed11fb
5370
5369
2017-05-24T14:55:00Z
Codeasm
2480
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ ||
|-
| AT ||
|-
| AV || Activision
|-
| AY ||
|-
| BA ||
|-
| BM ||
|-
| BR ||
|-
| BS || Bethesda Softworks
|-
| BU ||
|-
| BV ||
|-
| BW ||
|-
| CC ||
|-
| CK ||
|-
| CM ||
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL || Enlight Software
|-
| EM ||
|-
| ES || Eidos Interactive
|-
| FI ||
|-
| FS || From Software
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG ||
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN ||
|-
| KO ||
|-
| KU ||
|-
| LA || Lukas Arts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI ||
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE || Sega
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV ||
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
FIFA 2003:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number Zushi Games, formerly Zoo Digital Publishing023, version 02, region Europe)
* Title ID:
Halo (1.02):
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
Halo (1.04):
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
f8a7608fb20b384d92fcd37417b90de6f63c651a
5376
5370
2017-05-24T15:05:28Z
JayFoxRox
2
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ ||
|-
| AT ||
|-
| AV || Activision
|-
| AY ||
|-
| BA ||
|-
| BM ||
|-
| BR ||
|-
| BS || Bethesda Softworks
|-
| BU ||
|-
| BV ||
|-
| BW ||
|-
| CC ||
|-
| CK ||
|-
| CM ||
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL || Enlight Software
|-
| EM ||
|-
| ES || Eidos Interactive
|-
| FI ||
|-
| FS || From Software
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG ||
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN ||
|-
| KO ||
|-
| KU ||
|-
| LA || Lukas Arts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI ||
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE || Sega
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV ||
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
7e3a1d2b00d1c85610c4bb7a5e7a4b3f55218165
5384
5376
2017-05-24T15:36:31Z
JayFoxRox
2
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ ||
|-
| AT ||
|-
| AV || Activision
|-
| AY ||
|-
| BA ||
|-
| BM ||
|-
| BR ||
|-
| BS || Bethesda Softworks
|-
| BU ||
|-
| BV ||
|-
| BW ||
|-
| CC ||
|-
| CK ||
|-
| CM ||
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL || Enlight Software
|-
| EM ||
|-
| ES || Eidos Interactive
|-
| FI ||
|-
| FS || From Software
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG ||
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN ||
|-
| KO ||
|-
| KU ||
|-
| LA || Lucas Arts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI ||
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE || SEGA
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV ||
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
374f91040d0f539c241e3434eb120f2a55215242
FIFA Soccer 2003
0
3730
5373
2017-05-24T15:03:29Z
JayFoxRox
2
Created page with "{{Game}}"
wikitext
text/x-wiki
{{Game}}
77b07bee7f858b1884e6e97e303dfe5414c00281
Halo: Combat Evolved
0
3731
5375
2017-05-24T15:05:07Z
JayFoxRox
2
Created page with "{{Game}}"
wikitext
text/x-wiki
{{Game}}
77b07bee7f858b1884e6e97e303dfe5414c00281
Grand Theft Auto III
0
3732
5377
2017-05-24T15:12:41Z
JayFoxRox
2
Created page with "{{Game}} See https://github.com/aap/skygfx_vc for a re-implementation of the Xbox graphics features for PC."
wikitext
text/x-wiki
{{Game}}
See https://github.com/aap/skygfx_vc for a re-implementation of the Xbox graphics features for PC.
13f16ed7be31c7305d2f6379be4828a3e9c4c710
5381
5377
2017-05-24T15:27:55Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
See https://github.com/aap/skygfx_vc for a re-implementation of the Xbox graphics features for PC.
The source code was illegally offered for sale in the past.
3e7c0df30c3e6b16b611cb4bcecddaf97edaffc0
Grand Theft Auto: Vice City
0
3733
5378
2017-05-24T15:14:18Z
JayFoxRox
2
Created page with "{{Game}} See https://github.com/aap/skygfx_vc for a re-implementation of the Xbox graphics features for PC. This game was originally planned to be an add-on for Grand Theft..."
wikitext
text/x-wiki
{{Game}}
See https://github.com/aap/skygfx_vc for a re-implementation of the Xbox graphics features for PC.
This game was originally planned to be an add-on for [[Grand Theft Auto III]]. The games still share the same engine.
Information on the [[Grand Theft Auto III]] article might also be relevant to this game.
f0b42bfb4ed064013bdb0a176c635b5df0675288
5382
5378
2017-05-24T15:28:10Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
See https://github.com/aap/skygfx_vc for a re-implementation of the Xbox graphics features for PC.
The source code was illegally offered for sale in the past.
This game was originally planned to be an add-on for [[Grand Theft Auto III]]. The games still share the same engine.
Information on the [[Grand Theft Auto III]] article might also be relevant to this game.
7972c39367476623e0790f537e0a82d765ee1bfe
Grand Theft Auto: San Andreas
0
3734
5379
2017-05-24T15:25:16Z
JayFoxRox
2
Created page with "{{Game}} See https://github.com/aap/skygfx for a re-implementation of the Xbox graphics features for PC. This game shares some technical aspects with [[Grand Theft Auto III]]..."
wikitext
text/x-wiki
{{Game}}
See https://github.com/aap/skygfx for a re-implementation of the Xbox graphics features for PC.
This game shares some technical aspects with [[Grand Theft Auto III]] and [[Grand Theft Auto: Vice City]].
== Reverse engineering by aap ==
aap has reverse engineered a lot for skygfx.
Some of these files might be for [[Grand Theft Auto III]] or [[Grand Theft Auto: Vice City]]. They come from a folder for all GTA research
=== Shader used for cars ===
==== Shader 1 ====
<pre>
; c14 0.0 0.5 1.0 2.0
; c26 specular
; c27 spec, fresnel, 0.6, power
dp4 r3.x, v0, c4
dp4 r3.y, v0, c5
dp4 r3.z, v0, c6
add r2.xyz, c12.xyzz, -r3.xyzz
dp3 r0.x, v1.xyzz, c4.xyzz
dp3 r2.w, r2.xyzz, r2.xyzz
+mov oD0.w, c14.z
dp3 r0.y, v1.xyzz, c5.xyzz
dp3 r0.z, v1.xyzz, c6.xyzz
+rsq r1.w, r2.w
mov r5.w, c14.w
mul r2.xyz, r2.xyzz, r1.w ; r2: normalized view vector
dp3 r0.w, r0.xyzz, r0.xyzz
add r4.xyz, r2.xyzz, -c13.xyzz
mov r11.w, c27.w
+rsq r1.w, r0.w
dp3 r4.w, r4.xyzz, r4.xyzz
mul r0.xyz, r0.xyzz, r1.w ; r0: normalized world normal
add r10.xyz, r2.xyzz, -c18.xyzz
mul r11.z, c27.w, r5.w
+rsq r1.w, r4.w
dp3 r4.w, r10.xyzz, r10.xyzz
add r9.yzw, r2.yyzx, -c19.yyzx
mul r4.xyz, r4.xyzz, r1.w
dp3 r4.w, r9.wyzz, r9.wyzz
+rsq r1.w, r4.w
add r8.xzw, r2.yyzx, -c20.yyzx
dp3 r10.w, r4.xyzz, r0.xyzz
mul r4.xyz, r10.xyzz, r1.w
+rsq r1.x, r4.w
dp3 r4.w, r8.wxzz, r8.wxzz
add r10.xyz, r2.xyzz, -c21.xyzz
max r11.x, r10.w, c14.x
+rsq r1.w, r4.w
dp3 r10.w, r4.xyzz, r0.xyzz
mul r4.xyz, r9.wyzz, r1.x
+lit r1.z, r11.xxxw
dp3 r4.w, r10.xyzz, r10.xyzz
max r11.y, r10.w, c14.x
dp3 r11.x, r4.xyzz, r0.xyzz
mul r4.xyz, r8.wxzz, r1.w
+rsq r1.x, r4.w
mul r8.xyz, r1.z, c26.xyzz ; direct light
mul r11.w, c27.w, r5.w
+lit r1.z, r11.yyyz
max r11.y, r11.x, c14.x
dp3 r11.x, r4.xyzz, r0.xyzz
mul r4.xyz, r10.xyzz, r1.x
dp4 r6.y, v0, c0
dp4 r6.z, v0, c1
dp4 r6.x, v0, c2
+dp4 oFog.x, v0, c2
mad r8.xyz, r1.z, c22.xyzz, r8.xyzz ; add extra 1
mul r11.w, c27.w, r5.w
+lit r1.z, r11.yyyw
max r11.y, r11.x, c14.x
+mov oPos.xyz, r6.yzxw
dp3 r11.x, r4.xyzz, r0.xyzz
dp4 oPos.w, v0, c3
mad r8.xyz, r1.z, c23.xyzz, r8.xyzz ; add extra 2
mul r11.w, c27.w, r5.w
+lit r1.z, r11.yyyw
max r11.y, r11.x, c14.x
+rcc r1.x, r12.w
mad r8.xyz, r1.z, c24.xyzz, r8.xyzz ; add extra 3
mul oPos.xyz, r12.xyzz, c-38.xyzz
+lit r1.z, r11.yyyw
mad oD0.xyz, r1.z, c25.xyzz, r8.xyzz ; add extra 4
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
==== Shader 2 ====
<pre>
; v0 vertex
; v1 normal
; v2 tex coord
; c0 c1 c2 c3 worldviewproj matrix
; c4 c5 c6 world matrix
; c8 c9 texture matrix?
; c12 eye position
; c13 direct direction
; c14 0.0 0.5 1.0 2.0
; c15 ambient
; c16 color
; c17 direct color
; c18 c19 c20 c21 extra directions
; c22 c23 c24 c25 extra colors
; c26 specular
; c27 spec, fresnel, 0.6, power
dp3 r0.x, v1.xyzz, c4.xyzz
dp3 r0.y, v1.xyzz, c5.xyzz
dp3 r0.z, v1.xyzz, c6.xyzz
dp4 r3.x, v0, c4
dp3 r0.w, r0.xyzz, r0.xyzz
+mov oT0.xy, v2.xyyy
dp4 r3.y, v0, c5
dp4 r3.z, v0, c6
+rsq r1.w, r0.w
add r2.xyz, c12.xyzz, -r3.xyzz
mul r0.xyz, r0.xyzz, r1.w ; r0.xyz: normalized world-normal
dp3 r2.w, r2.xyzz, r2.xyzz
dp3 r0.w, r0.xyzz, -c13.xyzz
dp3 r11.w, r0.xyzz, -c18.xyzz
+rsq r1.w, r2.w
max r0.w, r0.w, c14.x
mul r2.xyz, r2.xyzz, r1.w ; r2: normalized world-view-vector
dp3 r7.x, r2.xyzz, r0.xyzz
mul r8.xyz, r0.w, c16.xyzz ; direct color
max r5.x, r7.x, c14.x
mov r11.xyz, c16
+mov oD0.w, c16
max r0.w, r11.w, c14.x
dp3 r11.w, r0.xyzz, -c19.xyzz
mul r6.x, r7.x, c14.w
add r5.x, c14.z, -r5.x
mad r8.xyz, c15.xyzz, r11.xyzz, r8.xyzz ; add ambient color
mul r6.yzw, r0.w, c22.yyzx
max r0.w, r11.w, c14.x
dp3 r11.w, r0.xyzz, -c20.xyzz
mad r11.xyz, r6.x, r0.xyzz, -r2.xyzz
mul r6.x, r5.x, r5.x
dp4 r10.y, v0, c0
dp4 r10.z, v0, c1
dp4 r10.x, v0, c2
+dp4 oFog.x, v0, c2
mad r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz ; add extra light 1
mul r6.yzw, r0.w, c23.yyzx
+mov oPos.xyz, r10.yzxw
max r0.w, r11.w, c14.x
dp3 r0.x, r0.xyzz, -c21.xyzz
dp3 r11.x, r11.xyzz, c8.xyzz
mul r6.x, r6.x, r6.x
mov r11.w, c27.y
dp4 oPos.w, v0, c3
mad r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz ; add extra light 2
mul r6.yzw, r0.w, c24.yyzx
+rcc r1.x, r12.w
max r0.w, r0.x, c14.x
dp3 r11.y, r11.xyzz, c9.xyzz
mul r5.x, r5.x, r6.x
add r7.x, c14.z, -r11.w
mad r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz ; add extra light 3
mul r6.xyz, r0.w, c25.xyzz
mul r11.yw, r11.yyyx, c14.y
mad r5.x, r7.x, r5.x, c27.y
mul oPos.xyz, r12.xyzz, c-38.xyzz
mad oD0.xyz, r6.xyzz, c16.xyzz, r8.xyzz ; add extra light 4
add oT1.xy, r11.wyyy, c14.y
mul oD1, r5.x, c27.x
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
=== Gloss shader ===
<pre>
; v0 vertex pos
; v2 tex coord
; c0-c3 matrix
; c4-c7 world matrix
; c12 eye position
; c13 light direction
; c26 pipeline data...
; c27 0, 0, 0, 8.0
; c28 0, 0, 1, 1
; c29 0.5, 0.5, 0.5, 0.5
dp4 r3.x, v0, c4
dp4 r3.y, v0, c5
dp4 r3.z, v0, c6
add r2.xyz, c12.xyzz, -r3.xyzz
dp4 r6.x, v0, c0
dp3 r2.w, r2.xyzz, r2.xyzz
+mov oT0, v2
dp4 r6.y, v0, c1
dp4 r6.z, v0, c2
+rsq r1.w, r2.w
dp4 oPos.w, v0, c3
mul r2.xyz, r2.xyzz, r1.w ; r2: view vector
+mov oPos.xyz, r6
mov r5.xyz, c28.xyzz
+rcc r1.x, r12.w
add r4.xyz, r2.xyzz, c13.xyzz
mul oPos.xyz, r12.xyzz, c-38.xyzz
dp3 r4.w, r4.xyzz, r4.xyzz
+mov oFog.xyz, c26.xyzz
mad oD0.xyz, r5.xyzz, c29.xyzz, c29.xyzz
rsq r4.w, r4.w
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
mul r5.xyz, r4.xyzz, r4.w
mad oD1.xyz, r5.xyzz, c29.xyzz, c29.xyzz
</pre>
<pre>
typedef struct _D3DPixelShaderDef
{
DWORD PSAlphaInputs[8]; // Alpha inputs for each stage
00000000
00000000
00000000
cdc81010
DWORD PSFinalCombinerInputsABCD; // Final combiner inputs
130f0000
DWORD PSFinalCombinerInputsEFG; // Final combiner inputs (continued)
0d081c80
DWORD PSConstant0[8]; // C0 for each stage
DWORD PSConstant1[8]; // C1 for each stage
DWORD PSAlphaOutputs[8]; // Alpha output for each stage
00000000
00000000
00000000
000000c0
DWORD PSRGBInputs[8]; // RGB inputs for each stage
44450000
PS_REGISTER_V0
PS_INPUTMAPPING_EXPAND_NORMAL
PS_REGISTER_V1
PS_INPUTMAPPING_EXPAND_NORMAL
cdcd0000
PS_REGISTER_R1
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_R1
PS_INPUTMAPPING_SIGNED_IDENTITY
cdcd0000
cdcd0000
DWORD PSCompareMode; // Compare modes for clipplane texture mode
DWORD PSFinalCombinerConstant0; // C0 in final combiner
DWORD PSFinalCombinerConstant1; // C1 in final combiner
DWORD PSRGBOutputs[8]; // Stage 0 RGB outputs
000020d0
PS_REGISTER_R1
PS_COMBINEROUTPUT_AB_DOT_PRODUCT
PS_REGISTER_ZERO
000000d0
PS_REGISTER_R1
PS_COMBINEROUTPUT_AB_MULTIPLY
000000d0
000000d0
DWORD PSCombinerCount; // Active combiner count (Stages 0-7)
00011104
4
PS_COMBINERCOUNT_MUX_MSB
PS_COMBINERCOUNT_UNIQUE_C0
PS_COMBINERCOUNT_UNIQUE_C1
DWORD PSTextureModes; // Texture addressing modes
00000001
PS_TEXTUREMODES_PROJECT2D
DWORD PSDotMapping; // Input mapping for dot product modes
DWORD PSInputTexture; // Texture source for some texture modes
DWORD PSC0Mapping; // Mapping of c0 regs to D3D constants
DWORD PSC1Mapping; // Mapping of c1 regs to D3D constants
DWORD PSFinalCombinerConstants; // Final combiner constant mapping
} D3DPIXELSHADERDEF;
</pre>
=== San Andreas Car Shaders ===
These shaders are picked depending on the following flags:
<pre>
1 default
2 refl && !spec && lit
3 env && !lit
env && !spec && lit
4 spec && lit
5 refl && spec && lit
6 env && spec && lit
</pre>
==== Shader 1 ====
<pre>
; c0-3 matrix
; c4-6 world/normal matrix
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
dp3 r0.y, v1, c5
dp3 r0.x, v1, c4
+mov oFog.x, r12.w
dp3 r0.z, v1, c6
mov r0.w, c20
+mov oT0, v2
mov r2, c15
dp3 r0.xyz, r0, -c16
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
max r0.xyz, r0.xyzz, c32.x
min r0.xyz, r0.xyzz, c32.y
mul r0.xyz, r0, c13
mul r0.xyz, r0, c20
mad oD0, r2, c21, r0
mad oPos.xyz, r12, r1.x, c-37
</pre>
==== Shader 2 ====
<pre>
; v0 position
; v1 normal
; v2 tex coord
; c0-3 matrix
; c4-6 world/normal matrix
; c12 eye
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp3 r0.x, v1.xyzz, c4.xyzz
dp3 r0.y, v1.xyzz, c5.xyzz
dp3 r0.z, v1.xyzz, c6.xyzz
dp4 oPos.w, v0, c3
dp3 r11.x, r0.xyzz, c8.xyzz
+mov oT0, v2
dp3 r11.y, r0.xyzz, c9.xyzz
+rcc r1.x, r12.w
dp3 r11.z, r0.xyzz, c10.xyzz
+mov oFog.x, r12.w
dp3 r0.w, r0.xyzz, -c16.xyzz
dp3 r11.w, r11.xyzz, r11.xyzz
max r0.x, r0.w, c32.x
min r0.x, r0.x, c32.y
+rsq r1.w, r11.w
mov r10.y, c32.y
mul r10.zw, r11.yyyx, r1.w
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
mul r0.xyz, r0.x, c13.xyzz
mul r0.xyz, r0.xyzz, c20.xyzz
mov r0.w, c20.w
mov r2, c15
dp3 r11.x, r10.wzyy, c24.xyzz
dp3 r11.y, r10.wzyy, c25.xyzz
mov r11.z, c32.y
mul oPos.xyz, r12.xyzz, c-38.xyzz
mad oD0, r2, c21, r0
mov oT1, r11.xyzz
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
==== Shader 3 ====
<pre>
; v0 position
; v1 normal
; v2 tex coord
; c0-3 matrix
; c4-6 world/normal matrix
; c12 eye
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp3 r0.x, v1.xyzz, c4.xyzz
dp3 r0.y, v1.xyzz, c5.xyzz
dp3 r0.z, v1.xyzz, c6.xyzz
dp4 oPos.w, v0, c3
dp3 r0.w, r0.xyzz, -c16.xyzz
+mov oT0, v2
mov r11.xz, v3.xxyy
+rcc r1.x, r12.w
max r0.x, r0.w, c32.x
+mov oFog.x, r12.w
mov r11.y, c32.y
min r0.x, r0.x, c32.y
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
mul r0.xyz, r0.x, c13.xyzz
mul r0.xyz, r0.xyzz, c20.xyzz
mov r0.w, c20.w
mov r2, c15
dp3 r10.w, r11.xzyy, c24.xyzz
dp3 r10.y, r11.xzyy, c25.xyzz
mov r10.z, v3.w
mul oPos.xyz, r12.xyzz, c-38.xyzz
mad oD0, r2, c21, r0
mov oT1, r10.wyzz
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
==== Shader 4 ====
<pre>
; v0 position
; v1 normal
; v2 tex coord
; c0-3 matrix
; c4-6 world/normal matrix
; c12 eye
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp4 r10.x, v0, c4
dp4 r10.y, v0, c5
dp4 r10.z, v0, c6
dp3 r11.x, v1.xyzz, c4.xyzz
add r0.xyz, -r10.xyzz, c12.xyzz
dp3 r11.y, v1.xyzz, c5.xyzz
dp3 r11.w, r0.xyzz, r0.xyzz
+mov oD0.w, c20.w
dp3 r11.z, v1.xyzz, c6.xyzz ; r11.xyz world normal
dp4 oPos.w, v0, c3
+rsq r1.x, r11.w
dp3 r4.x, r11.xyzz, -c16.xyzz ; diffuse factor
+mov oT0, v2
mul r0.xyz, r0.xyzz, r1.x ; r0.xyz view vector
+rcc r1.y, r12.w
mul r4.xyz, r4.x, c13.xyzz
+mov oFog.x, r12.w
add r2.xyz, r0.xyzz, -c16.xyzz
mul r4.xyz, r4.xyzz, c20.xyzz
dp3 r11.w, r2.xyzz, r2.xyzz
mul r4.xyz, r4.xyzz, c32.z
dp4 oPos.x, v0, c0
+rsq r1.x, r11.w
dp4 oPos.y, v0, c1
mul r2.xyz, r2.xyzz, r1.x ; r2.xyz spec vector
dp3 r3.x, r11.xyzz, r2.xyzz
dp4 oPos.z, v0, c2
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.xyz, r3.x, c14.xyzz
mul r3.xyz, r3.xyzz, c22.xyzz
mul r3.xyz, r3.xyzz, c32.z
add r0.xyz, r4.xyzz, r3.xyzz
mov r2.xyz, c15.xyzz
mad r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
mul oPos.xyz, r12.xyzz, c-38.xyzz
mov oD0.xyz, r0
mad oPos.xyz, r12.xyzz, r1.y, c-37.xyzz
</pre>
==== Shader 5 ====
<pre>
dp3 r11.x, v1.xyzz, c4.xyzz
dp3 r11.y, v1.xyzz, c5.xyzz
dp3 r11.z, v1.xyzz, c6.xyzz
dp4 r10.x, v0, c4
dp4 r10.y, v0, c5
dp4 r10.z, v0, c6
dp3 r4.x, r11.xyzz, -c16.xyzz
+mov oT0, v2
add r0.xyz, -r10.xyzz, c12.xyzz
dp3 r10.w, r11.xyzz, c8.xyzz
dp3 r11.w, r0.xyzz, r0.xyzz
+mov oD0.w, c20.w
dp3 r10.y, r11.xyzz, c9.xyzz
mul r4.xyz, r4.x, c13.xyzz
+rsq r1.x, r11.w
dp3 r10.z, r11.xyzz, c10.xyzz
mul r0.xyz, r0.xyzz, r1.x
add r2.xyz, r0.xyzz, -c16.xyzz
dp3 r11.w, r10.wyzz, r10.wyzz
dp3 r10.x, r2.xyzz, r2.xyzz
mul r4.xyz, r4.xyzz, c20.xyzz
+rsq r1.w, r11.w
dp4 oPos.w, v0, c3
+rsq r1.x, r10.x
mul r4.xyz, r4.xyzz, c32.z
mul r2.xyz, r2.xyzz, r1.x
+rcc r1.y, r12.w
mul r10.zw, r10.yyyw, r1.w
+mov oFog.x, r12.w
dp3 r3.x, r11.xyzz, r2.xyzz
mov r10.y, c32.y
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.xyz, r3.x, c14.xyzz
mul r3.xyz, r3.xyzz, c22.xyzz
mul r3.xyz, r3.xyzz, c32.z
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
add r0.xyz, r4.xyzz, r3.xyzz
mov r2.xyz, c15.xyzz
mad r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
dp3 r11.w, r10.wzyy, c24.xyzz
dp3 r11.y, r10.wzyy, c25.xyzz
+mov oD0.xyz, r0
mov r11.z, c32.y
mul oPos.xyz, r12.xyzz, c-38.xyzz
mov oT1, r11.wyzz
mad oPos.xyz, r12.xyzz, r1.y, c-37.xyzz
</pre>
==== Shader 6 ====
<pre>
; v0 position
; v1 normal
; v2 tex coord 1
; v3 tex coord 2
; c0-3 matrix
; c4-6 world/normal matrix
; c12 eye
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp4 r10.x, v0, c4
dp4 r10.y, v0, c5
dp4 r10.z, v0, c6
dp3 r11.x, v1.xyzz, c4.xyzz
add r0.xyz, -r10.xyzz, c12.xyzz
dp3 r11.y, v1.xyzz, c5.xyzz
dp3 r11.w, r0.xyzz, r0.xyzz
+mov oD0.w, c20.w
dp3 r11.z, v1.xyzz, c6.xyzz ; r11 normal
dp4 oPos.w, v0, c3
+rsq r1.x, r11.w
dp3 r4.x, r11.xyzz, -c16.xyzz
+mov oT0, v2
mul r0.xyz, r0.xyzz, r1.x ; r0 view vector
+rcc r1.y, r12.w
mul r4.xyz, r4.x, c13.xyzz
+mov oFog.x, r12.w
add r2.xyz, r0.xyzz, -c16.xyzz
mul r4.xyz, r4.xyzz, c20.xyzz
dp3 r11.w, r2.xyzz, r2.xyzz
mul r4.xyz, r4.xyzz, c32.z ; r4 diffuse term
mov r10.zw, v3.yyyx
+rsq r1.x, r11.w
mov r10.y, c32.y
mul r2.xyz, r2.xyzz, r1.x
dp3 r3.x, r11.xyzz, r2.xyzz
dp4 oPos.x, v0, c0
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.xyz, r3.x, c14.xyzz
mul r3.xyz, r3.xyzz, c22.xyzz
mul r3.xyz, r3.xyzz, c32.z ; r3 specular term
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
add r0.xyz, r4.xyzz, r3.xyzz
mov r2.xyz, c15.xyzz
mad r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
dp3 r11.w, r10.wzyy, c24.xyzz
dp3 r11.y, r10.wzyy, c25.xyzz
+mov oD0.xyz, r0
mov r11.z, v3.w
mul oPos.xyz, r12.xyzz, c-38.xyzz
mov oT1, r11.wyzz
mad oPos.xyz, r12.xyzz, r1.y, c-37.xyzz
</pre>
=== Shader used for grass ===
<pre>
dp4 oPos.w, v0, c3
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
+rcc r1.x, r12.w
dp4 oPos.z, v0, c2
mov oFog.x, r12.w
mul oPos.xyz, r12.xyzz, c-38.xyzz
mov oT0, v1
mov oD0, c20
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
=== Pixelshader used for world objects (?) ===
<pre>
typedef struct _D3DPixelShaderDef
{
DWORD PSAlphaInputs[8]; // Alpha inputs for each stage
14181010
PS_REGISTER_V0
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_T0
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_IDENTITY
dcd11010
PS_REGISTER_R0
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_C0
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_IDENTITY
DWORD PSFinalCombinerInputsABCD; // Final combiner inputs
130c0300
PS_REGISTER_FOG
PS_CHANNEL_ALPHA
PS_REGISTER_R0
PS_REGISTER_FOG
DWORD PSFinalCombinerInputsEFG; // Final combiner inputs (continued)
00001c80
PS_REGISTER_R0
PS_CHANNEL_ALPHA
PS_FINALCOMBINERSETTING_CLAMP_SUM
DWORD PSConstant0[8]; // C0 for each stage
ffffffff
ffffffff
DWORD PSConstant1[8]; // C1 for each stage
DWORD PSAlphaOutputs[8]; // Alpha output for each stage
000000c0
PS_REGISTER_DISCARD
PS_REGISTER_R0
000000c0
PS_REGISTER_DISCARD
PS_REGISTER_R0
DWORD PSRGBInputs[8]; // RGB inputs for each stage
0804c149
PS_REGISTER_T0
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_V0
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_C0
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_T1
PS_INPUTMAPPING_EXPAND_NORMAL
cdcc20cc
PS_REGISTER_R1
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_R0
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_INVERT
PS_REGISTER_R0
PS_INPUTMAPPING_SIGNED_IDENTITY
DWORD PSCompareMode; // Compare modes for clipplane texture mode
DWORD PSFinalCombinerConstant0; // C0 in final combiner
DWORD PSFinalCombinerConstant1; // C1 in final combiner
DWORD PSRGBOutputs[8]; // Stage 0 RGB outputs
000000cd
PS_REGISTER_R1
PS_COMBINEROUTPUT_CD_MULTIPLY
PS_REGISTER_R0
PS_COMBINEROUTPUT_AB_MULTIPLY
00000c00
PS_REGISTER_R0
PS_COMBINEROUTPUT_AB_CD_SUM
DWORD PSCombinerCount; // Active combiner count (Stages 0-7)
00011102
2
PS_COMBINERCOUNT_MUX_MSB
PS_COMBINERCOUNT_UNIQUE_C0
PS_COMBINERCOUNT_UNIQUE_C1
DWORD PSTextureModes; // Texture addressing modes
00000021
PS_TEXTUREMODES_PROJECT2D
PS_TEXTUREMODES_PROJECT2D
DWORD PSDotMapping; // Input mapping for dot product modes
DWORD PSInputTexture; // Texture source for some texture modes
DWORD PSC0Mapping; // Mapping of c0 regs to D3D constants
ffffff00
DWORD PSC1Mapping; // Mapping of c1 regs to D3D constants
ffffffff
DWORD PSFinalCombinerConstants; // Final combiner constant mapping
000001ff
} D3DPIXELSHADERDEF;
</pre>
=== Xbox vertex formats ===
<pre>
0000XXXC 44443333 2222111 NNNNVVVV
V N:
1 0x34 D3DVSDT_PBYTE3
2 0x35 D3DVSDT_SHORT3
3 0x31 D3DVSDT_NORMSHORT3
4 0x16 D3DVSDT_NORMPACKED3 default normal
5 0x32 D3DVSDT_FLOAT3 default position
C:
0x40 D3DVSDT_D3DCOLOR
T1-4:
1 0x24 D3DVSDT_PBYTE2
2 0x25 D3DVSDT_SHORT2
3 0x21 D3DVSDT_NORMSHORT2
4 0x16 D3DVSDT_NORMPACKED3
5 0x22 D3DVSDT_FLOAT2 default
X: tangent? XXX is index of tex coord set - 1 that has the data
anything 0x16 D3DVSDT_NORMPACKED3
0x16 D3DVSDT_NORMPACKED3
default:
0 position
2 normal
3 color
9-C tex coords
skin:
stream 0
0 position
3 normal
4 color
5-8 tex coords
stream 1
1 weights D3DVSDT_PBYTEn
2 indices D3DVSDT_SHORTn
normmap:
40320000 ; vertex
40160001 ; normal
40220002 ; tex coords
40160003 ; ?
40160004 ; ?
40320000 ; vertex
40160001 ; normal
40400002 ; color
40220003 ; tex coords
40160004 ; ?
40160005 ; ?
20000000h
40320000h ; vertex 5
40160001h ; normal 4
40220002h ; tex coord
40400004h ; color 5
0FFFFFFFFh
</pre>
b18fb4681b247813d44a1eb187248e511be968d4
5380
5379
2017-05-24T15:27:42Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
See https://github.com/aap/skygfx for a re-implementation of the Xbox graphics features for PC.
This game shares some technical aspects with [[Grand Theft Auto III]] and [[Grand Theft Auto: Vice City]].
At least some parts of the games source code have been leaked into the public.
The source code was illegally offered for sale in the past.
== Reverse engineering by aap ==
aap has reverse engineered a lot for skygfx.
Some of these files might be for [[Grand Theft Auto III]] or [[Grand Theft Auto: Vice City]]. They come from a folder for all GTA research
=== Shader used for cars ===
==== Shader 1 ====
<pre>
; c14 0.0 0.5 1.0 2.0
; c26 specular
; c27 spec, fresnel, 0.6, power
dp4 r3.x, v0, c4
dp4 r3.y, v0, c5
dp4 r3.z, v0, c6
add r2.xyz, c12.xyzz, -r3.xyzz
dp3 r0.x, v1.xyzz, c4.xyzz
dp3 r2.w, r2.xyzz, r2.xyzz
+mov oD0.w, c14.z
dp3 r0.y, v1.xyzz, c5.xyzz
dp3 r0.z, v1.xyzz, c6.xyzz
+rsq r1.w, r2.w
mov r5.w, c14.w
mul r2.xyz, r2.xyzz, r1.w ; r2: normalized view vector
dp3 r0.w, r0.xyzz, r0.xyzz
add r4.xyz, r2.xyzz, -c13.xyzz
mov r11.w, c27.w
+rsq r1.w, r0.w
dp3 r4.w, r4.xyzz, r4.xyzz
mul r0.xyz, r0.xyzz, r1.w ; r0: normalized world normal
add r10.xyz, r2.xyzz, -c18.xyzz
mul r11.z, c27.w, r5.w
+rsq r1.w, r4.w
dp3 r4.w, r10.xyzz, r10.xyzz
add r9.yzw, r2.yyzx, -c19.yyzx
mul r4.xyz, r4.xyzz, r1.w
dp3 r4.w, r9.wyzz, r9.wyzz
+rsq r1.w, r4.w
add r8.xzw, r2.yyzx, -c20.yyzx
dp3 r10.w, r4.xyzz, r0.xyzz
mul r4.xyz, r10.xyzz, r1.w
+rsq r1.x, r4.w
dp3 r4.w, r8.wxzz, r8.wxzz
add r10.xyz, r2.xyzz, -c21.xyzz
max r11.x, r10.w, c14.x
+rsq r1.w, r4.w
dp3 r10.w, r4.xyzz, r0.xyzz
mul r4.xyz, r9.wyzz, r1.x
+lit r1.z, r11.xxxw
dp3 r4.w, r10.xyzz, r10.xyzz
max r11.y, r10.w, c14.x
dp3 r11.x, r4.xyzz, r0.xyzz
mul r4.xyz, r8.wxzz, r1.w
+rsq r1.x, r4.w
mul r8.xyz, r1.z, c26.xyzz ; direct light
mul r11.w, c27.w, r5.w
+lit r1.z, r11.yyyz
max r11.y, r11.x, c14.x
dp3 r11.x, r4.xyzz, r0.xyzz
mul r4.xyz, r10.xyzz, r1.x
dp4 r6.y, v0, c0
dp4 r6.z, v0, c1
dp4 r6.x, v0, c2
+dp4 oFog.x, v0, c2
mad r8.xyz, r1.z, c22.xyzz, r8.xyzz ; add extra 1
mul r11.w, c27.w, r5.w
+lit r1.z, r11.yyyw
max r11.y, r11.x, c14.x
+mov oPos.xyz, r6.yzxw
dp3 r11.x, r4.xyzz, r0.xyzz
dp4 oPos.w, v0, c3
mad r8.xyz, r1.z, c23.xyzz, r8.xyzz ; add extra 2
mul r11.w, c27.w, r5.w
+lit r1.z, r11.yyyw
max r11.y, r11.x, c14.x
+rcc r1.x, r12.w
mad r8.xyz, r1.z, c24.xyzz, r8.xyzz ; add extra 3
mul oPos.xyz, r12.xyzz, c-38.xyzz
+lit r1.z, r11.yyyw
mad oD0.xyz, r1.z, c25.xyzz, r8.xyzz ; add extra 4
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
==== Shader 2 ====
<pre>
; v0 vertex
; v1 normal
; v2 tex coord
; c0 c1 c2 c3 worldviewproj matrix
; c4 c5 c6 world matrix
; c8 c9 texture matrix?
; c12 eye position
; c13 direct direction
; c14 0.0 0.5 1.0 2.0
; c15 ambient
; c16 color
; c17 direct color
; c18 c19 c20 c21 extra directions
; c22 c23 c24 c25 extra colors
; c26 specular
; c27 spec, fresnel, 0.6, power
dp3 r0.x, v1.xyzz, c4.xyzz
dp3 r0.y, v1.xyzz, c5.xyzz
dp3 r0.z, v1.xyzz, c6.xyzz
dp4 r3.x, v0, c4
dp3 r0.w, r0.xyzz, r0.xyzz
+mov oT0.xy, v2.xyyy
dp4 r3.y, v0, c5
dp4 r3.z, v0, c6
+rsq r1.w, r0.w
add r2.xyz, c12.xyzz, -r3.xyzz
mul r0.xyz, r0.xyzz, r1.w ; r0.xyz: normalized world-normal
dp3 r2.w, r2.xyzz, r2.xyzz
dp3 r0.w, r0.xyzz, -c13.xyzz
dp3 r11.w, r0.xyzz, -c18.xyzz
+rsq r1.w, r2.w
max r0.w, r0.w, c14.x
mul r2.xyz, r2.xyzz, r1.w ; r2: normalized world-view-vector
dp3 r7.x, r2.xyzz, r0.xyzz
mul r8.xyz, r0.w, c16.xyzz ; direct color
max r5.x, r7.x, c14.x
mov r11.xyz, c16
+mov oD0.w, c16
max r0.w, r11.w, c14.x
dp3 r11.w, r0.xyzz, -c19.xyzz
mul r6.x, r7.x, c14.w
add r5.x, c14.z, -r5.x
mad r8.xyz, c15.xyzz, r11.xyzz, r8.xyzz ; add ambient color
mul r6.yzw, r0.w, c22.yyzx
max r0.w, r11.w, c14.x
dp3 r11.w, r0.xyzz, -c20.xyzz
mad r11.xyz, r6.x, r0.xyzz, -r2.xyzz
mul r6.x, r5.x, r5.x
dp4 r10.y, v0, c0
dp4 r10.z, v0, c1
dp4 r10.x, v0, c2
+dp4 oFog.x, v0, c2
mad r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz ; add extra light 1
mul r6.yzw, r0.w, c23.yyzx
+mov oPos.xyz, r10.yzxw
max r0.w, r11.w, c14.x
dp3 r0.x, r0.xyzz, -c21.xyzz
dp3 r11.x, r11.xyzz, c8.xyzz
mul r6.x, r6.x, r6.x
mov r11.w, c27.y
dp4 oPos.w, v0, c3
mad r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz ; add extra light 2
mul r6.yzw, r0.w, c24.yyzx
+rcc r1.x, r12.w
max r0.w, r0.x, c14.x
dp3 r11.y, r11.xyzz, c9.xyzz
mul r5.x, r5.x, r6.x
add r7.x, c14.z, -r11.w
mad r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz ; add extra light 3
mul r6.xyz, r0.w, c25.xyzz
mul r11.yw, r11.yyyx, c14.y
mad r5.x, r7.x, r5.x, c27.y
mul oPos.xyz, r12.xyzz, c-38.xyzz
mad oD0.xyz, r6.xyzz, c16.xyzz, r8.xyzz ; add extra light 4
add oT1.xy, r11.wyyy, c14.y
mul oD1, r5.x, c27.x
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
=== Gloss shader ===
<pre>
; v0 vertex pos
; v2 tex coord
; c0-c3 matrix
; c4-c7 world matrix
; c12 eye position
; c13 light direction
; c26 pipeline data...
; c27 0, 0, 0, 8.0
; c28 0, 0, 1, 1
; c29 0.5, 0.5, 0.5, 0.5
dp4 r3.x, v0, c4
dp4 r3.y, v0, c5
dp4 r3.z, v0, c6
add r2.xyz, c12.xyzz, -r3.xyzz
dp4 r6.x, v0, c0
dp3 r2.w, r2.xyzz, r2.xyzz
+mov oT0, v2
dp4 r6.y, v0, c1
dp4 r6.z, v0, c2
+rsq r1.w, r2.w
dp4 oPos.w, v0, c3
mul r2.xyz, r2.xyzz, r1.w ; r2: view vector
+mov oPos.xyz, r6
mov r5.xyz, c28.xyzz
+rcc r1.x, r12.w
add r4.xyz, r2.xyzz, c13.xyzz
mul oPos.xyz, r12.xyzz, c-38.xyzz
dp3 r4.w, r4.xyzz, r4.xyzz
+mov oFog.xyz, c26.xyzz
mad oD0.xyz, r5.xyzz, c29.xyzz, c29.xyzz
rsq r4.w, r4.w
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
mul r5.xyz, r4.xyzz, r4.w
mad oD1.xyz, r5.xyzz, c29.xyzz, c29.xyzz
</pre>
<pre>
typedef struct _D3DPixelShaderDef
{
DWORD PSAlphaInputs[8]; // Alpha inputs for each stage
00000000
00000000
00000000
cdc81010
DWORD PSFinalCombinerInputsABCD; // Final combiner inputs
130f0000
DWORD PSFinalCombinerInputsEFG; // Final combiner inputs (continued)
0d081c80
DWORD PSConstant0[8]; // C0 for each stage
DWORD PSConstant1[8]; // C1 for each stage
DWORD PSAlphaOutputs[8]; // Alpha output for each stage
00000000
00000000
00000000
000000c0
DWORD PSRGBInputs[8]; // RGB inputs for each stage
44450000
PS_REGISTER_V0
PS_INPUTMAPPING_EXPAND_NORMAL
PS_REGISTER_V1
PS_INPUTMAPPING_EXPAND_NORMAL
cdcd0000
PS_REGISTER_R1
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_R1
PS_INPUTMAPPING_SIGNED_IDENTITY
cdcd0000
cdcd0000
DWORD PSCompareMode; // Compare modes for clipplane texture mode
DWORD PSFinalCombinerConstant0; // C0 in final combiner
DWORD PSFinalCombinerConstant1; // C1 in final combiner
DWORD PSRGBOutputs[8]; // Stage 0 RGB outputs
000020d0
PS_REGISTER_R1
PS_COMBINEROUTPUT_AB_DOT_PRODUCT
PS_REGISTER_ZERO
000000d0
PS_REGISTER_R1
PS_COMBINEROUTPUT_AB_MULTIPLY
000000d0
000000d0
DWORD PSCombinerCount; // Active combiner count (Stages 0-7)
00011104
4
PS_COMBINERCOUNT_MUX_MSB
PS_COMBINERCOUNT_UNIQUE_C0
PS_COMBINERCOUNT_UNIQUE_C1
DWORD PSTextureModes; // Texture addressing modes
00000001
PS_TEXTUREMODES_PROJECT2D
DWORD PSDotMapping; // Input mapping for dot product modes
DWORD PSInputTexture; // Texture source for some texture modes
DWORD PSC0Mapping; // Mapping of c0 regs to D3D constants
DWORD PSC1Mapping; // Mapping of c1 regs to D3D constants
DWORD PSFinalCombinerConstants; // Final combiner constant mapping
} D3DPIXELSHADERDEF;
</pre>
=== San Andreas Car Shaders ===
These shaders are picked depending on the following flags:
<pre>
1 default
2 refl && !spec && lit
3 env && !lit
env && !spec && lit
4 spec && lit
5 refl && spec && lit
6 env && spec && lit
</pre>
==== Shader 1 ====
<pre>
; c0-3 matrix
; c4-6 world/normal matrix
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
dp3 r0.y, v1, c5
dp3 r0.x, v1, c4
+mov oFog.x, r12.w
dp3 r0.z, v1, c6
mov r0.w, c20
+mov oT0, v2
mov r2, c15
dp3 r0.xyz, r0, -c16
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
max r0.xyz, r0.xyzz, c32.x
min r0.xyz, r0.xyzz, c32.y
mul r0.xyz, r0, c13
mul r0.xyz, r0, c20
mad oD0, r2, c21, r0
mad oPos.xyz, r12, r1.x, c-37
</pre>
==== Shader 2 ====
<pre>
; v0 position
; v1 normal
; v2 tex coord
; c0-3 matrix
; c4-6 world/normal matrix
; c12 eye
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp3 r0.x, v1.xyzz, c4.xyzz
dp3 r0.y, v1.xyzz, c5.xyzz
dp3 r0.z, v1.xyzz, c6.xyzz
dp4 oPos.w, v0, c3
dp3 r11.x, r0.xyzz, c8.xyzz
+mov oT0, v2
dp3 r11.y, r0.xyzz, c9.xyzz
+rcc r1.x, r12.w
dp3 r11.z, r0.xyzz, c10.xyzz
+mov oFog.x, r12.w
dp3 r0.w, r0.xyzz, -c16.xyzz
dp3 r11.w, r11.xyzz, r11.xyzz
max r0.x, r0.w, c32.x
min r0.x, r0.x, c32.y
+rsq r1.w, r11.w
mov r10.y, c32.y
mul r10.zw, r11.yyyx, r1.w
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
mul r0.xyz, r0.x, c13.xyzz
mul r0.xyz, r0.xyzz, c20.xyzz
mov r0.w, c20.w
mov r2, c15
dp3 r11.x, r10.wzyy, c24.xyzz
dp3 r11.y, r10.wzyy, c25.xyzz
mov r11.z, c32.y
mul oPos.xyz, r12.xyzz, c-38.xyzz
mad oD0, r2, c21, r0
mov oT1, r11.xyzz
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
==== Shader 3 ====
<pre>
; v0 position
; v1 normal
; v2 tex coord
; c0-3 matrix
; c4-6 world/normal matrix
; c12 eye
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp3 r0.x, v1.xyzz, c4.xyzz
dp3 r0.y, v1.xyzz, c5.xyzz
dp3 r0.z, v1.xyzz, c6.xyzz
dp4 oPos.w, v0, c3
dp3 r0.w, r0.xyzz, -c16.xyzz
+mov oT0, v2
mov r11.xz, v3.xxyy
+rcc r1.x, r12.w
max r0.x, r0.w, c32.x
+mov oFog.x, r12.w
mov r11.y, c32.y
min r0.x, r0.x, c32.y
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
mul r0.xyz, r0.x, c13.xyzz
mul r0.xyz, r0.xyzz, c20.xyzz
mov r0.w, c20.w
mov r2, c15
dp3 r10.w, r11.xzyy, c24.xyzz
dp3 r10.y, r11.xzyy, c25.xyzz
mov r10.z, v3.w
mul oPos.xyz, r12.xyzz, c-38.xyzz
mad oD0, r2, c21, r0
mov oT1, r10.wyzz
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
==== Shader 4 ====
<pre>
; v0 position
; v1 normal
; v2 tex coord
; c0-3 matrix
; c4-6 world/normal matrix
; c12 eye
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp4 r10.x, v0, c4
dp4 r10.y, v0, c5
dp4 r10.z, v0, c6
dp3 r11.x, v1.xyzz, c4.xyzz
add r0.xyz, -r10.xyzz, c12.xyzz
dp3 r11.y, v1.xyzz, c5.xyzz
dp3 r11.w, r0.xyzz, r0.xyzz
+mov oD0.w, c20.w
dp3 r11.z, v1.xyzz, c6.xyzz ; r11.xyz world normal
dp4 oPos.w, v0, c3
+rsq r1.x, r11.w
dp3 r4.x, r11.xyzz, -c16.xyzz ; diffuse factor
+mov oT0, v2
mul r0.xyz, r0.xyzz, r1.x ; r0.xyz view vector
+rcc r1.y, r12.w
mul r4.xyz, r4.x, c13.xyzz
+mov oFog.x, r12.w
add r2.xyz, r0.xyzz, -c16.xyzz
mul r4.xyz, r4.xyzz, c20.xyzz
dp3 r11.w, r2.xyzz, r2.xyzz
mul r4.xyz, r4.xyzz, c32.z
dp4 oPos.x, v0, c0
+rsq r1.x, r11.w
dp4 oPos.y, v0, c1
mul r2.xyz, r2.xyzz, r1.x ; r2.xyz spec vector
dp3 r3.x, r11.xyzz, r2.xyzz
dp4 oPos.z, v0, c2
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.xyz, r3.x, c14.xyzz
mul r3.xyz, r3.xyzz, c22.xyzz
mul r3.xyz, r3.xyzz, c32.z
add r0.xyz, r4.xyzz, r3.xyzz
mov r2.xyz, c15.xyzz
mad r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
mul oPos.xyz, r12.xyzz, c-38.xyzz
mov oD0.xyz, r0
mad oPos.xyz, r12.xyzz, r1.y, c-37.xyzz
</pre>
==== Shader 5 ====
<pre>
dp3 r11.x, v1.xyzz, c4.xyzz
dp3 r11.y, v1.xyzz, c5.xyzz
dp3 r11.z, v1.xyzz, c6.xyzz
dp4 r10.x, v0, c4
dp4 r10.y, v0, c5
dp4 r10.z, v0, c6
dp3 r4.x, r11.xyzz, -c16.xyzz
+mov oT0, v2
add r0.xyz, -r10.xyzz, c12.xyzz
dp3 r10.w, r11.xyzz, c8.xyzz
dp3 r11.w, r0.xyzz, r0.xyzz
+mov oD0.w, c20.w
dp3 r10.y, r11.xyzz, c9.xyzz
mul r4.xyz, r4.x, c13.xyzz
+rsq r1.x, r11.w
dp3 r10.z, r11.xyzz, c10.xyzz
mul r0.xyz, r0.xyzz, r1.x
add r2.xyz, r0.xyzz, -c16.xyzz
dp3 r11.w, r10.wyzz, r10.wyzz
dp3 r10.x, r2.xyzz, r2.xyzz
mul r4.xyz, r4.xyzz, c20.xyzz
+rsq r1.w, r11.w
dp4 oPos.w, v0, c3
+rsq r1.x, r10.x
mul r4.xyz, r4.xyzz, c32.z
mul r2.xyz, r2.xyzz, r1.x
+rcc r1.y, r12.w
mul r10.zw, r10.yyyw, r1.w
+mov oFog.x, r12.w
dp3 r3.x, r11.xyzz, r2.xyzz
mov r10.y, c32.y
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.xyz, r3.x, c14.xyzz
mul r3.xyz, r3.xyzz, c22.xyzz
mul r3.xyz, r3.xyzz, c32.z
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
add r0.xyz, r4.xyzz, r3.xyzz
mov r2.xyz, c15.xyzz
mad r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
dp3 r11.w, r10.wzyy, c24.xyzz
dp3 r11.y, r10.wzyy, c25.xyzz
+mov oD0.xyz, r0
mov r11.z, c32.y
mul oPos.xyz, r12.xyzz, c-38.xyzz
mov oT1, r11.wyzz
mad oPos.xyz, r12.xyzz, r1.y, c-37.xyzz
</pre>
==== Shader 6 ====
<pre>
; v0 position
; v1 normal
; v2 tex coord 1
; v3 tex coord 2
; c0-3 matrix
; c4-6 world/normal matrix
; c12 eye
; c13 direct color
; c14 0.7 0.7 0.7 1.0
; c15 ambient color
; c16 light direction
; c20 diff mat
; c21 amb mat
; c22 spec mat
; c32 0, 1, 0.5, 2
; c33 0.3 0.7 0.1 0.01
dp4 r10.x, v0, c4
dp4 r10.y, v0, c5
dp4 r10.z, v0, c6
dp3 r11.x, v1.xyzz, c4.xyzz
add r0.xyz, -r10.xyzz, c12.xyzz
dp3 r11.y, v1.xyzz, c5.xyzz
dp3 r11.w, r0.xyzz, r0.xyzz
+mov oD0.w, c20.w
dp3 r11.z, v1.xyzz, c6.xyzz ; r11 normal
dp4 oPos.w, v0, c3
+rsq r1.x, r11.w
dp3 r4.x, r11.xyzz, -c16.xyzz
+mov oT0, v2
mul r0.xyz, r0.xyzz, r1.x ; r0 view vector
+rcc r1.y, r12.w
mul r4.xyz, r4.x, c13.xyzz
+mov oFog.x, r12.w
add r2.xyz, r0.xyzz, -c16.xyzz
mul r4.xyz, r4.xyzz, c20.xyzz
dp3 r11.w, r2.xyzz, r2.xyzz
mul r4.xyz, r4.xyzz, c32.z ; r4 diffuse term
mov r10.zw, v3.yyyx
+rsq r1.x, r11.w
mov r10.y, c32.y
mul r2.xyz, r2.xyzz, r1.x
dp3 r3.x, r11.xyzz, r2.xyzz
dp4 oPos.x, v0, c0
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.x, r3.x, r3.x
mul r3.xyz, r3.x, c14.xyzz
mul r3.xyz, r3.xyzz, c22.xyzz
mul r3.xyz, r3.xyzz, c32.z ; r3 specular term
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
add r0.xyz, r4.xyzz, r3.xyzz
mov r2.xyz, c15.xyzz
mad r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
dp3 r11.w, r10.wzyy, c24.xyzz
dp3 r11.y, r10.wzyy, c25.xyzz
+mov oD0.xyz, r0
mov r11.z, v3.w
mul oPos.xyz, r12.xyzz, c-38.xyzz
mov oT1, r11.wyzz
mad oPos.xyz, r12.xyzz, r1.y, c-37.xyzz
</pre>
=== Shader used for grass ===
<pre>
dp4 oPos.w, v0, c3
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
+rcc r1.x, r12.w
dp4 oPos.z, v0, c2
mov oFog.x, r12.w
mul oPos.xyz, r12.xyzz, c-38.xyzz
mov oT0, v1
mov oD0, c20
mad oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
</pre>
=== Pixelshader used for world objects (?) ===
<pre>
typedef struct _D3DPixelShaderDef
{
DWORD PSAlphaInputs[8]; // Alpha inputs for each stage
14181010
PS_REGISTER_V0
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_T0
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_IDENTITY
dcd11010
PS_REGISTER_R0
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_C0
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_IDENTITY
DWORD PSFinalCombinerInputsABCD; // Final combiner inputs
130c0300
PS_REGISTER_FOG
PS_CHANNEL_ALPHA
PS_REGISTER_R0
PS_REGISTER_FOG
DWORD PSFinalCombinerInputsEFG; // Final combiner inputs (continued)
00001c80
PS_REGISTER_R0
PS_CHANNEL_ALPHA
PS_FINALCOMBINERSETTING_CLAMP_SUM
DWORD PSConstant0[8]; // C0 for each stage
ffffffff
ffffffff
DWORD PSConstant1[8]; // C1 for each stage
DWORD PSAlphaOutputs[8]; // Alpha output for each stage
000000c0
PS_REGISTER_DISCARD
PS_REGISTER_R0
000000c0
PS_REGISTER_DISCARD
PS_REGISTER_R0
DWORD PSRGBInputs[8]; // RGB inputs for each stage
0804c149
PS_REGISTER_T0
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_V0
PS_INPUTMAPPING_UNSIGNED_IDENTITY
PS_REGISTER_C0
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_T1
PS_INPUTMAPPING_EXPAND_NORMAL
cdcc20cc
PS_REGISTER_R1
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_R0
PS_INPUTMAPPING_SIGNED_IDENTITY
PS_REGISTER_ZERO
PS_INPUTMAPPING_UNSIGNED_INVERT
PS_REGISTER_R0
PS_INPUTMAPPING_SIGNED_IDENTITY
DWORD PSCompareMode; // Compare modes for clipplane texture mode
DWORD PSFinalCombinerConstant0; // C0 in final combiner
DWORD PSFinalCombinerConstant1; // C1 in final combiner
DWORD PSRGBOutputs[8]; // Stage 0 RGB outputs
000000cd
PS_REGISTER_R1
PS_COMBINEROUTPUT_CD_MULTIPLY
PS_REGISTER_R0
PS_COMBINEROUTPUT_AB_MULTIPLY
00000c00
PS_REGISTER_R0
PS_COMBINEROUTPUT_AB_CD_SUM
DWORD PSCombinerCount; // Active combiner count (Stages 0-7)
00011102
2
PS_COMBINERCOUNT_MUX_MSB
PS_COMBINERCOUNT_UNIQUE_C0
PS_COMBINERCOUNT_UNIQUE_C1
DWORD PSTextureModes; // Texture addressing modes
00000021
PS_TEXTUREMODES_PROJECT2D
PS_TEXTUREMODES_PROJECT2D
DWORD PSDotMapping; // Input mapping for dot product modes
DWORD PSInputTexture; // Texture source for some texture modes
DWORD PSC0Mapping; // Mapping of c0 regs to D3D constants
ffffff00
DWORD PSC1Mapping; // Mapping of c1 regs to D3D constants
ffffffff
DWORD PSFinalCombinerConstants; // Final combiner constant mapping
000001ff
} D3DPIXELSHADERDEF;
</pre>
=== Xbox vertex formats ===
<pre>
0000XXXC 44443333 2222111 NNNNVVVV
V N:
1 0x34 D3DVSDT_PBYTE3
2 0x35 D3DVSDT_SHORT3
3 0x31 D3DVSDT_NORMSHORT3
4 0x16 D3DVSDT_NORMPACKED3 default normal
5 0x32 D3DVSDT_FLOAT3 default position
C:
0x40 D3DVSDT_D3DCOLOR
T1-4:
1 0x24 D3DVSDT_PBYTE2
2 0x25 D3DVSDT_SHORT2
3 0x21 D3DVSDT_NORMSHORT2
4 0x16 D3DVSDT_NORMPACKED3
5 0x22 D3DVSDT_FLOAT2 default
X: tangent? XXX is index of tex coord set - 1 that has the data
anything 0x16 D3DVSDT_NORMPACKED3
0x16 D3DVSDT_NORMPACKED3
default:
0 position
2 normal
3 color
9-C tex coords
skin:
stream 0
0 position
3 normal
4 color
5-8 tex coords
stream 1
1 weights D3DVSDT_PBYTEn
2 indices D3DVSDT_SHORTn
normmap:
40320000 ; vertex
40160001 ; normal
40220002 ; tex coords
40160003 ; ?
40160004 ; ?
40320000 ; vertex
40160001 ; normal
40400002 ; color
40220003 ; tex coords
40160004 ; ?
40160005 ; ?
20000000h
40320000h ; vertex 5
40160001h ; normal 4
40220002h ; tex coord
40400004h ; color 5
0FFFFFFFFh
</pre>
ef832c9119e0a945ded93519f38759505bbc3b40
Xbe
0
3706
5385
5384
2017-05-24T16:15:42Z
Codeasm
2480
/* Title ID */ added more publishers, modified LucasArts (No space)
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ ||
|-
| AT ||
|-
| AV || Activision
|-
| AY ||
|-
| BA ||
|-
| BM ||
|-
| BR ||
|-
| BS || Bethesda Softworks
|-
| BU ||
|-
| BV ||
|-
| BW || BBC Multimedia
|-
| CC ||
|-
| CK ||
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL || Enlight Software
|-
| EM ||
|-
| ES || Eidos Interactive
|-
| FI ||
|-
| FS || From Software
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG || Infogrames
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN || Konami
|-
| KO ||
|-
| KU ||
|-
| LA || LucasArts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI || Microïds
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE || SEGA
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV || Vivendi Universal Games
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
334af82240a7ec4231b17adab1ef5de9cca2c757
5386
5385
2017-05-24T16:22:13Z
JayFoxRox
2
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ ||
|-
| AT ||
|-
| AV || Activision
|-
| AY ||
|-
| BA ||
|-
| BM || BAM! Entertainment
|-
| BR ||
|-
| BS || Bethesda Softworks
|-
| BU ||
|-
| BV ||
|-
| BW || BBC Multimedia
|-
| CC ||
|-
| CK ||
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL || Enlight Software
|-
| EM ||
|-
| ES || Eidos Interactive
|-
| FI ||
|-
| FS || From Software
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG || Infogrames
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN || Konami
|-
| KO ||
|-
| KU ||
|-
| LA || LucasArts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI || Microïds
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE || SEGA
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV || Vivendi Universal Games
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
b14082fda8fc9ee7580dd2fb945b80de0768e160
5387
5386
2017-05-24T18:06:05Z
Codeasm
2480
/* Title ID */ Added more, but I dint add CK, SystemSoft Alpha or Kemco, not sure
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK ||
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC ||
|-
| DX ||
|-
| EA || Electronic Arts (EA)
|-
| EC ||
|-
| EL || Enlight Software
|-
| EM ||
|-
| ES || Eidos Interactive
|-
| FI ||
|-
| FS || From Software
|-
| GE ||
|-
| GV ||
|-
| HE ||
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG || Infogrames
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN || Konami
|-
| KO ||
|-
| KU ||
|-
| LA || LucasArts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI || Microïds
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE || SEGA
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV || Vivendi Universal Games
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
8e8f4a1df3a246c8e7ff8320b530cd109da917b0
5392
5387
2017-05-24T18:41:18Z
Codeasm
2480
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG || Infogrames
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN || Konami
|-
| KO ||
|-
| KU ||
|-
| LA || LucasArts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI || Microïds
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC ||
|-
| SE || SEGA
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV || Vivendi Universal Games
|-
| WE ||
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
1a918d2861c872ffbe00c2fd9f0589d4eeca16a9
5393
5392
2017-05-24T18:51:25Z
Codeasm
2480
/* Title ID */ Jay supplied 2 of these
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG || Infogrames
|-
| IL ||
|-
| IM ||
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN || Konami
|-
| KO ||
|-
| KU ||
|-
| LA || LucasArts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI || Microïds
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV || Vivendi Universal Games
|-
| WE || Wanadoo Edition
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
fca51545e56425098318e9e3b278ce1cab50d5bc
5396
5393
2017-05-24T21:56:17Z
KaosEngineer
2482
OXM Disc XBE Title ID
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP ||
|-
| HU ||
|-
| IA ||
|-
| IF ||
|-
| IG || Infogrames
|-
| IL ||
|-
| IM || imagine Media
|-
| IO ||
|-
| IP ||
|-
| IX ||
|-
| JA ||
|-
| JW ||
|-
| KB ||
|-
| KI ||
|-
| KN || Konami
|-
| KO ||
|-
| KU ||
|-
| LA || LucasArts
|-
| LS ||
|-
| MD ||
|-
| ME ||
|-
| MI || Microïds
|-
| MJ ||
|-
| MM ||
|-
| MP ||
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX ||
|-
| NK ||
|-
| NL ||
|-
| NM ||
|-
| OX ||
|-
| PC ||
|-
| PL ||
|-
| RA ||
|-
| SA ||
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN ||
|-
| SS ||
|-
| SU ||
|-
| SW ||
|-
| TA ||
|-
| TC ||
|-
| TD ||
|-
| TK ||
|-
| TM || TDK Mediactive
|-
| TQ ||
|-
| TS ||
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC ||
|-
| VN ||
|-
| VU ||
|-
| VV || Vivendi Universal Games
|-
| WE || Wanadoo Edition
|-
| WR ||
|-
| XI ||
|-
| XK ||
|-
| XL ||
|-
| XM ||
|-
| XP ||
|-
| YB ||
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
4a8ac5333119765617bb0c2a40f85a48cdc4afe8
5397
5396
2017-05-24T22:54:17Z
Codeasm
2480
/* Title ID */ Im done for today (VU is missing, check the citation needed sections) all other publishers seems to be added now.
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive, Inc. [[http:\\phx.corporate-ir.net/phoenix.zhtml?c=69024&p=irol-newsArticle&ID=839612 press release]]
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || imagine Media
|-
| IO || Ignition entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed}}
|-
| KI || Kids Station Inc. {{citation needed}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE, Inc. (formerly Global A Entertainment){{citation needed}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D, Inc.
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Deep Silver {{citation needed}}
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster, Inc.
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU ||
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || (Xbox kiosk disk?) {{citation needed}}
|-
| XL || (Xbox special bundled or live demo disk?) {{citation needed}}
|-
| XM || Evolved Games (Probably not, game "Malice") {{citation needed}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
46391520b1ebe12b3433123fa1bcd33798b1bcd5
5398
5397
2017-05-24T23:00:07Z
Codeasm
2480
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive, Inc. [[http:\\phx.corporate-ir.net/phoenix.zhtml?c=69024&p=irol-newsArticle&ID=839612 press release]]
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || imagine Media {{citation needed}}
|-
| IO || Ignition entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed}}
|-
| KI || Kids Station Inc. {{citation needed}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE, Inc. (formerly Global A Entertainment){{citation needed}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D, Inc.
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Deep Silver {{citation needed}}
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster, Inc.
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU ||
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || (Xbox kiosk disk?) {{citation needed}}
|-
| XL || (Xbox special bundled or live demo disk?) {{citation needed}}
|-
| XM || Evolved Games (Probably not, game "Malice") {{citation needed}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
8c9244c8cd2e7aa3c926756584b4b9234d45f313
5399
5398
2017-05-24T23:14:46Z
Codeasm
2480
/* Title ID */ notes added... hope this is ok.
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive, Inc. [[http:\\phx.corporate-ir.net/phoenix.zhtml?c=69024&p=irol-newsArticle&ID=839612 press release]]
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || imagine Media {{citation needed|reason=this from official source? or could it be "international"?=May 2017}}
|-
| IO || Ignition entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE, Inc. (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D, Inc.
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Deep Silver {{citation needed|reason=Who published this, also, TitleID doesnt seem to match any potencial publisher name|date=May 2017}}
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster, Inc.
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU ||
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || (Xbox kiosk disk?) {{citation needed}}
|-
| XL || (Xbox special bundled or live demo disk?) {{citation needed}}
|-
| XM || Evolved Games (Probably not, game "Malice") {{citation needed}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
daf33557b2ab3cc2117c501e73d06cced87e1c0b
5400
5399
2017-05-24T23:16:12Z
Codeasm
2480
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive, Inc. [[http:\\phx.corporate-ir.net/phoenix.zhtml?c=69024&p=irol-newsArticle&ID=839612 press release]]
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || imagine Media {{citation needed|reason=this from official source? or could it be "international"?=May 2017}}
|-
| IO || Ignition entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE, Inc. (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D, Inc.
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Deep Silver {{citation needed|reason=Who published this, also, TitleID doesnt seem to match any potencial publisher name|date=May 2017}}
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster, Inc.
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU ||
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || (Xbox kiosk disk?) {{citation needed}}
|-
| XL || (Xbox special bundled or live demo disk?) {{citation needed}}
|-
| XM || Evolved Games (Probably not, game "Malice") {{citation needed}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
54c573090ff30df257dcfb07262a4b4430d86073
5402
5400
2017-05-24T23:23:02Z
Codeasm
2480
/* Title ID */ IM is confirmed correct
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive, Inc. [[http:\\phx.corporate-ir.net/phoenix.zhtml?c=69024&p=irol-newsArticle&ID=839612 press release]]
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || imagine Media
|-
| IO || Ignition entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE, Inc. (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D, Inc.
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Deep Silver {{citation needed|reason=Who published this, also, TitleID doesnt seem to match any potencial publisher name|date=May 2017}}
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster, Inc.
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU ||
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || (Xbox kiosk disk?) {{citation needed}}
|-
| XL || (Xbox special bundled or live demo disk?) {{citation needed}}
|-
| XM || Evolved Games (Probably not, game "Malice") {{citation needed}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
7b2a3269c8381fb2c071400aeb14b5f6c7e2b5eb
5403
5402
2017-05-25T02:14:27Z
KaosEngineer
2482
Looks like VU and VV are both for Vivendi Universal Games. I see BloodRayne release US with MJ and EU with VV ID. http://www.mobygames.com/game/xbox/bloodrayne/release-info
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive, Inc. [[http:\\phx.corporate-ir.net/phoenix.zhtml?c=69024&p=irol-newsArticle&ID=839612 press release]]
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || imagine Media
|-
| IO || Ignition entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE, Inc. (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D, Inc.
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Deep Silver {{citation needed|reason=Who published this, also, TitleID doesnt seem to match any potencial publisher name|date=May 2017}}
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster, Inc.
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || (Xbox kiosk disk?) {{citation needed}}
|-
| XL || (Xbox special bundled or live demo disk?) {{citation needed}}
|-
| XM || Evolved Games (Probably not, game "Malice") {{citation needed}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID:
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
e75ae952c3d0ab71171be28f9e7c9697cbc1cc9e
Resources
0
3
5388
5310
2017-05-24T18:18:58Z
JayFoxRox
2
/* History */
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past]
05f1488e8383de977b596e637369e08887c5010b
Boot Animation
0
3735
5389
2017-05-24T18:19:34Z
JayFoxRox
2
Created page with "The visuals for the boot animation sequence were programmed by Pipeworks Software Inc. The audio programming was done by Brian Schmidt who was the audio design architect for..."
wikitext
text/x-wiki
The visuals for the boot animation sequence were programmed by Pipeworks Software Inc.
The audio programming was done by Brian Schmidt who was the audio design architect for the Xbox.
* https://web.archive.org/web/20110930091539/http://www.pipeworks.com/products/games/detail/?game=151
* [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php Designing the Boot Sound for the Original Xbox (Brian Schmidt)]
01a20d2a871f3a1dfa36e83d216b522df7322e57
Xbox System Demo
0
3736
5390
2017-05-24T18:30:37Z
JayFoxRox
2
Created page with "In 2000, Pipeworks put together a demo to show off the potential computing power of the Xbox. The demo included Ping Pong, Japanese Garden and Desk Toys. It is not known if t..."
wikitext
text/x-wiki
In 2000, Pipeworks put together a demo to show off the potential computing power of the Xbox. The demo included Ping Pong, Japanese Garden and Desk Toys.
It is not known if this demo ever ran on a retail Xbox or if the demo was made available to the public.{{citation needed}}
* https://web.archive.org/web/20110930091526/http://www.pipeworks.com/products/games/detail/?game=152
7f45044257d9c1fe7a5af59918069e8f09726dea
5391
5390
2017-05-24T18:31:07Z
JayFoxRox
2
wikitext
text/x-wiki
In 2000, Pipeworks Software Inc. put together a demo to show off the potential computing power of the Xbox. The demo included Ping Pong, Japanese Garden and Desk Toys.
It is not known if this demo ever ran on a retail Xbox or if the demo was made available to the public.{{citation needed}}
* https://web.archive.org/web/20110930091526/http://www.pipeworks.com/products/games/detail/?game=152
f80a3c2dbc4f1183af7c8d2c1dc3d478aaeb2fcd
Xbox Game Disc
0
3700
5394
5374
2017-05-24T19:00:51Z
JayFoxRox
2
/* Visible information on ring */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern with Xbox logo and some markings{{citation needed}} (opposite of the "XBOX" text without logo)
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, 44 bytes SHA-1 hash are generated here to be used as RC4 key to decrypt challenge entries
|-
|1503 || Unknown1 || || Unknown
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
f675e26ebfd6baecb0d3494ec04fd23ace8bb871
5405
5394
2017-05-25T12:10:18Z
Codeasm
2480
/* Visible information on ring */ Added ASPnnnn number information details I found.
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}} (opposite of the "XBOX" text without logo)
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, 44 bytes SHA-1 hash are generated here to be used as RC4 key to decrypt challenge entries
|-
|1503 || Unknown1 || || Unknown
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
63e22c737116d51159f17d1edb1ed8c0ba715079
5406
5405
2017-05-25T12:12:38Z
Codeasm
2480
Layout
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || || Unknown
|-
|64 || u8[256] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, 44 bytes SHA-1 hash are generated here to be used as RC4 key to decrypt challenge entries
|-
|1503 || Unknown1 || || Unknown
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
6acf4c699a227641883bec27e75b90ed51d0c89c
Interlex Corporation
0
3737
5395
2017-05-24T20:33:45Z
Codeasm
2480
Created page with "Panther Software ( Panther Software ) is the game brand name of Panther Software Co., Ltd. Many love simulation games are produced. Old female group . 1987 : Established..."
wikitext
text/x-wiki
Panther Software ( Panther Software ) is the game brand name of Panther Software Co., Ltd. Many love simulation games are produced. Old female group .
1987 : Established Studio Pansar Limited Company
1991 : Reorganized into a stock company, changed company name to Panther software
1999 : Korean Panther Software, Interlex (US subsidiary) established
2000 : Changed company name to Interlex Corporation (Panther software name continues as brand name)
2005 : Interrex sells game division, independent as Panther software
[ http:\\game.interlex.co.jp/ Interlex Corporation game]
819b1bd13022a2ba6e5d2b43e189f84410e0764b
Talk:Xbe
1
3738
5401
2017-05-24T23:19:35Z
Codeasm
2480
Created page with " == Citation needed == Some games have a citation needed note. ive taken the liberty to add a note where I thought this might help checking if a publisher was known for sure o..."
wikitext
text/x-wiki
== Citation needed ==
Some games have a citation needed note. ive taken the liberty to add a note where I thought this might help checking if a publisher was known for sure or somewhat further research is needed. if needed, we could remove those notes to here or use another tag for those.
I dont want to just drop a "citation needed" without any reasoning. I could have made an error and for these I shared why I am not sure about one.
Feel free to remove a note and cintation needed if you find the publisher correct.
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 16:19, 24 May 2017 (PDT)
794c6ca1181cc2a7904fffd90fafaafee89fd47a
5433
5401
2017-05-26T00:05:58Z
Mborgerson
2478
wikitext
text/x-wiki
FIXME: The file format details should be inlined into the wiki.
== Citation needed ==
Some games have a citation needed note. ive taken the liberty to add a note where I thought this might help checking if a publisher was known for sure or somewhat further research is needed. if needed, we could remove those notes to here or use another tag for those.
I dont want to just drop a "citation needed" without any reasoning. I could have made an error and for these I shared why I am not sure about one.
Feel free to remove a note and cintation needed if you find the publisher correct.
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 16:19, 24 May 2017 (PDT)
e22277553faf783862a7e9fad0dd7c530415e2ba
File:Asp demodisk.jpg
6
3739
5404
2017-05-25T12:01:59Z
Codeasm
2480
Inner hologram of a Xbox demo disk showing the inner detail ASP5080
CC0 1.0 Universal (CC0 1.0)
wikitext
text/x-wiki
Inner hologram of a Xbox demo disk showing the inner detail ASP5080
CC0 1.0 Universal (CC0 1.0)
4b5495ac21e2609b1fa1823359f5c962054d44b8
NV2A/Pixel Combiner
0
8
5407
5267
2017-05-25T16:43:46Z
JayFoxRox
2
/* Texturing modes */
wikitext
text/x-wiki
The NV2A implements [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners] (and [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]?)
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE<br>texcoord?{{citation needed}}
|NONE
|*
|*
|*
|*
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D<br>tex
|TEXTURE_2D
|*
|*
|*
|*
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|TEXTURE_3D
|*
|*
|*
|*
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|TEXTURE_CUBE_MAP_ARB
|*
|*
|*
|*
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU<br>texcoord?{{citation needed}}
|PASS_THROUGH_NV
|*
|*
|*
|*
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE<br>texkill
|CULL_FRAGMENT_NV
|*
|*
|*
|*
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP<br>texbem
|OFFSET_TEXTURE_2D_NV
|
|*
|*
|*
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM<br>texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|
|*
|*
|*
|
|-
|0x08
|PS_TEXTUREMODES_BRDF<br>texm3x2tex
|
|
|
|*
|*
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST<br>texm3x2pad?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|
|
|*
|*
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW<br>texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|
|
|*
|*
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|
|
|*
|
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|
|
|
|*
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|DOT_PRODUCT_TEXTURE_3D_NV
|
|
|
|*
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|
|
|
|*
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR<br>texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|
|*
|*
|*
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB<br>texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|
|*
|*
|*
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|DOT_PRODUCT_NV
|
|*
|*
|
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|
|
|
|*
|
|}
Also known from nvidia docs:
* texm3x3pad [stage 1, stage 2]
* texm3x3spec [stage 3]
* texm3x3vspec [stage 3]
* texm3x3tex [stage 3]
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
e8db7d1a5624eca2fa7d97ffef39420db1af17ca
5408
5407
2017-05-25T16:46:02Z
JayFoxRox
2
wikitext
text/x-wiki
The NV2A implements [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners] (and [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]?)
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE<br>texcoord?{{citation needed}}
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D<br>tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU<br>texcoord?{{citation needed}}
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE<br>texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP<br>texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM<br>texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF<br>texm3x2tex
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST<br>texm3x2pad?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW<br>texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR<br>texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB<br>texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|}
Also known from nvidia docs:
* texm3x3pad [stage 1, stage 2]
* texm3x3spec [stage 3]
* texm3x3vspec [stage 3]
* texm3x3tex [stage 3]
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
8b94d15937d1f90d3ff8d25e10c247211dac9bec
5413
5408
2017-05-25T16:51:34Z
JayFoxRox
2
wikitext
text/x-wiki
The NV2A implements [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners] (and [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]?)
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE<br>texcoord?{{citation needed}}
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D<br>tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU<br>texcoord?{{citation needed}}
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE<br>texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP<br>texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM<br>texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF<br>texm3x2tex
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST<br>texm3x2pad?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW<br>texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR<br>texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB<br>texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
Also known from nvidia docs:
* texm3x3pad [stage 1, stage 2]
* texm3x3spec [stage 3]
* texm3x3vspec [stage 3]
* texm3x3tex [stage 3]
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
c3178ad7b3781ebefef820b583c852bf08a514d6
5415
5413
2017-05-25T16:57:29Z
JayFoxRox
2
wikitext
text/x-wiki
The NV2A implements [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners] (and [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]?).
Texturing modes are from:
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16 bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE<br>texcoord?{{citation needed}}
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D<br>tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU<br>texcoord?{{citation needed}}
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE<br>texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP<br>texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM<br>texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF<br>texm3x2tex
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST<br>texm3x2pad?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW<br>texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR<br>texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB<br>texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
Also known from nvidia docs:
* texm3x3pad [stage 1, stage 2]
* texm3x3spec [stage 3]
* texm3x3vspec [stage 3]
* texm3x3tex [stage 3]
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
2ef25d289e32ec146e70240eb34c76d0bd5566ab
5416
5415
2017-05-25T17:00:01Z
JayFoxRox
2
wikitext
text/x-wiki
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16 bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE<br>texcoord?{{citation needed}}
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D<br>tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU<br>texcoord?{{citation needed}}
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE<br>texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP<br>texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM<br>texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF<br>texm3x2tex
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST<br>texm3x2pad?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW<br>texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR<br>texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB<br>texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
Also known from nvidia docs:
* texm3x3pad [stage 1, stage 2]
* texm3x3spec [stage 3]
* texm3x3vspec [stage 3]
* texm3x3tex [stage 3]
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
c11da5cba9e4a178e2fb58371f37993601ebb517
5417
5416
2017-05-25T17:11:22Z
JayFoxRox
2
/* Data types */
wikitext
text/x-wiki
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE<br>texcoord?{{citation needed}}
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D<br>tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU<br>texcoord?{{citation needed}}
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE<br>texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP<br>texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM<br>texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF<br>texm3x2tex
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST<br>texm3x2pad?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW<br>texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR<br>texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB<br>texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
Also known from nvidia docs:
* texm3x3pad [stage 1, stage 2]
* texm3x3spec [stage 3]
* texm3x3vspec [stage 3]
* texm3x3tex [stage 3]
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
3b46b6b68259b93a7c58a80892a9dab087b68537
Template:Yes
10
3740
5409
2017-05-25T16:47:38Z
JayFoxRox
2
Created page with "style="height:100px; width:100px; text-align:center; background:#f8f" | ✓"
wikitext
text/x-wiki
style="height:100px; width:100px; text-align:center; background:#f8f" | ✓
c9c486d1a616902d9e24959d17f08b1e0e7f98d3
5410
5409
2017-05-25T16:49:03Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#9F9;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|Yes}}}<noinclude>
|}
{{documentation}}
</noinclude>
8b2067e0b1a8f0d1f0814083bfe268c1a93927e3
5411
5410
2017-05-25T16:49:31Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#9F9;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|✓}}}<noinclude>
|}
{{documentation}}
</noinclude>
14dfac36d52a176c397160f58f247c842c4d2105
5414
5411
2017-05-25T16:52:11Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#9F9;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|✔}}}<noinclude>
|}
{{documentation}}
</noinclude>
bb6e4edf56ac70faefb2c2d5bbf0d1e70148c66a
Template:No
10
3741
5412
2017-05-25T16:51:07Z
JayFoxRox
2
Created page with "<noinclude>{| class="wikitable" |- |</noinclude>style="background:#F99;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-no"|{{{1|✗}}}<noin..."
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#F99;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-no"|{{{1|✗}}}<noinclude>
|}
{{documentation}}
</noinclude>
1d7348976277383cf4ec03551935ea879f8a41ef
EEPROM
0
3742
5418
2017-05-25T17:26:57Z
JayFoxRox
2
Created page with "The EEPROM of the Xbox is connected via I²C and located on address 0x54. The EEPROM is 256 bytes and stores the settings of the Xbox. == Contents == {| class="wikitable" !..."
wikitext
text/x-wiki
The EEPROM of the Xbox is connected via I²C and located on address 0x54.
The EEPROM is 256 bytes and stores the settings of the Xbox.
== Contents ==
{| class="wikitable"
! Offset !! Field !! Notes
|-
|}
== Notes ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
43079b72ebaa0b3ad78009cf222f8096123732ef
5419
5418
2017-05-25T17:27:51Z
JayFoxRox
2
wikitext
text/x-wiki
The EEPROM of the Xbox is connected via I²C and located on address 0x54.
The EEPROM is 256 bytes and stores the settings and other information about the Xbox.
== Contents ==
{| class="wikitable"
! Offset !! Field !! Notes
|-
|}
== Notes ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
dd719c1aba72ead787882caebf7d7e64b739788f
5423
5419
2017-05-25T19:01:36Z
Espes
2484
wikitext
text/x-wiki
The EEPROM of the Xbox is connected via I²C and located on address 0x54.
The EEPROM is 256 bytes and stores the settings and other information about the Xbox.
The Chihiro EEPROM key is <code>7B 35 A8 B7 27 ED 43 7A A0 BA FB 8F A4 38 61 80</code>
== Contents ==
{| class="wikitable"
! Offset !! Field !! Notes
|-
|}
== Notes ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
cd9748bde7af1822693537df3dd35ac0ebf24f9b
5424
5423
2017-05-25T19:06:36Z
Mborgerson
2478
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
The Chihiro EEPROM key is <code>7B 35 A8 B7 27 ED 43 7A A0 BA FB 8F A4 38 61 80</code>
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x5C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xA8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== How to Dump Your EEPROM ==
=== Software Dump ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Dump ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an [https://www.totalphase.com/products/aardvark-i2cspi/ I2C/SPI USB host adapter], build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface already. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information.
== Further Reading ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
2def1512c95958ddb31d8a0e17c825b66b4902e8
5425
5424
2017-05-25T19:08:48Z
Mborgerson
2478
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
The Chihiro EEPROM key is <code>7B 35 A8 B7 27 ED 43 7A A0 BA FB 8F A4 38 61 80</code>
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x5C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xA8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an [https://www.totalphase.com/products/aardvark-i2cspi/ I2C/SPI USB host adapter], build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface already. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information.
== Further Reading ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
ec38ccd34c07ba52ba4ed054207f12621994b896
5426
5425
2017-05-25T19:32:05Z
Mborgerson
2478
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
The Chihiro EEPROM key is <code>7B 35 A8 B7 27 ED 43 7A A0 BA FB 8F A4 38 61 80</code>
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x5C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xA8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== Further Reading ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
c76160f2a1c1b3e6beb9d0a1ffbef324fc7637bb
5428
5426
2017-05-25T20:19:48Z
Mborgerson
2478
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
The Chihiro EEPROM key is <code>7B 35 A8 B7 27 ED 43 7A A0 BA FB 8F A4 38 61 80</code>
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x5C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xA8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== Further Reading ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
ff330df890b39e9d4acc3bd6bc1b8487386b46f9
MCPX ROM
0
3670
5420
5221
2017-05-25T17:39:57Z
JayFoxRox
2
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1.
1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL.
For 1.1 Microsoft switched to a TEA algorithm.
The code on the chips is largely the same, but for those two differences{{citation needed}}.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX ROM Dumping]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
* [https://github.com/JayFoxRox/xqemu-tools/blob/master/disassemble-mcpx.sh disassemble-mcpx.sh: A bash-script to disassemble/annotate MCPX 1.0 dumps]
07558ed16d7199aed28eba41e73d9aa8c90b7a7d
NV2A
0
3675
5421
5016
2017-05-25T18:23:12Z
JayFoxRox
2
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
** [http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/nv30specs.pdf Backup of nv30specs: List of implemented GL extensions for NV10-NV30]
c133f385858a6c66bd6f4a78c53eb22ab6e3a303
Main Page
0
1
5422
5337
2017-05-25T18:52:06Z
Mborgerson
2478
wikitext
text/x-wiki
{{:Main Page/Header}}
Development
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
[[Xbox]]
* [[Hardware revisions]]
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]
** [[Memory]]
** [[BIOS]]
** [[MCPX]] [[MCPX ROM|(ROM)]]
** [[DVD Drive]]
** [[Hard Drive]]
** [[USB]]
** [[EEPROM]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[Xbox Debug Monitor]]
* [[Operating System]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
[http://segaretro.org/Sega_Chihiro Chihiro]
* [[Chihiro-Tools]]
* [[Chihiro-Launcher]]
[[:Category:Games|Games]]
* [[Engine List]]
Emulation
* [[Emulators]]
{{:Main Page/Xbox Live}}
Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
4b471e58a08f54cdb874a633c48a9f97172dff18
5431
5422
2017-05-25T23:46:40Z
Mborgerson
2478
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Hardware revisions]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet]]
* [http://segaretro.org/Sega_Chihiro Chihiro]
== Firmware/Kernel ==
* [[MCPX ROM]]
* [[BIOS]]
* [[Kernel]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
* [[Chihiro-Tools]]
* [[Xbox Debug Monitor]]
* [[Chihiro-Launcher]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
133e4c356a6d5f666f453d72989b1ccb2554820b
5432
5431
2017-05-25T23:53:01Z
Mborgerson
2478
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Hardware revisions]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
* [http://segaretro.org/Sega_Chihiro Chihiro]
== Firmware/Kernel ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
* [[Chihiro-Tools]]
* [[Xbox Debug Monitor]]
* [[Chihiro-Launcher]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
cd6d3ac6cca5cfbce23f837f9e55b421eeb2ac41
Talk:EEPROM
1
3743
5427
2017-05-25T19:49:27Z
JayFoxRox
2
Wondering about Chihiro EEPROM key
wikitext
text/x-wiki
== Chihiro key ==
Wouldn't we consider crypto-keys "dodgy shit"?
Why is this here?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:49, 25 May 2017 (PDT)
6be210ae454fe9a0517a18ed06b184bcae959346
Xbox Debug Monitor
0
3689
5429
5329
2017-05-25T21:11:20Z
Furon
2477
/* adminpw (Set administrator password) */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a command followed by <CR><LF> or <CR><NUL>. A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>setsystime</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>keyxchg</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{| class="wikitable"
! 4039+
| <code>adminpw none</code>
| MANAGE
|}
Clear the administrator password.
{| class="wikitable"
! 4039+
| <code>adminpw passwd=QWORD</code>
| MANAGE
|}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{| class="wikitable"
! 3944-4432
| width="99%" | <span style="font: 14px monospace">getfile name=</span>
|-
! 4531+
| <span style="font: 14px monospace">getfile name= [offset= size=]</span>
|}
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
53c9990af62dce96a9450f211e38a921d3309df0
Talk:Main Page
1
3744
5430
2017-05-25T23:27:10Z
Mborgerson
2478
Created page with "The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice. Also we need a wiki logo. See [https://commons.wikimedia...."
wikitext
text/x-wiki
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice. Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures.
0f584a60366d776240743bd23c55c010539e11cd
Talk:FATX
1
3745
5434
2017-05-26T00:06:25Z
Mborgerson
2478
Created page with "FIXME: Inline details about FATX"
wikitext
text/x-wiki
FIXME: Inline details about FATX
0f992837687d4b71fea3c649c73339ff7e522e62
Talk:Main Page
1
3744
5435
5430
2017-05-26T00:08:11Z
Mborgerson
2478
wikitext
text/x-wiki
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice. Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. -MB
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time. It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. -MB
963c6ef8ea53b070ce36d18f3b5fa28555905053
5436
5435
2017-05-26T00:08:43Z
Mborgerson
2478
wikitext
text/x-wiki
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice. Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. -MB
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. -MB
b3fe8c4524fba1a02a33233eda9d1b43541dece6
5437
5436
2017-05-26T00:10:43Z
Mborgerson
2478
wikitext
text/x-wiki
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice. Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
03584f01b8256aa93c233693884fbcec8d8683e4
5445
5437
2017-05-26T08:34:06Z
JayFoxRox
2
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
f3b6255d4b46db52a0909a461d8c775c64769d9d
5446
5445
2017-05-26T08:35:33Z
JayFoxRox
2
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
a5b2177a9c47b550c3b0cb4613a2d4bc9bd94438
Talk:FATX
1
3745
5438
5434
2017-05-26T00:11:00Z
Mborgerson
2478
wikitext
text/x-wiki
FIXME: Inline details about FATX [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:11, 25 May 2017 (PDT)
4f55de07f83549ad6715f92fff743af089898dba
Talk:Xbe
1
3738
5439
5433
2017-05-26T00:11:05Z
Mborgerson
2478
wikitext
text/x-wiki
FIXME: The file format details should be inlined into the wiki. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:11, 25 May 2017 (PDT)
== Citation needed ==
Some games have a citation needed note. ive taken the liberty to add a note where I thought this might help checking if a publisher was known for sure or somewhat further research is needed. if needed, we could remove those notes to here or use another tag for those.
I dont want to just drop a "citation needed" without any reasoning. I could have made an error and for these I shared why I am not sure about one.
Feel free to remove a note and cintation needed if you find the publisher correct.
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 16:19, 24 May 2017 (PDT)
c06834c07e5f4e978f1296898c1389ee56c8b0cc
Talk:Xbox Debug Monitor
1
3746
5440
2017-05-26T04:15:07Z
Furon
2477
Created page with "== Crypto notes == The hash function used throughout XBDM is a [https://en.wikipedia.org/wiki/One-way_compression_function#Matyas.E2.80.93Meyer.E2.80.93Oseas Matyas–Meyer..."
wikitext
text/x-wiki
== Crypto notes ==
The hash function used throughout XBDM is a [https://en.wikipedia.org/wiki/One-way_compression_function#Matyas.E2.80.93Meyer.E2.80.93Oseas Matyas–Meyer–Oseas one-way compression function] built on what appears to be a homegrown [https://en.wikipedia.org/wiki/Feistel_cipher balanced Feistel cipher] with a 64-bit key, 64-bit blocks, and 16 rounds. I can't find references to any of the constants online.
b4f2124a4d6c44f1ea8b6042d4680e14a6e49df3
Xbe
0
3706
5441
5403
2017-05-26T07:56:16Z
JayFoxRox
2
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media, Inc.
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co., Ltd.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co Ltd
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co., Ltd
|-
| GV || Groove Games
|-
| HE || Tru Blu Entertainment division of Home Entertainment Suppliers
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive, Inc. [[http:\\phx.corporate-ir.net/phoenix.zhtml?c=69024&p=irol-newsArticle&ID=839612 press release]]
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || imagine Media
|-
| IO || Ignition entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE, Inc. (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D, Inc.
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Deep Silver {{citation needed|reason=Who published this, also, TitleID doesnt seem to match any potencial publisher name|date=May 2017}}
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster, Inc.
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || (Xbox kiosk disk?) {{citation needed}}
|-
| XL || (Xbox special bundled or live demo disk?) {{citation needed}}
|-
| XM || Evolved Games (Probably not, game "Malice") {{citation needed}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games, formerly Zoo Digital Publishing
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
bbddef43bd611f959b9ed8438b0356bbd250637e
5444
5441
2017-05-26T08:31:59Z
JayFoxRox
2
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
83b0eedb1717918edf84c45ea124a47afbedc517
Template:FIXME
10
3747
5442
2017-05-26T07:59:41Z
JayFoxRox
2
Created page with "<sup>''<span title="This information is incomplete and needs more work or research">FIXME</span>''</sup><noinclude> ==Documentation== ''<nowiki>{{FIXME}}</nowiki>'' * Tells a..."
wikitext
text/x-wiki
<sup>''<span title="This information is incomplete and needs more work or research">FIXME</span>''</sup><noinclude>
==Documentation==
''<nowiki>{{FIXME}}</nowiki>''
* Tells a visitors that something is missing.
* Displays: <sup>''<span title="This information is incomplete and needs more work or research">FIXME</span>''</sup><noinclude>
* If you see FIXME somewhere, try to add the missing information to it
<noinclude>
[[Category:Templates|{{PAGENAME}}]]</noinclude>
7a35f1721fa378aae81d70093679f44e013ea711
5443
5442
2017-05-26T08:00:19Z
JayFoxRox
2
wikitext
text/x-wiki
<sup>''[<span title="This information is incomplete and needs more work or research">FIXME</span>]''</sup><noinclude>
==Documentation==
''<nowiki>{{FIXME}}</nowiki>''
* Tells a visitors that something is missing.
* Displays: <sup>''[<span title="This information is incomplete and needs more work or research">FIXME</span>]''</sup><noinclude>
* If you see FIXME somewhere, try to add the missing information to it
<noinclude>
[[Category:Templates|{{PAGENAME}}]]</noinclude>
91e5add4503cfbc4c2f38473ee2dbc719e071c8a
System Management Controller
0
3748
5447
2017-05-26T08:45:49Z
JayFoxRox
2
Created page with "The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox. This includes rebooting the system, returning the co..."
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
2a739ae19045a2757108c3db8af6892054293a00
5448
5447
2017-05-26T08:46:14Z
JayFoxRox
2
JayFoxRox moved page [[SMC]] to [[System Management Controller]]
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
2a739ae19045a2757108c3db8af6892054293a00
5451
5448
2017-05-26T10:30:09Z
JayFoxRox
2
/* Revisions */
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
* P2L{{citation needed}}
42ffd315cb87131167dfd8b2141f7cad7f281f2f
5452
5451
2017-05-26T10:32:11Z
JayFoxRox
2
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
It is connected via I²C and located on address 0x10.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
* P2L{{citation needed}}
a6ad692c59159f967fdb2a7c1ea8643afa9768b6
SMC
0
3749
5449
2017-05-26T08:46:14Z
JayFoxRox
2
JayFoxRox moved page [[SMC]] to [[System Management Controller]]
wikitext
text/x-wiki
#REDIRECT [[System Management Controller]]
b09fb9f62bc88871884ab7ef5fe0027cb6e3dc08
Main Page
0
1
5450
5432
2017-05-26T08:46:37Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Hardware revisions]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
* [http://segaretro.org/Sega_Chihiro Chihiro]
== Firmware/Kernel ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
* [[Chihiro-Tools]]
* [[Xbox Debug Monitor]]
* [[Chihiro-Launcher]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
ef55201cfe3fc6f429a7a830fa391ef47990cb17
5453
5450
2017-05-26T10:34:31Z
JayFoxRox
2
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Hardware revisions]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
* [http://segaretro.org/Sega_Chihiro Chihiro]
== Firmware/Kernel ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
* [[Chihiro-Tools]]
* [[Xbox Debug Monitor]]
* [[Chihiro-Launcher]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
a98519677070374e8f88385841fd22f7686f49b7
5455
5453
2017-05-26T11:04:37Z
JayFoxRox
2
/* Firmware/Kernel */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Hardware revisions]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
* [http://segaretro.org/Sega_Chihiro Chihiro]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
* [[Chihiro-Tools]]
* [[Xbox Debug Monitor]]
* [[Chihiro-Launcher]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
c431e2925e1f47e2ee6d84bd78d08438cf7ce61c
5458
5455
2017-05-26T11:22:51Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware revisions]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
* [[Xbox Debug Monitor]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
107e88ddcfd4477a045b42bcdfa6796f71ee1066
5462
5458
2017-05-26T17:29:00Z
JayFoxRox
2
/* Development Kits and Tools */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware revisions]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
eda23c9a4b1f57689cb12a2509407c12010d7728
5465
5462
2017-05-26T18:42:21Z
Espes
2484
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware revisions]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
d1fe98aef65972a3b1083f1ed750461842475c25
5469
5465
2017-05-26T21:07:21Z
Mborgerson
2478
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
9d32768e60bf9d3ef4cf7d5379b7dd6449a42d0f
5470
5469
2017-05-26T21:08:16Z
Mborgerson
2478
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
d7b36697eea651a832e8a69250497a5c9d68b8a0
5473
5470
2017-05-26T21:08:43Z
Mborgerson
2478
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
6cf6afbd0bb47fe0288bb12ab76fca00d765cfbf
5476
5473
2017-05-26T21:09:02Z
Mborgerson
2478
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
9d32768e60bf9d3ef4cf7d5379b7dd6449a42d0f
5477
5476
2017-05-26T21:10:29Z
Mborgerson
2478
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[Power Supply]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
954af41e2e8d2947fc65e8411a6ff0c3615e450c
Video Encoder
0
3750
5454
2017-05-26T10:35:52Z
JayFoxRox
2
Created page with "== Conexant == == Focus == == xcalibur =="
wikitext
text/x-wiki
== Conexant ==
== Focus ==
== xcalibur ==
fc4f5d702053f9310383d081c8ef1ed9a930e463
5474
5454
2017-05-26T21:08:54Z
Mborgerson
2478
Mborgerson moved page [[Video encoder]] to [[Video Encoder]]
wikitext
text/x-wiki
== Conexant ==
== Focus ==
== xcalibur ==
fc4f5d702053f9310383d081c8ef1ed9a930e463
Exploits
0
3751
5456
2017-05-26T11:16:05Z
JayFoxRox
2
Created page with "== MCPX == === LDT (Hypertransport) bus tap === See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox]. === Visor hack ===..."
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20# hack ===
Uses a legacy x86 feature.
=== TEA attack ===
TEA can not be used as a hash.
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
cb3b632a86d2a48df856e08270fbe3230e77fef8
5460
5456
2017-05-26T11:26:40Z
JayFoxRox
2
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20# hack ===
Uses a legacy x86 feature.
=== TEA attack ===
TEA can not be used as a hash.
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
ff4f26e093c6436e9a123ded259e8c1510eab3fc
Chihiro
0
3752
5457
2017-05-26T11:19:45Z
JayFoxRox
2
Created page with "== Also see == * [https://github.com/JayFoxRox/Chihiro-Tools Set of tools to extract MAME Chihiro dumps] * [https://github.com/JayFoxRox/Chihiro-Launcher A tool to load some..."
wikitext
text/x-wiki
== Also see ==
* [https://github.com/JayFoxRox/Chihiro-Tools Set of tools to extract MAME Chihiro dumps]
* [https://github.com/JayFoxRox/Chihiro-Launcher A tool to load some Chihiro games on the original Xbox]
d73f4ca35c699b08e79a24e699eb8bd519720fc8
5459
5457
2017-05-26T11:24:03Z
JayFoxRox
2
wikitext
text/x-wiki
== Also see ==
* [http://segaretro.org/Sega_Chihiro Chihiro information at Sega Retro]
* [https://github.com/JayFoxRox/Chihiro-Tools Set of tools to extract MAME Chihiro dumps]
* [https://github.com/JayFoxRox/Chihiro-Launcher A tool to load some Chihiro games on the original Xbox]
d6d16bc016c31050c99cf3d5b48e16d87a8f047a
XID
0
3753
5461
2017-05-26T12:18:23Z
JayFoxRox
2
Redirected page to [[Xbox Input Devices]]
wikitext
text/x-wiki
#REDIRECT [[Xbox_Input_Devices]]
54a66ce294fad57ee8d384b2380535f879a16432
Emulators
0
3703
5463
5252
2017-05-26T18:38:21Z
Espes
2484
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|[[XQEMU]]
|
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|HLE
|[[Cxbx-Reloaded]]
|
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|HLE
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|Unknown
|HLE
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|LLE/HLE Hybrid
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|HLE
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE
|[http://mamedev.org/ MAME/Chihiro]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|
|-
|Unknown
|LLE
|[http://mamedev.org/ MAME/Xbox]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Does this exist yet?{{citation needed}}
|-
|Dead
|Unknown
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|Unknown
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
33d64110980a53b9d6cac15f574043e00c36db54
Main Page/Header
0
3688
5464
5074
2017-05-26T18:39:20Z
Espes
2484
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
This is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
<hr>
This wiki will become the place for all remaining Xbox projects to come together.
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode or Cxbx-Reloaded/Lobby on gitter.im.
</div>
</div>
fa1d803fcf12900900feae760c8c5c5c98f2cfae
MCPX
0
3671
5466
5076
2017-05-26T19:36:52Z
JayFoxRox
2
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors (there are 4 of them) and also the USB, PCI, IDE, etc, controllers{{citation needed}}.
The MCPX is also the home to the secret [[MCPX ROM]].
af98b761499c9c767e2bbe3b37ede9441a64d8bc
Resources
0
3
5467
5388
2017-05-26T20:13:38Z
Mborgerson
2478
/* History */
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)
6541bb61b452288fda8ef6f2c516c4345b807e06
5468
5467
2017-05-26T20:13:46Z
Mborgerson
2478
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
f24cc30ace023e8754d4c8bb645e03124339b85d
Hardware Revisions
0
3669
5471
5018
2017-05-26T21:08:34Z
Mborgerson
2478
Mborgerson moved page [[Hardware revisions]] to [[Hardware Revisions]]
wikitext
text/x-wiki
There are 7 Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant [[Video Chip]]
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* BIOS no longer flashable
* Removed data and power lines from LPC port
* Xcalibur video chip
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{|
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN TWWFF
L is the production line
NNNNNN is the number produced that week
Y is the last digit of the production year
WW is the number of the week
FF is the factory code
Note, this table contradicts the previous table.
{|
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{|
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
{|
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{|
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
223490e3ac91eeae7b1292510429c2aa37c5e403
5484
5471
2017-05-26T21:23:24Z
Mborgerson
2478
wikitext
text/x-wiki
There are 7 Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant [[Video Encoder]]
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* BIOS no longer flashable
* Removed data and power lines from LPC port
* Xcalibur video chip
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{|
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN TWWFF
L is the production line
NNNNNN is the number produced that week
Y is the last digit of the production year
WW is the number of the week
FF is the factory code
Note, this table contradicts the previous table.
{|
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{|
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
{|
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{|
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
6dd2e43d62fcd9368f6a925abd2ab837deea6bf8
Hardware revisions
0
3754
5472
2017-05-26T21:08:34Z
Mborgerson
2478
Mborgerson moved page [[Hardware revisions]] to [[Hardware Revisions]]
wikitext
text/x-wiki
#REDIRECT [[Hardware Revisions]]
706febcdd24de8e260670dc71f7ef383a6a41fee
Motherboard
0
3756
5478
2017-05-26T21:14:27Z
Mborgerson
2478
Created page with "[[File:800px-Xbox-Motherboard-BR.jpg]]"
wikitext
text/x-wiki
[[File:800px-Xbox-Motherboard-BR.jpg]]
cbd5d72c606e8f809ce173c0728a387bd6b0283f
5479
5478
2017-05-26T21:15:04Z
Mborgerson
2478
wikitext
text/x-wiki
[[File:Xbox-Motherboard-BR.jpg|Xbox-Motherboard-BR]]
3a05aa5667548fafd93ab3e7dfedc610952d798b
5481
5479
2017-05-26T21:18:33Z
Mborgerson
2478
wikitext
text/x-wiki
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Motherboard]]
ea6525719f7386032876da01556783fd42d58b60
5482
5481
2017-05-26T21:20:27Z
Mborgerson
2478
wikitext
text/x-wiki
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox 1.0 Motherboard]]
5f0effd12298d4be4eb0c347844845e66dc52cb9
5483
5482
2017-05-26T21:20:41Z
Mborgerson
2478
wikitext
text/x-wiki
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
e6e05dfa9b983845547bc4e51f512f3fc7af92f0
File:Xbox-Motherboard-BR.jpg
6
3757
5480
2017-05-26T21:16:34Z
Mborgerson
2478
English: The motherboard for the Xbox, a sixth-generation gaming console made by Microsoft that was first released in 2001. The Xbox was Microsoft's first foray into the gaming console market, and was followed by the Xbox 360 in 2005. The console is no...
wikitext
text/x-wiki
English: The motherboard for the Xbox, a sixth-generation gaming console made by Microsoft that was first released in 2001. The Xbox was Microsoft's first foray into the gaming console market, and was followed by the Xbox 360 in 2005. The console is notable for having a built-in hard drive, breakaway controller dongles and an Ethernet port to support Microsoft's online gaming service, Xbox Live.
The motherboard for the Xbox contains a custom 32-bit, 733 MHz Intel Pentium III CPU. It has 64 MB of DDR memory and a 233 MHz Nvidia GPU.
Source: https://commons.wikimedia.org/wiki/File:Xbox-Motherboard-BR.jpg
Author: Evan-Amos
License: Public Domain
7bfc8b4f19be7ae38575a0acc8764ab525c0a4e0
Xbox Debug Monitor
0
3689
5485
5429
2017-05-26T23:16:46Z
Furon
2477
/* Remote Debugging and Control Protocol */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a [[#Commands|command]] followed by <CR><LF> or <CR><NUL>.
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>[[#cmd_setsystime|setsystime]]</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>[[#cmd_keyxchg|keyxchg]]</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
In the command descriptions below, the following data types are used:
{| class="wikitable" style="margin: 0 auto"
! Type !! Description
|-
| DWORD || A 32-bit integer in hexadecimal format (e.g. <code>0x1234ABCD</code>).
|-
| QWORD || A 64-bit integer in hexadecimal format, but prefixed with 0q instead of 0x (e.g. <code>0q0123456789ABCDEF</code>).
|-
| STRING || An ASCII-encoded string, optionally surrounded by double quotes.
|}
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{| class="wikitable"
! 4039+
| <code>adminpw none</code>
| MANAGE
|}
Clear the administrator password.
{| class="wikitable"
! 4039+
| <code>adminpw passwd=QWORD</code>
| MANAGE
|}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{| class="wikitable"
! 3944+
| <code>getfile name=STRING</code>
|}
Retrieve the entire contents of the named file.
{| class="wikitable"
! 4531+
| <code>getfile name=STRING offset=DWORD size=DWORD</code>
|}
Retrieve <code>size</code> bytes starting at <code>offset</code> from the named file.
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
64a4b03c45fe14e2d0e16449dc7c6e4375c04952
File:Padlock.png
6
3758
5486
2017-05-27T01:23:05Z
Furon
2477
Icon made by [http://www.flaticon.com/authors/dinosoftlabs DinosoftLabs] from www.flaticon.com
wikitext
text/x-wiki
Icon made by [http://www.flaticon.com/authors/dinosoftlabs DinosoftLabs] from www.flaticon.com
31d511f8167b52dab196a4e889ba3b584fecf89b
Template:XBDM command
10
3759
5487
2017-05-27T01:30:22Z
Furon
2477
Created page with "{| class="wikitable" ! {{{version|3944+}}} | <code>{{{text}}}</code> | [[File:Padlock.png]] {{{privs|-}}} |}"
wikitext
text/x-wiki
{| class="wikitable"
! {{{version|3944+}}}
| <code>{{{text}}}</code>
| [[File:Padlock.png]] {{{privs|-}}}
|}
1d2c3751c2c9ad1080f6551c428b0bc6a90d6735
Xbox Debug Monitor
0
3689
5488
5485
2017-05-27T01:34:36Z
Furon
2477
/* Commands */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a [[#Commands|command]] followed by <CR><LF> or <CR><NUL>.
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>[[#cmd_setsystime|setsystime]]</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>[[#cmd_keyxchg|keyxchg]]</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
In the command descriptions below, the following data types are used:
{| class="wikitable" style="margin: 0 auto"
! Type !! Description
|-
| DWORD || A 32-bit integer in hexadecimal format (e.g. <code>0x1234ABCD</code>).
|-
| QWORD || A 64-bit integer in hexadecimal format, but prefixed with 0q instead of 0x (e.g. <code>0q0123456789ABCDEF</code>).
|-
| STRING || An ASCII-encoded string, optionally surrounded by double quotes.
|}
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{{XBDM command|version=4039+|text=adminpw none|privs=manage}}
Clear the administrator password.
{{XBDM command|version=4039+|text=adminpw passwd=QWORD|privs=manage}}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{{XBDM command|text=getfile name=STRING}}
Retrieve the entire contents of the named file.
{{XBDM command|text=getfile name=STRING offset=DWORD size=DWORD}}
Retrieve <code>size</code> bytes starting at <code>offset</code> from the named file.
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
e78fe4e93ed3bc56fc061860a2c247dda245235a
5493
5488
2017-05-27T23:01:02Z
JayFoxRox
2
/* External Links */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a [[#Commands|command]] followed by <CR><LF> or <CR><NUL>.
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>[[#cmd_setsystime|setsystime]]</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>[[#cmd_keyxchg|keyxchg]]</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
In the command descriptions below, the following data types are used:
{| class="wikitable" style="margin: 0 auto"
! Type !! Description
|-
| DWORD || A 32-bit integer in hexadecimal format (e.g. <code>0x1234ABCD</code>).
|-
| QWORD || A 64-bit integer in hexadecimal format, but prefixed with 0q instead of 0x (e.g. <code>0q0123456789ABCDEF</code>).
|-
| STRING || An ASCII-encoded string, optionally surrounded by double quotes.
|}
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{{XBDM command|version=4039+|text=adminpw none|privs=manage}}
Clear the administrator password.
{{XBDM command|version=4039+|text=adminpw passwd=QWORD|privs=manage}}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{{XBDM command|text=getfile name=STRING}}
Retrieve the entire contents of the named file.
{{XBDM command|text=getfile name=STRING offset=DWORD size=DWORD}}
Retrieve <code>size</code> bytes starting at <code>offset</code> from the named file.
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
12f9cec4df2c6937e0fa2cc68720a20fcdde733f
Emulators
0
3703
5489
5463
2017-05-27T12:08:59Z
JayFoxRox
2
Added Chihiro support info
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|{{Yes}}
|[[XQEMU]]
|
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|HLE
|{{No}}
|[[Cxbx-Reloaded]]
|
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|Unknown
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|Dead
|Unknown
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|Unknown
|{{No}}
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
5e253784da2e374775d90792ab7c42388c8a9fdb
Talk:NV2A/Pixel Combiner
1
3760
5490
2017-05-27T17:44:32Z
JayFoxRox
2
/* Move data from cxbx */ new section
wikitext
text/x-wiki
== Move data from cxbx ==
https://github.com/Echelon9/cxbx-shogun/blob/master/src/CxbxKrnl/EmuD3D8/PixelShader.cpp#L467 uses the nvidia names
a711fd212c6c0c461745e5637a6316b7d4be10d8
System Management Controller
0
3748
5491
5452
2017-05-27T20:10:12Z
JayFoxRox
2
/* Revisions */
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
It is connected via I²C and located on address 0x10.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
* P2L{{citation needed}}
* D01 (Seen in a debug kit)
d41636351ff786ef831e6fb48f19c7d0513621cc
Main Page
0
1
5492
5477
2017-05-27T22:15:21Z
Furon
2477
/* Development Kits and Tools */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[Power Supply]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
b582591ec925617b123d0b2d31fab7cf025681ef
5495
5492
2017-05-28T13:28:05Z
JayFoxRox
2
/* System Software */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[Power Supply]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[Memory]]
* [[MCPX]]
* [[DVD Drive]]
* [[Hard Drive]]
* [[USB]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[Xbox Game Disc]]
* [[Xbox Input Devices]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[NVNet|Network Controller (NVNet)]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
690f077eaa5a17961ad627310cba78bff1d7d009
5500
5495
2017-05-28T14:00:23Z
JayFoxRox
2
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[DSP]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
000ee333b054a59e21ca1e53a62b9ab07853e4cf
Xbox Neighborhood
0
3690
5494
5087
2017-05-27T23:01:13Z
JayFoxRox
2
wikitext
text/x-wiki
'''Xbox Neighborhood''' is a Windows shell extension that provides the ability to manage files on Xbox Development Kits in Windows Explorer.
==External Links==
* [https://bitbucket.org/remnantmods/yelo-neighborhood/ Yelo Neighborhood] – An open-source re-implementation of [[Xbox Neighborhood]] written in C#.
d0f834d6791f2504a1543c8b8b5aba93dd07149f
BIOS
0
3672
5496
5236
2017-05-28T13:28:40Z
JayFoxRox
2
/* References */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! Unknown
! X-Codes
! Copyright String
! Kernel
! Kernel Data Segment
! 2BL
! Decoy Boot Loader
|-
! 3944
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4034
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4134
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4817
| 0x00000
| 0x00080
| 0x00db9
|
|
|
| 0x3FE00
|-
! 5101
| 0x00000
| 0x00080
| 0x00e49
|
|
|
| 0x3FE00
|-
! 5530
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5713
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5838
| 0x00000
| 0x00080
| 0x00dcc
|
|
|
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
See the table above for the start positions.
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
a4f64ef7cbaba259dfe42ef4b015e252cc2758e6
5501
5496
2017-05-28T15:06:51Z
Furon
2477
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip and connected to the MCPX via the <abbr title="Low Pin Count">LPC</abbr> bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! Unknown
! X-Codes
! Copyright String
! Kernel
! Kernel Data Segment
! 2BL
! Decoy Boot Loader
|-
! 3944
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4034
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4134
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4817
| 0x00000
| 0x00080
| 0x00db9
|
|
|
| 0x3FE00
|-
! 5101
| 0x00000
| 0x00080
| 0x00e49
|
|
|
| 0x3FE00
|-
! 5530
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5713
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5838
| 0x00000
| 0x00080
| 0x00dcc
|
|
|
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
See the table above for the start positions.
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
8d4944c5a003d1a8f6ff9d6690bf7b0944f2ae21
5502
5501
2017-05-28T15:07:41Z
Furon
2477
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip and connected to the [[MCPX]] via the <abbr title="Low Pin Count">LPC</abbr> bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! Unknown
! X-Codes
! Copyright String
! Kernel
! Kernel Data Segment
! 2BL
! Decoy Boot Loader
|-
! 3944
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4034
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4134
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4817
| 0x00000
| 0x00080
| 0x00db9
|
|
|
| 0x3FE00
|-
! 5101
| 0x00000
| 0x00080
| 0x00e49
|
|
|
| 0x3FE00
|-
! 5530
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5713
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5838
| 0x00000
| 0x00080
| 0x00dcc
|
|
|
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
See the table above for the start positions.
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
5d5bd091c3090cf44e37ee122aa084dd72a4142f
5507
5502
2017-05-28T16:05:36Z
JayFoxRox
2
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! Unknown
! X-Codes
! Copyright String
! Kernel
! Kernel Data Segment
! 2BL
! Decoy Boot Loader
|-
! 3944
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4034
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4134
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4817
| 0x00000
| 0x00080
| 0x00db9
|
|
|
| 0x3FE00
|-
! 5101
| 0x00000
| 0x00080
| 0x00e49
|
|
|
| 0x3FE00
|-
! 5530
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5713
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5838
| 0x00000
| 0x00080
| 0x00dcc
|
|
|
| 0x3FE00
|}
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.
=== xcodes ===
From 0x00000080 - Copyright string
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
See the table above for the start positions.
=== Kernel ===
Still need to analyse
=== Kernel Data Segment ===
Still need to analyse
=== 2BL ===
Still need to analyse
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
89f4b7da0ec4d3b3b708f0af5e81110fa16cd020
Boot Process
0
3683
5497
5079
2017-05-28T13:29:52Z
JayFoxRox
2
JayFoxRox moved page [[MCPX HLE]] to [[Boot Process]]
wikitext
text/x-wiki
If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching.
== Xcodes ==
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
== RC4 Decryption of the 2BL ==
Decryption of the 2BL seems to happen in 4 stages.
=== Stage 1 ===
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
=== Stage 2 ===
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
=== Stage 3 ===
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x8f000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x90000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
=== Stage 4 ===
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
0366549ca0d66134fcb692655de9144004b88f06
5499
5497
2017-05-28T13:35:54Z
JayFoxRox
2
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x8f000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x90000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== GDT setup ===
=== Paging ===
=== Kernel decryption ===
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
398afe96807225e1d784885491a43b94004740f3
5503
5499
2017-05-28T15:08:51Z
JayFoxRox
2
/* 2BL */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x8f000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x90000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
The MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
=== GDT setup ===
=== Paging ===
=== Kernel decryption ===
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
2864973bc0d65454acf6de61dbc2a01687575ba7
5504
5503
2017-05-28T15:11:06Z
JayFoxRox
2
/* MTRR Setup */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x8f000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x90000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== GDT setup ===
=== Paging ===
=== Kernel decryption ===
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
e79374a833171730c1dc37fa9d57cbae8db8b0bf
5505
5504
2017-05-28T15:17:58Z
JayFoxRox
2
/* 2BL */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x8f000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x90000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the BIOS will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x80400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== GDT setup ===
=== Paging ===
=== Kernel decryption ===
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
d468351e7b5da9b2710b9d651845ace351fdd866
5506
5505
2017-05-28T15:58:41Z
JayFoxRox
2
/* 2BL */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x8f000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x90000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
== Self-copy ==
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000{{FIXME}}:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|}
Once the PDE is set up, it is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from {{FIXME}} to {{FIXME}}.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The Kernel is decrypted in-place.
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
33ac5a6fed2017ee2fce3bea2b5f1ae71dd6e1ef
5509
5506
2017-05-28T16:55:34Z
JayFoxRox
2
/* Stage 3 */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
== Self-copy ==
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000{{FIXME}}:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|}
Once the PDE is set up, it is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from {{FIXME}} to {{FIXME}}.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The Kernel is decrypted in-place.
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
e6236625f173081e1d7b126ad9f6dbf1f4bd56b2
5511
5509
2017-05-28T17:05:27Z
JayFoxRox
2
/* Kernel decryption */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
== Self-copy ==
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000{{FIXME}}:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|}
Once the PDE is set up, it is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from {{FIXME}} to {{FIXME}}.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
99290e1f2fc8e419b35179a1fea846aa40e501bd
5514
5511
2017-05-28T19:21:30Z
JayFoxRox
2
/* Self-copy */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000{{FIXME}}:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|}
Once the PDE is set up, it is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from {{FIXME}} to {{FIXME}}.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
6daf7603da571a3221e6fd944b5b372073525855
5515
5514
2017-05-28T19:49:20Z
JayFoxRox
2
Added PDEs, still wip
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x8000F000{{FIXME}}:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity mapping of first 256MiB: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Clearing the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|}
Once the PDE is set up, it is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from {{FIXME}} to {{FIXME}}.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
84819315908940c86afa3fe9797725bc92a3d164
5516
5515
2017-05-28T20:13:16Z
JayFoxRox
2
PD should be complete
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x8000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity mapping of first 256MiB: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Clearing the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Maps the upper portion of the Flash (4 MiB page) to address 0xC0000000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from {{FIXME}} to {{FIXME}}.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
76cc1cde964c0321f86648158b2644b9c5598ae9
5517
5516
2017-05-28T20:14:36Z
JayFoxRox
2
/* Paging */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x8000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Clearing the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from {{FIXME}} to {{FIXME}}.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
4640b0a177b5ff17243dfd4aec7fe9b2cb6a4ab4
5518
5517
2017-05-28T20:15:23Z
JayFoxRox
2
/* Paging */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x8000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from {{FIXME}} to {{FIXME}}.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
14931154f9071efc5225b340010d7f009a7ed2c8
5519
5518
2017-05-28T20:21:40Z
JayFoxRox
2
/* Memory cleanup */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x8000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
409129756f95df65f6245edb1e6d580f12ceeee9
5520
5519
2017-05-28T20:22:24Z
JayFoxRox
2
/* Self-copy */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x8000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Writes 0xCC repeatedly from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
9b3a27a817c484b1c685540d780077e83b9383f6
5521
5520
2017-05-28T20:23:39Z
JayFoxRox
2
/* Memory cleanup */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x8000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
esp is now also reloaded to point at the higher mapping. It will be set to 0x80400000 (absolute value, independent of previous esp value).
=== Disabling of the MCPX ROM ===
=== SMC Watchdog handling ===
=== Memory cleanup ===
Fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
=== Weird stuff 1{{FIXME}} ===
=== Weird stuff 2{{FIXME}} ===
=== Weird stuff 3{{FIXME}} ===
=== Loading the kernel ===
==== Kernel-copy ====
The Kernel is now copied into RAM.
==== Kernel decryption ====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
==== Kernel decompression ====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
=== Running the kernel ===
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
6097cc7b16e2b96e05804164947a9f9c26b7ffbf
5522
5521
2017-05-28T20:37:21Z
JayFoxRox
2
/* 2BL */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x8000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Weird stuff 0{{FIXME}} ====
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Weird stuff 1{{FIXME}} ====
==== Weird stuff 2{{FIXME}} ====
==== Weird stuff 3{{FIXME}} ====
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
f551b74ed0815cd3ac26e83c99efb8e3eb2d09f1
5523
5522
2017-05-28T23:17:28Z
JayFoxRox
2
/* Paging */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Weird stuff 0{{FIXME}} ====
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Weird stuff 1{{FIXME}} ====
==== Weird stuff 2{{FIXME}} ====
==== Weird stuff 3{{FIXME}} ====
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decrytpion key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
fe4f22c2c20dd1860151d0b8dc5395c31f9f37f8
5524
5523
2017-05-29T09:03:37Z
Eighthpence
2472
/* Kernel decryption */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Weird stuff 0{{FIXME}} ====
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Weird stuff 1{{FIXME}} ====
==== Weird stuff 2{{FIXME}} ====
==== Weird stuff 3{{FIXME}} ====
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
0201155d6b91141c9e4cd4a8ee6c9f2d48326956
5525
5524
2017-05-29T09:31:58Z
JayFoxRox
2
/* Weird stuff 2{{FIXME}} */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Weird stuff 0{{FIXME}} ====
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Weird stuff 1{{FIXME}} ====
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3{{FIXME}} ====
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
189eb3bda34ca225aac4fafa7f6322c394bbd4ba
5526
5525
2017-05-29T09:44:39Z
JayFoxRox
2
/* Weird stuff 1{{FIXME}} */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Weird stuff 0{{FIXME}} ====
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using Hynix RAM instead of Samsung RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3{{FIXME}} ====
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
4bc34a92075efd49e64098189b793ff9ea70e9e9
5527
5526
2017-05-29T09:49:40Z
JayFoxRox
2
/* Setup RAM timing */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Weird stuff 0{{FIXME}} ====
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3{{FIXME}} ====
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
4f2d5f760177041bda1a429d310a1b7aead13860
5530
5527
2017-05-29T10:33:44Z
JayFoxRox
2
/* Weird stuff 3{{FIXME}} */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Weird stuff 0{{FIXME}} ====
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
a9ace67ece36520f430e03f7967989528d4b2de4
5531
5530
2017-05-29T10:45:29Z
JayFoxRox
2
Straight from cromwell :)
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
5055e22ee325a67e9f1b9ed115b6ffd8b8216348
5535
5531
2017-05-29T11:35:03Z
JayFoxRox
2
/* Disabling of the MCPX ROM */
wikitext
text/x-wiki
== Overview ==
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
e6f1b4d1b0ee7090603b12412b724c7112eb2da6
MCPX HLE
0
3761
5498
2017-05-28T13:29:52Z
JayFoxRox
2
JayFoxRox moved page [[MCPX HLE]] to [[Boot Process]]
wikitext
text/x-wiki
#REDIRECT [[Boot Process]]
ce2d848bf8efe60922866b02e38dc1d9a09db509
Flash ROM
0
3762
5508
2017-05-28T16:06:14Z
JayFoxRox
2
Created page with "The Flash is a 1MiB non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip and connected to the [[MCPX]] via the <abbr title="Low Pin Count">LPC</abbr> bus..."
wikitext
text/x-wiki
The Flash is a 1MiB non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip and connected to the [[MCPX]] via the <abbr title="Low Pin Count">LPC</abbr> bus.
It usually stores the [[BIOS]].
13dfc1cb5ca6a3afd88f5a5e135e6a77c70ea32d
MCPX ROM
0
3670
5510
5420
2017-05-28T16:58:54Z
JayFoxRox
2
/* Dumping the MCPX ROM */
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1.
1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL.
For 1.1 Microsoft switched to a TEA algorithm.
The code on the chips is largely the same, but for those two differences{{citation needed}}.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it.
See [[Exploits#MCPX|MCPX exploits]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
* [https://github.com/JayFoxRox/xqemu-tools/blob/master/disassemble-mcpx.sh disassemble-mcpx.sh: A bash-script to disassemble/annotate MCPX 1.0 dumps]
f60d3dd1cf9686b6999061482e5c5ef637891216
NV2A/Pixel Combiner
0
8
5512
5417
2017-05-28T18:55:27Z
JayFoxRox
2
D3D portion stolen from Cxbx
wikitext
text/x-wiki
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
Also known from nvidia docs:
* texm3x3pad [stage 1, stage 2]
* texm3x3spec [stage 3]
* texm3x3vspec [stage 3]
* texm3x3tex [stage 3]
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
115d6e5485313f1849ac90dc9dfeb64227ceefe7
5513
5512
2017-05-28T18:55:43Z
JayFoxRox
2
/* Texturing modes */
wikitext
text/x-wiki
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
64b3eef603e0e14a99ad04abbbb96b4310c8d4e5
Hardware Revisions
0
3669
5528
5484
2017-05-29T09:50:23Z
JayFoxRox
2
/* 1.6 */
wikitext
text/x-wiki
There are 7 Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant [[Video Encoder]]
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* BIOS no longer flashable
* Removed data and power lines from LPC port
* Xcalibur video chip
* Xyclops chip
Microsoft later switched to lower quality Hynix RAM.
These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{|
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN TWWFF
L is the production line
NNNNNN is the number produced that week
Y is the last digit of the production year
WW is the number of the week
FF is the factory code
Note, this table contradicts the previous table.
{|
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{|
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
{|
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{|
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
c4aa4471dabf8ebeb443ea6af7ab7121bdc179a8
5529
5528
2017-05-29T09:50:59Z
JayFoxRox
2
/* 1.5 */
wikitext
text/x-wiki
There are 7 Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant [[Video Encoder]]
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* BIOS no longer flashable
* Removed data and power lines from LPC port
* Xcalibur video chip
* Xyclops chip
Microsoft later switched to lower quality Hynix RAM.
These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{|
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN TWWFF
L is the production line
NNNNNN is the number produced that week
Y is the last digit of the production year
WW is the number of the week
FF is the factory code
Note, this table contradicts the previous table.
{|
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{|
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
{|
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{|
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
6725504cd9b7cbd9157ecbc8e00f9bc85807d1df
Chihiro
0
3752
5532
5459
2017-05-29T11:16:13Z
Espes
2484
wikitext
text/x-wiki
== Also see ==
* [https://github.com/mamedev/mame/blob/master/src/mame/drivers/chihiro.cpp Chihiro MAME driver]
* [http://segaretro.org/Sega_Chihiro Chihiro information at Sega Retro]
* [https://github.com/JayFoxRox/Chihiro-Tools Set of tools to extract MAME Chihiro dumps]
* [https://github.com/JayFoxRox/Chihiro-Launcher A tool to load some Chihiro games on the original Xbox]
ae0bc266d5dc5d6ef637b4b1b90de5cd35b4ae50
Xbox Hard Disk Technical Details
0
3763
5533
2017-05-29T11:27:19Z
Espes
2484
Created page with " by Michael Steil (original version: 1 May 2002, updated 26 September 2002) == Seagate (10 GB) == === Harddisk information as reported by hdparm -i === <pre>Model=ST31021..."
wikitext
text/x-wiki
by Michael Steil (original version: 1 May 2002, updated 26 September 2002)
== Seagate (10 GB) ==
=== Harddisk information as reported by hdparm -i ===
<pre>Model=ST310211A, FwRev=6.55, SerialNo=6DB2WQW2
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=512kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=19541088
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 *udma2
AdvancedPM=no WriteCache=enabled
Drive Supports : Reserved : ATA-1 ATA-2 ATA-3 ATA-4
</pre>
=== Detailed information as reported by hdparm -I ===
<pre>non-removable ATA device, with non-removable media
Model Number: ST310211A
Serial Number: 6DB2WQW2
Firmware Revision: 6.55
Standards:
Supported: 1 2 3 4
Likely used: 5
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
bytes/track: 0 (obsolete)
bytes/sector: 0 (obsolete)
current sector capacity: 16514064
LBA user addressable sectors = 19541088
Capabilities:
LBA, IORDY(can be disabled)
Buffer size: 512.0kB Queue depth: 1
Standby timer values: spec'd by standard
r/w multiple sector transfer: Max = 16 Current = 16
DMA: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma3 udma4 udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* look-ahead
* write cache
* Power Management feature set
* Security Mode feature set
SMART feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
Security:
supported
enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
Security level high
HW reset results:
CBLID- below Vih
Device num = 1
Checksum: correct
</pre>
=== Hard disk performance measured by hdparm -t ===
<pre>Timing buffered disk reads: 64 MB in 3.51 seconds = 18.23 MB/sec
Timing buffer-cache reads: 128 MB in 0.85 seconds =150.59 MB/sec
</pre>
== Western Digital (8 GB) ==
=== Harddisk information as reported by hdparm -i ===
<pre>Model=WDC WD80EB-28CGH1, FwRev=24.84G24, SerialNo=***************
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=15509/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
BuffType=DualPortCache, BuffSize=768kB, MaxMultSect=16, MultSect=off
CurCHS=15509/16/63, CurSects=15633072, LBA=yes, LBAsects=15633072
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 *mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: device does not report version: 1 2 3 4 5
</pre>
=== Detailed information as reported by hdparm -I ===
<pre>ATA device, with non-removable media
Model Number: WDC WD80EB-28CGH1
Serial Number: ***************
Firmware Revision: 24.84G24
Standards:
Supported: 5 4 3 2
Likely used: 6
Configuration:
Logical max current
cylinders 15509 15509
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 15633072
LBA user addressable sectors: 15633072
device size with M = 1024*1024: 7633 MBytes
device size with M = 1000*1000: 8004 MBytes (8 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 40 Queue depth: 1
Standby timer values: spec'd by Standard, with device specific minimum
R/W multiple sector transfer: Max = 16 Current = 0
Recommended acoustic management value: 128, current value: 254
DMA: mdma0 mdma1 *mdma2 udma0 udma1 udma2 udma3 udma4 udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* Look-ahead
* Write cache
* Power Management feature set
* Security Mode feature set
* SMART feature set
Automatic Acoustic Management feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
Security:
supported
enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
Security level high
HW reset results:
CBLID- above Vih
Device num = 0 determined by CSEL
Checksum: correct
</pre>
=== Hard disk performance measured by hdparm -t ===
<pre>Timing buffered disk reads: 64 MB in 6.58 seconds = 9.73 MB/sec
Timing buffer-cache reads: 128 MB in 3.28 seconds = 39.02 MB/sec
</pre>
Retrieved from [http://www.xbox-linux.org/wiki/Xbox_Hard_Disk_Technical_Details]
7a590191c29e3ea7918d1db6d0f78c5eaa7f7ca5
Porting an Operating System to the Xbox HOWTO
0
3764
5534
2017-05-29T11:32:42Z
Espes
2484
Created page with "Retrieved from [http://www.xbox-linux.org/wiki/Porting_an_Operating_System_to_the_Xbox_HOWTO] == Differences == The Xbox hardware consists of standard components, like a P..."
wikitext
text/x-wiki
Retrieved from [http://www.xbox-linux.org/wiki/Porting_an_Operating_System_to_the_Xbox_HOWTO]
== Differences ==
The Xbox hardware consists of standard components, like a Pentium III Celeron CPU, an nForce chipset and IDE DVD and hard disk drives. Still there are a few differences, some of which would make an unmodified operating system crash.
=== Chipset ===
The Xbox chipset is basically an nVidia nForce 420, but with a GeForce "NV2A" integrated (instead of a GeForce2 MX), and with an Intel instead of an AMD CPU. Here is the output of "lspci" on a PC nForce:
<pre>00:00.0 Host bridge: nVidia Corporation nForce CPU bridge (rev b2)
00:00.1 RAM memory: nVidia Corporation nForce 220/420 Memory Controller (rev b2)
00:00.2 RAM memory: nVidia Corporation nForce 220/420 Memory Controller (rev b2)
00:00.3 RAM memory: nVidia Corporation nForce 420 Memory Controller (DDR) (rev b2)
00:01.0 ISA bridge: nVidia Corporation nForce ISA Bridge (rev c3)
00:01.1 SMBus: nVidia Corporation nForce PCI System Management (rev c1)
00:02.0 USB Controller: nVidia Corporation nForce USB Controller (rev c3)
00:03.0 USB Controller: nVidia Corporation nForce USB Controller (rev c3)
00:04.0 Ethernet controller: nVidia Corporation nForce Ethernet Controller (rev d2)
00:05.0 Multimedia audio controller: nVidia Corporation: Unknown device 01b0 (rev c2)
00:06.0 Multimedia audio controller: nVidia Corporation nForce Audio (rev c2)
00:08.0 PCI bridge: nVidia Corporation nForce PCI-to-PCI bridge (rev c2)
00:09.0 IDE interface: nVidia Corporation nForce IDE (rev c3)
00:1e.0 PCI bridge: nVidia Corporation nForce AGP to PCI Bridge (rev b2)
02:00.0 VGA compatible controller: nVidia Corporation NVCrush11 [GeForce2 MX Integrated Graphics] (rev b1)
</pre>
On the Xbox, the output looks like this:
<pre>00:00.0 Host bridge: nVidia Corporation: Unknown device 02a5 (rev a1)
00:00.3 RAM memory: nVidia Corporation: Unknown device 02a6 (rev a1)
00:01.0 ISA bridge: nVidia Corporation nForce ISA Bridge (rev d4)
00:01.1 SMBus: nVidia Corporation nForce PCI System Management (rev d1)
00:02.0 USB Controller: nVidia Corporation nForce USB Controller (rev d4)
00:03.0 USB Controller: nVidia Corporation nForce USB Controller (rev d4)
00:04.0 Ethernet controller: nVidia Corporation nForce Ethernet Controller (rev d2)
00:05.0 Multimedia audio controller: nVidia Corporation: Unknown device 01b0 (rev d2)
00:06.0 Multimedia audio controller: nVidia Corporation nForce Audio (rev d2)
00:06.1 Modem: nVidia Corporation Intel 537 [nForce MC97 Modem] (rev d1)
00:08.0 PCI bridge: nVidia Corporation nForce PCI-to-PCI bridge (rev d2)
00:09.0 IDE interface: nVidia Corporation nForce IDE (rev d4)
00:1e.0 PCI bridge: nVidia Corporation nForce AGP to PCI Bridge (rev a1)
01:00.0 VGA compatible controller: nVidia Corporation: Unknown device 02a0 (rev a1)
</pre>
PCI bus 0 is almost identical, except for the Xbox only having a single memory controller. Bus 1 on the PC contains all PCI cards. Since the Xbox does not support PCI cards, the AGP bus on the Xbox is bus 1 instead of bus 2.
==== PCI Enumeration Bug ====
These two differences between the PC and the Xbox version of the nForce chipset have introduced three bugs into the chipset that all have to do with PCI enumeration:
* The nonexistent memory controllers at 0:0.1 and 0:0.2 are completely broken: If you try to probe them, i.e. read out their PCI IDs, the Xbox freezes.
* There are ghost devices on bus 1, after the video controller (1:0.0). You get garbage if you try to probe them.
* The same is true for the complete bus 2.
So if your operating system scans the PCI bus in order to find out what drivers need to be loaded for the PCI devices, do not touch 0:0.1 and 0:0.2. The easiest fix would be to start the PCI enumeration with 0:1.0, as the first few devices need no driver anyway, but the following code, taken from the Xbox Linux kernel, handles this better and also hides the ghost devices:
<pre>if (mach_pci_is_blacklisted(bus, PCI_SLOT(devfn), PCI_FUNC(devfn)))
return -EINVAL;
static inline int mach_pci_is_blacklisted(int bus, int dev, int fn)
{
if(machine_is_xbox) {
return (bus > 1) || ((bus != 0) && ((dev != 0) || (fn != 0))) ||
(!bus && !dev && ((fn == 1) || (fn == 2)));
}
}
</pre>
Note that some operating systems (or even some applications) repeat the PCI enumeration later: On Unix systems, the XFree86/X.org X Window servers for example do that, but this can be deactivated using a configuration parameter (or of course patched in the source code).
==== No Keyboard Controller ====
The Xbox is a legacy free PC, so it does not contain a so-called "Super-I/O Chip" which includes old ISA hardware such as
* serial port
* parallell port
* floppy disk controller
* keyboard controller
In general, this should be no problem for any operating system; there is just one thing: Many operating systems (such as Linux up some 2.4.x version) assume that every PC has a keyboard controller (although this is not true for many embedded x86 as well as Itanium systems), and therefore statically allocate interrupt line 1 for the keyboard controller.
The problem is that the original Xbox hardware initialization code (as well as Cromwell) put the first USB controller on interrupt 1, so if the operating system already has it allocated, the first USB controller will not work. On a 1.0 Xbox this means that no USB devices (including, ironically, a keyboard) will work, while on later boxes this only affects two of the four connectors.
So make sure that your operating system checks for a keyboard controller and allocates no interrupt if it does not exist. The following code, taken from the Linux kernel, shows how to check for a keyboard controller:
<pre>#define kbd_read_input() inb(KBD_DATA_REG)
#define kbd_read_status() inb(KBD_STATUS_REG)
if (kbd_read_status() == 0xff && kbd_read_input() == 0xff)
kbd_exists = 0;
</pre>
==== Timer Frequency ====
The system timer inside the "8254 PIT" unit of the chipset on a PC has a base frequency of 1.193182 MHz. The number of task switches, the system clock and all timing for multimedia is usually based on the interrupts generated by the PIT unit. For some unknown reason, this base frequency is 1.125000 MHz on the Xbox, which is about 6% lower. If your operating system does not handle this difference, multimedia plays at the wrong speed and the system clock (if you have a software clock and do not use the hardware clock) will be incorrect quite quickly.
So all you have to do is to search for the constant of 1193182 (sometimes it is 1193180) and replace it with code like this:
<pre>timer_base = machine_is_xbox? 1125000 : 1193182;
</pre>
In case your operating system defines this as a constant, you have to change it into a variable and make sure it is assigned early enough. In this case, it should be a good idea to assign it as soon as you detect whether the machine is an Xbox.
==== Reboot and Poweroff ====
The Xbox chipset has no ACPI capabilities, so it is not possible to shut it down using the ACPI protocol. It is also not possible to reset the Xbox like a PC, because it lacks the keyboard controller which usually includes this feature. Both these functions are handled by the "System Management Controller" SMC (also called the "PIC"), which is a device on the SMBus.
In order to communicate with a device on the SMBus, you need a driver for the Xbox SMBus controller, which is AMD754 compatible. Linux for example includes this driver. But there is no need to statically include a complete bus driver just for this simple function: The SMBus on the Xbox is simple enough to be controlled with just two small C functions. The following code is all you need:
<pre>#define XBOX_SMB_IO_BASE 0xC000
#define XBOX_SMB_GLOBAL_ENABLE (0x2 + XBOX_SMB_IO_BASE)
#define XBOX_SMB_HOST_ADDRESS (0x4 + XBOX_SMB_IO_BASE)
#define XBOX_SMB_HOST_DATA (0x6 + XBOX_SMB_IO_BASE)
#define XBOX_SMB_HOST_COMMAND (0x8 + XBOX_SMB_IO_BASE)
#define XBOX_PIC_ADDRESS 0x10
#define SMC_CMD_POWER 0x02
#define SMC_SUBCMD_POWER_RESET 0x01
#define SMC_SUBCMD_POWER_CYCLE 0x40
#define SMC_SUBCMD_POWER_OFF 0x80
static void xbox_pic_cmd(u8 command)
{
outw_p(((XBOX_PIC_ADDRESS) << 1), XBOX_SMB_HOST_ADDRESS);
outb_p(SMC_CMD_POWER, XBOX_SMB_HOST_COMMAND);
outw_p(command, XBOX_SMB_HOST_DATA);
outw_p(inw(XBOX_SMB_IO_BASE), XBOX_SMB_IO_BASE);
outb_p(0x0a, XBOX_SMB_GLOBAL_ENABLE);
}
void xbox_power_reset(char * __unused)
{
xbox_pic_cmd(SMC_SUBCMD_POWER_RESET);
}
void xbox_power_cycle(char * __unused)
{
xbox_pic_cmd(SMC_SUBCMD_POWER_CYCLE);
}
void xbox_power_off(void)
{
xbox_pic_cmd(SMC_SUBCMD_POWER_OFF);
}
</pre>
''xbox_power_reset'' just resets the system while ''xbox_power_cycle'' turns it off and turns it back on after half a second. Please note that the above SMBus code lacks error detection and should not be used in the general case.
=== DVD Driver ===
Although the DVD drives in the Xbox are basically standard IDE drives, there are some differences, some due to protection issues, and some because of bugs in their firmwares.
==== Reset on Eject ====
On the PlayStation, it was possible to trick the console into loading copies by inserting an original, having the CD checked and quickly replacing it with a copy. The designers of the Xbox made this trick impossible by having an additional security chip, the SMC, which resets the system if the user presses the eject button or even tries to manually eject the tray.
But the system does not ''always'' reset in this case. In the Xbox Dashboard, for example, it is possible to open the tray. Every time the user presses the eject button or the tray opens (for example if the drive ejects on request of software), the PIC sends an EXTSMI# interrupt to the CPU. If the software running on the CPU handles this interrupt and sends back a message to the PIC, then the system will not be reset.
The code in [[arch/i386/mach-xbox/reset-on-eject.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/arch/i386/mach-xbox/reset-on-eject.c?rev=1.2&view=auto'') in the Xbox Linux kernel handles this. Again, you need SMBus code to talk to the SMC.
==== DVD Drive Bugs ====
Microsoft uses several different DVD drives in the Xbox, some of which have its compatibility problems:
{| border="1"
|-
| '''drive string'''
| '''problems'''
|-
| "THOMSON-DVD"
| pretends it cannot play audio or dvds; does not understand the ATAPI eject command
|-
| "PHILIPS XBOX DVD DRIVE"
| does not understand the ATAPI eject command
|-
| "PHILIPS J5 3235C"
| pretends it cannot play audio or dvds
|-
| "SAMSUNG DVD-ROM SDG-605B"
| no issues
|}
In addition, none of these drives respect door locking when the user presses the eject button.
So if you do nothing, some drives won't respond to software eject commands, and some will refuse to play DVD or audio content, because the player software thinks the drive cannot do it. If you want to support all these DVD drives completely, you have to add some code to the ATAPI CD/DVD driver code in your operating system, which probably already includes some tests for other devices, because many CD/DVD drives report incorrect capabilities. The table above includes the exact string identifiers for these Xbox DVD drives, so you can easily check for them.
If the drive does not understand the ATAPI eject command (as well as the load command), you have to issue an eject command to the SMC. The file [[include/linux/xbox.h]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/include/linux/xbox.h?rev=1.1&view=auto'') includes the code you will need. The following two lines are taken from this file:
<pre>#define Xbox_tray_load() Xbox_SMC_write(SMC_CMD_EJECT, SMC_SUBCMD_EJECT_LOAD);
#define Xbox_tray_eject() Xbox_SMC_write(SMC_CMD_EJECT, SMC_SUBCMD_EJECT_EJECT);
</pre>
Please note that having an Xbox DVD drive installed does not necessarily mean that we are running on an Xbox. It is possible (although impractical, because of the incompatible power connectors) to use them in a standard PC. So if the drive does not understand the ATAPI eject command, and we are not running on an Xbox, there is no way to eject the tray, as the drive does not even have its own eject button - and you should of course not send SMC commands on the PC.
The Linux implementation of this behaviour can be found in [[drivers/ide/ide-cd.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/drivers/ide/ide-cd.c?rev=1.13&view=auto''). When detecting the drives, the driver notes in the drive's kernel structure whether it is an Xbox drive and whether it can eject, and corrects the incorrect capabilities. As the physical eject button, which is connected to the SMC, does not respect whether the tray is supposed to be locked, the driver simulates this in software.
Locking/unlocking the door:
<pre>if (xbox_drive && machine_is_xbox) {
simulated_lock = lock;
}
</pre>
Ejecting/loading:
<pre>if (machine_is_xbox && xbox_drive && cannot_eject) {
if (load) {
Xbox_tray_load();
} else {
simulated_lock = 0;
Xbox_tray_eject();
}
return;
}
</pre>
The reset-on-eject driver, which catches eject button presses, should then also respect the flag "simulated_lock" and not open the door if it is locked in software.
Please also note that although certain capability flags of the Xbox drives are correct, software can still have a problem with them. An example on Unix is cdparanoia: If a CD drive has a headphone, then it assumes it must support playing audio CDs. This is logical. But cdparanoia assumes that if a drive has no headphone jack, it does not support audio CDs, but this is not true. All Xbox DVD drives can rip audio CDs, although they all have no headphone jack (and correctly report that).
=== Video Driver ===
Fully supporting the Xbox video hardware could mean a lot of work (or at least a lot of copying from the Xbox kernel). But there is no need to implement a complete video driver. Both bootloaders provided by the Xbox Linux project set up a 640x480 screen (32 bit colour, RGBX), which is useful for many setups. This linear framebuffer lies at the top of memory (around 60 MB) and can be used by your operating system without ever touching any video registers. This just works like the VESA modes supported by most operating systems, which get set up by the boot loader (using BIOS functions) and never get switched afterwards. Have a look at the bootloader section to learn how to find out where this framebuffer is located.
If you want full support, you can reuse driver code for nVidia video hardware, as the Xbox video hardware is fully nVidia compatible. The problem is just that the Xbox does not have a VGA RAMDAC, but a PAL/NTSC video encoder (which is connected through the SMBus), so you always need to make sure when you set up a new mode that the video encoder is also correctly set up, or else you will get garbage on the screen.
Unfortunately, there is one of three incompatible video encoders in every Xbox: The first Xboxes used Connexant chips (1.0 to 1.3), later ones used Focus components (1.4 and 1.5), and 1.6 Xboxes include an integrated Xcalibur unit. That is why you might have to copy a lot of code from the Xbox Linux kernel and have others with different Xboxes test your code. You can find all this code in [[drivers/video/xbox/*]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/drivers/video/xbox/'').
=== Hard Disk ===
The Xbox includes a standard 8 or 10 GB hard disk. For security reasons (the user should be unable to just connect it to a PC) they are locked with an ATA password, but as the firmware already unlocks it, you should not have to care about this, unless you send ATA reset commands to the drive - which you should avoid.
Nevertheless, you might want your operating system to coexist with the Xbox system software, then you have to respect the existing partitioning and install it (probably as an image file) onto an existing partition.
==== Xbox Partitioning ====
The Xbox uses an implicit partitioning scheme, which is described in the articles [[Xbox Partitioning and Filesystem Details]] and [[Xbox Hard Disk Partitioning]]. In order to detect whether the hard drive is Xbox-partitioned, you have to check for the "BRFR" magic value, which must always be present. If this is too little evidence for you, you can also check for the "FATX" header in the "System Files" (C:) partition, but you should not assume any more FATX headers.
You should also create a sixth partition for the space between 8 GB and 137 GB, and a seventh partition for the space above 137 GB in order to be compatible with patched Xbox kernels that work with larger hard disks.
You might want to consider allowing two partitioning systems active at the same time: Xbox partitioning, which defines (at least) the lowermost 8 GB, and standard PC partitioning using a PC partition table (the first sector on the hard disk is unused). Therefore, in Xbox Linux, the Xbox partitions are assigned the numbers 50 to 56, while the Pc partitions start with 1.
In Xbox Linux, this code is located in [[fs/partitions/check.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/fs/partitions/check.c?rev=1.9&view=auto'') and [[fs/partitions/xbox.c xbox.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/fs/partitions/xbox.c?rev=1.7&view=auto'').
==== FATX filesystem ====
On the hard disk, the Xbox exclusively uses the FATX filesystem, which is a simplified version of FAT16/FAT32. The articles [[Xbox Partitioning and Filesystem Details]] and [[Differences between Xbox FATX and MS-DOS FAT]] explain FATX in detail.
=== Peripherals ===
==== Xbox Gamepad ====
The Xbox gamepad is a USB device with a proprietary protocol, which you can find in the Xbox Linux kernel in [[drivers/usb/input/xpad.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/drivers/usb/input/xpad.c?rev=1.5&view=auto''). You might want to add emulation for mouse and/or keyboard as well.
==== Remote Control ====
The remote control is similar to the gamepad. Keyboard and mouse emulation may make sense for it as well.
<! --==== Xbox Live Headset ==== -->
=== Other System Components ===
==== USB ====
The Xbox has a standard OHCI host controller, which your operating system hopefully supports out of the box.
==== Ethernet ====
The Ethernet controller of the Xbox is an nForce "nvnet". The Linux driver [[forcedeth]] (''http://www.hailfinger.org/carldani/linux/patches/forcedeth/'') supports it completely.
=== Sensors ===
There are two temperature sensors on the Xbox (CPU and system). Standard Linux drivers support them. You can control the system fan using the SMC. See the Xbox Linux "tools" source code for details.
85ebfb90b7cb528d6c3cd87a46c9234ae62e189f
NForce
0
3765
5536
2017-05-29T12:13:54Z
Espes
2484
Created page with "Retrieved from [http://www.xbox-linux.org/wiki/NForce] This documents collects information about the Xbox chipset and its sibling, the nVidia nForce chipset, as well as furt..."
wikitext
text/x-wiki
Retrieved from [http://www.xbox-linux.org/wiki/NForce]
This documents collects information about the Xbox chipset and its sibling, the nVidia nForce chipset, as well as further relatives.
== nForce ==
The nForce chipset consists of the IGP (Integrated Graphics Processor) Northbridge and the MCP (Media and Communications Processor) Southbridge. Both are available in different flavours:
* IGP-64: 64 bit memory bus
* IGP-128: 128 bit memory bus (TwinBank), requires two DIMM modules for 128 bit operation
* MCP-D: includes Dolby Digital encoder
* MCP: Dolby Digital encoder disabled
So these are the four possible combinations:
{| class="wikitable"
|-
|
| MCP
| MCP-D
|-
| IGP-64
| nForce 220
| nForce 220D
|-
| IGP-128
| nForce 420
| nForce 420D
|}
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/05/31/nvidia_crush_chipset_named_nforce/]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/06/01/nvidia_crush_is_called_nforce/]
The VGA controller inside the IGP is a "GeForce2 MX Integrated Graphics" (PCI ID:10de/01a0). Its internal name is NV1A.
[https://web.archive.org/web/20100617023830/http://pciids.sourceforge.net/iii/?i=10de]
[https://web.archive.org/web/20100617023830/http://www.nvitalia.com/articoli/editoriali/produzione_nvidia_2001.htm]
Although IGP-64 and IGP-128 are different and their respective chipsets have different codenames (Crush11 and Crush12, see below), there seems to be no difference from the software side:
* The VGA BIOS of the MS-6367 mainboard (nForce 420D configuration, i.e. Crush12) has the internal name "CR11BT.ROM". It also includes the strings "NVIDIA GeForce2 Integrated GPU", "CR11 Board" and "Chip Rev B2".
* The PCI IDs seem to be the same for the GPUs inside IGP-64 and IGP-128.
== Crush ==
"Crush" was the codename of the nForce chipset. Crush11 is the nForce 220/220D/230/230-T, Crush12 is the nForce 420/420D/430/430-T, and Crush18 is the nForce2. The "11" probably derives from "NV11", the internal name of the GeForce2 MX.
[https://web.archive.org/web/20100617023830/http://users.erols.com/chare/chipsets.htm]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2000/11/17/nvidias_super_secret_crush_spec/]
== nForce & Xbox ==
The Xbox has an IGP-128 that uses an NV2A video core (PCI ID:10de/02a5), which is between the GeForce3 (NV20) and the GeForce4 (NV25). The Southbridge is called "MCP-X" and lacks the PCI card bus (PCI bus #1).
[https://web.archive.org/web/20100617023830/http://www.digit-life.com/articles/nvidianforce/]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/showdoc.html?i=1484]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=1535]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/systems/showdoc.aspx?i=1561&p=3]
== AMD Heritage ==
There is the following rumour, which is could not fully verify yet:
* Microsoft wanted AMD to make the CPU and the chipset for the Xbox, and nVidia to make the video hardware.
* When alpha hardware had already bee built, Intel made a better deal
* Microsoft agreed to have Intel CPUs; Intel had to modify AMD's chipset to support an AMD CPU
* Intel insisted that the brand name AMD could not be associated with the Xbox, so nVidia licensed the AMD chipset. Now the Xbox chipset was by nVidia.
* nVidia sold the same chipset for PCs, calling it "nForce".
This is the reason why
* the Xbox is the only nForce chipset with an Intel CPU
* the AMD chipset and the nForce chipset are so similar
Evidence:
* The AMD and nForce AMD IDE controllers are fully compatible. (Linux kernel: "AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04 IDE driver for Linux." [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/ide/pci/amd74xx.c])
* The I2C/SMBus controller on the nForce is fully AMD-756/766/68 compatible. [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/i2c/busses/i2c-amd756.c]
* The audio controller is i810 compatible - as is the audio controller of the AMD-768 and the AMD-8111.
* The nForce and AMD-768 modems are compatible.
* At least one register ("VGA_en") in the nForce PCI-to-AGP bridge is compatible with the AMD chipset (AMD-761, 24081.pdf, page 136).
* The nForce uses HyperTransport.
* [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0307.3/0922.html], [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0301.3/0305.html]
* ''"One man's guess, the silicon is not a major factor. Because the nForce and 760 MP have a similar pin count, they are going to be cost comparable."'' [https://web.archive.org/web/20100617023830/http://overclockers.com/articles446/]
{| class="wikitable"
|-
|
| Northbridge
| Southbridge
|-
| AMD-760
| AMD-761
| AMD-766
|-
| AMD-760MP
| AMD-762
| AMD-766
|-
| AMD-760MPX
| AMD-762
| AMD-768
|}
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_1133,00.html AMD-760™ Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_1130,00.html AMD-760™ MP Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_4296,00.html AMD-760™ MPX Chipset Tech Docs]
<br />
The nForce chipset might be based on the AMD-760 chipset.
== More Links ==
[https://web.archive.org/web/20100617023830/http://www.duxcw.com/digest/guides/mb_chip/nforce/print.htm]
25633d01b1a99888852df2097931eb195e31a706
5585
5536
2017-05-31T08:42:55Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/NForce}}
This documents collects information about the Xbox chipset and its sibling, the nVidia nForce chipset, as well as further relatives.
== nForce ==
The nForce chipset consists of the IGP (Integrated Graphics Processor) Northbridge and the MCP (Media and Communications Processor) Southbridge. Both are available in different flavours:
* IGP-64: 64 bit memory bus
* IGP-128: 128 bit memory bus (TwinBank), requires two DIMM modules for 128 bit operation
* MCP-D: includes Dolby Digital encoder
* MCP: Dolby Digital encoder disabled
So these are the four possible combinations:
{| class="wikitable"
|-
|
| MCP
| MCP-D
|-
| IGP-64
| nForce 220
| nForce 220D
|-
| IGP-128
| nForce 420
| nForce 420D
|}
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/05/31/nvidia_crush_chipset_named_nforce/]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/06/01/nvidia_crush_is_called_nforce/]
The VGA controller inside the IGP is a "GeForce2 MX Integrated Graphics" (PCI ID:10de/01a0). Its internal name is NV1A.
[https://web.archive.org/web/20100617023830/http://pciids.sourceforge.net/iii/?i=10de]
[https://web.archive.org/web/20100617023830/http://www.nvitalia.com/articoli/editoriali/produzione_nvidia_2001.htm]
Although IGP-64 and IGP-128 are different and their respective chipsets have different codenames (Crush11 and Crush12, see below), there seems to be no difference from the software side:
* The VGA BIOS of the MS-6367 mainboard (nForce 420D configuration, i.e. Crush12) has the internal name "CR11BT.ROM". It also includes the strings "NVIDIA GeForce2 Integrated GPU", "CR11 Board" and "Chip Rev B2".
* The PCI IDs seem to be the same for the GPUs inside IGP-64 and IGP-128.
== Crush ==
"Crush" was the codename of the nForce chipset. Crush11 is the nForce 220/220D/230/230-T, Crush12 is the nForce 420/420D/430/430-T, and Crush18 is the nForce2. The "11" probably derives from "NV11", the internal name of the GeForce2 MX.
[https://web.archive.org/web/20100617023830/http://users.erols.com/chare/chipsets.htm]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2000/11/17/nvidias_super_secret_crush_spec/]
== nForce & Xbox ==
The Xbox has an IGP-128 that uses an NV2A video core (PCI ID:10de/02a5), which is between the GeForce3 (NV20) and the GeForce4 (NV25). The Southbridge is called "MCP-X" and lacks the PCI card bus (PCI bus #1).
[https://web.archive.org/web/20100617023830/http://www.digit-life.com/articles/nvidianforce/]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/showdoc.html?i=1484]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=1535]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/systems/showdoc.aspx?i=1561&p=3]
== AMD Heritage ==
There is the following rumour, which is could not fully verify yet:
* Microsoft wanted AMD to make the CPU and the chipset for the Xbox, and nVidia to make the video hardware.
* When alpha hardware had already bee built, Intel made a better deal
* Microsoft agreed to have Intel CPUs; Intel had to modify AMD's chipset to support an AMD CPU
* Intel insisted that the brand name AMD could not be associated with the Xbox, so nVidia licensed the AMD chipset. Now the Xbox chipset was by nVidia.
* nVidia sold the same chipset for PCs, calling it "nForce".
This is the reason why
* the Xbox is the only nForce chipset with an Intel CPU
* the AMD chipset and the nForce chipset are so similar
Evidence:
* The AMD and nForce AMD IDE controllers are fully compatible. (Linux kernel: "AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04 IDE driver for Linux." [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/ide/pci/amd74xx.c])
* The I2C/SMBus controller on the nForce is fully AMD-756/766/68 compatible. [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/i2c/busses/i2c-amd756.c]
* The audio controller is i810 compatible - as is the audio controller of the AMD-768 and the AMD-8111.
* The nForce and AMD-768 modems are compatible.
* At least one register ("VGA_en") in the nForce PCI-to-AGP bridge is compatible with the AMD chipset (AMD-761, 24081.pdf, page 136).
* The nForce uses HyperTransport.
* [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0307.3/0922.html], [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0301.3/0305.html]
* ''"One man's guess, the silicon is not a major factor. Because the nForce and 760 MP have a similar pin count, they are going to be cost comparable."'' [https://web.archive.org/web/20100617023830/http://overclockers.com/articles446/]
{| class="wikitable"
|-
|
| Northbridge
| Southbridge
|-
| AMD-760
| AMD-761
| AMD-766
|-
| AMD-760MP
| AMD-762
| AMD-766
|-
| AMD-760MPX
| AMD-762
| AMD-768
|}
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_1133,00.html AMD-760™ Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_1130,00.html AMD-760™ MP Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_4296,00.html AMD-760™ MPX Chipset Tech Docs]
<br />
The nForce chipset might be based on the AMD-760 chipset.
== More Links ==
[https://web.archive.org/web/20100617023830/http://www.duxcw.com/digest/guides/mb_chip/nforce/print.htm]
c16fb1d9b05b47eb0a887d2ababd7243d962943f
Xbox Hard Disk Technical Details
0
3763
5537
5533
2017-05-29T12:14:44Z
Espes
2484
wikitext
text/x-wiki
Retrieved from [http://www.xbox-linux.org/wiki/Xbox_Hard_Disk_Technical_Details]
by Michael Steil (original version: 1 May 2002, updated 26 September 2002)
== Seagate (10 GB) ==
=== Harddisk information as reported by hdparm -i ===
<pre>Model=ST310211A, FwRev=6.55, SerialNo=6DB2WQW2
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=512kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=19541088
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 *udma2
AdvancedPM=no WriteCache=enabled
Drive Supports : Reserved : ATA-1 ATA-2 ATA-3 ATA-4
</pre>
=== Detailed information as reported by hdparm -I ===
<pre>non-removable ATA device, with non-removable media
Model Number: ST310211A
Serial Number: 6DB2WQW2
Firmware Revision: 6.55
Standards:
Supported: 1 2 3 4
Likely used: 5
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
bytes/track: 0 (obsolete)
bytes/sector: 0 (obsolete)
current sector capacity: 16514064
LBA user addressable sectors = 19541088
Capabilities:
LBA, IORDY(can be disabled)
Buffer size: 512.0kB Queue depth: 1
Standby timer values: spec'd by standard
r/w multiple sector transfer: Max = 16 Current = 16
DMA: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma3 udma4 udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* look-ahead
* write cache
* Power Management feature set
* Security Mode feature set
SMART feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
Security:
supported
enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
Security level high
HW reset results:
CBLID- below Vih
Device num = 1
Checksum: correct
</pre>
=== Hard disk performance measured by hdparm -t ===
<pre>Timing buffered disk reads: 64 MB in 3.51 seconds = 18.23 MB/sec
Timing buffer-cache reads: 128 MB in 0.85 seconds =150.59 MB/sec
</pre>
== Western Digital (8 GB) ==
=== Harddisk information as reported by hdparm -i ===
<pre>Model=WDC WD80EB-28CGH1, FwRev=24.84G24, SerialNo=***************
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=15509/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
BuffType=DualPortCache, BuffSize=768kB, MaxMultSect=16, MultSect=off
CurCHS=15509/16/63, CurSects=15633072, LBA=yes, LBAsects=15633072
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 *mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: device does not report version: 1 2 3 4 5
</pre>
=== Detailed information as reported by hdparm -I ===
<pre>ATA device, with non-removable media
Model Number: WDC WD80EB-28CGH1
Serial Number: ***************
Firmware Revision: 24.84G24
Standards:
Supported: 5 4 3 2
Likely used: 6
Configuration:
Logical max current
cylinders 15509 15509
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 15633072
LBA user addressable sectors: 15633072
device size with M = 1024*1024: 7633 MBytes
device size with M = 1000*1000: 8004 MBytes (8 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 40 Queue depth: 1
Standby timer values: spec'd by Standard, with device specific minimum
R/W multiple sector transfer: Max = 16 Current = 0
Recommended acoustic management value: 128, current value: 254
DMA: mdma0 mdma1 *mdma2 udma0 udma1 udma2 udma3 udma4 udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* Look-ahead
* Write cache
* Power Management feature set
* Security Mode feature set
* SMART feature set
Automatic Acoustic Management feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
Security:
supported
enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
Security level high
HW reset results:
CBLID- above Vih
Device num = 0 determined by CSEL
Checksum: correct
</pre>
=== Hard disk performance measured by hdparm -t ===
<pre>Timing buffered disk reads: 64 MB in 6.58 seconds = 9.73 MB/sec
Timing buffer-cache reads: 128 MB in 3.28 seconds = 39.02 MB/sec
</pre>
633222ac6571f11c49999520a8467a57be1d14ef
EEPROM
0
3742
5538
5428
2017-05-29T12:18:02Z
Espes
2484
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
The Chihiro EEPROM key is <code>7B 35 A8 B7 27 ED 43 7A A0 BA FB 8F A4 38 61 80</code>
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x5C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xA8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
219bc999647029a0353edbe5279aa3b83b656640
Boot Process
0
3683
5539
5535
2017-05-29T12:19:04Z
Espes
2484
/* Overview */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 KB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3. In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows an error screen and halts.
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL ===
Decryption of the 2BL seems to happen in 4 stages.
==== Stage 1 ====
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:
<pre>
void init_rc4() {
uint32_t stack_pointer = 0x8f000;
for (int iterator = 0; iterator <= 255; iterator++) {
set_memory_byte(stack_pointer + iterator, iterator);
}
}
</pre>
==== Stage 2 ====
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.
<pre>
void load_key() {
uint32_t key_location = 0xffffffa5;
uint32_t stack_pointer = 0x8f000;
uint8_t i, j = 0;
for (int iterator = 0; iterator <= 255; iterator++) {
i = get_memory_byte(iterator + stack_pointer);
j += i + get_memory_byte(key_location + (iterator % 16));
set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));
set_memory_byte(j+stack_pointer, i);
}
}
</pre>
==== Stage 3 ====
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.
<pre>
void decrypt() {
uint32_t stack_pointer = 0x0008F000;
uint32_t encrypted = 0xFFFF9E00;
uint32_t decrypted = 0x00090000;
uint8_t a, b, j, i = 0;
i = get_memory_byte(stack_pointer + 0x100); // 0
j = get_memory_byte(stack_pointer + 0x101); // 0
for (int edi = 0; edi <= 0x6000; ++edi) {
++i;
a = get_memory_byte(stack_pointer + i);
j += a;
b = get_memory_byte(stack_pointer + j);
set_memory_byte(stack_pointer + i, b);
set_memory_byte(stack_pointer + j, a);
a += b;
b = get_memory_byte(edi + encrypted);
a = get_memory_byte(stack_pointer + a);
b ^= a;
set_memory_byte(edi + decrypted, b);
}
}
</pre>
==== Stage 4 ====
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.
<pre>
void verify() {
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = 0x900000;
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)
261083a88b0843f6ca7e31de623d7e9f05dbfb5a
5548
5539
2017-05-29T17:51:53Z
Mborgerson
2478
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 KB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3. In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows an error screen and halts.
== MCPX ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = get_memory_dword(0x900000);
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
cc9733dba1d6a4c06550a1364c938709ee748128
5549
5548
2017-05-29T17:52:24Z
Mborgerson
2478
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 KB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3. In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows an error screen and halts.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {
eip = get_memory_dword(0x900000);
} else {
// Else, things have gone wrong
eip = 0xFFFFFF94;
}
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
28aaca511aace8c282e7648d363798793e466d7b
5568
5549
2017-05-30T04:36:24Z
Mborgerson
2478
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 KB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3. In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows an error screen and halts.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
2149dfaa4769069c6ef9a6e59ee9841add78a42b
5571
5568
2017-05-30T15:59:21Z
JayFoxRox
2
/* Overview */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is {{FIXME|reason=What happens to this?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
e6cda6755ae00549c7454b9047b24caf639d8d78
5572
5571
2017-05-30T16:00:16Z
JayFoxRox
2
/* Chain of trust */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Startup animation ===
=== Kernel Re-initialization ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
73f8904e72e063ab53b6c62a920689a0ff0272ad
5573
5572
2017-05-30T22:59:03Z
JayFoxRox
2
/* Kernel */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
01b7621f496e27ca7e8a146b91eb72abf7b6e800
5574
5573
2017-05-30T23:25:18Z
JayFoxRox
2
/* Re-initialization */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
* Anything already done by Stage 1 and Stage 2
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
aa695cba6d4dffda5260aedbdfe07c96fad7908c
5575
5574
2017-05-30T23:28:07Z
JayFoxRox
2
/* Skipped initialization */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order)
* Anything already done by Stage 1 and Stage 2
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
a388bcf34c9321387b44457a12e21762f35aa746
5576
5575
2017-05-30T23:31:56Z
JayFoxRox
2
/* Skipped initialization */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode
uint32_t result, scratch = 0;
while (run_xcodes) {
opcode = get_memory_byte(eip);
operand_1 = get_memory_dword(eip+1);
operand_2 = get_memory_dword(eip+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
eip += operand_2;
}
break;
case 0x09:
eip += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
run_xcodes = 0;
default:
break;
}
eip += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
d6c0158b4d8b5c23d08f8079b8fbb13c74d8de11
SMBus
0
3766
5540
2017-05-29T12:20:54Z
Espes
2484
Created page with "Retreived from http://www.xbox-linux.org/wiki/SMBus_Controller by ''Michael Steil'' (original version: 15/26 June 2002) All non-PC components of the Xbox console are connect..."
wikitext
text/x-wiki
Retreived from http://www.xbox-linux.org/wiki/SMBus_Controller
by ''Michael Steil'' (original version: 15/26 June 2002)
All non-PC components of the Xbox console are connected through an I²C/SMbus interface. I²C/SMBus is a slow low-cost serial bus with each device having a unique 7-bit ID. (Wikipedia has informative articles about [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/I2c I²C] and [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/SMBus SMBus], you might want to check them out.)
There are only two operations of an SMBus controller: write and read. Writing means that an 8 bit command code and an 8 or 16 bit operand are sent to an SMBus device. Reading means that an 8 bit command code is sent to the device and an 8 or 16 bit answer is expected.
The controller for the SMBus interface in the Xbox is a PCI device with the DevID 01B4 and it is built into MPCX southbridge.
==SMBus Controller Port Layout==
{| class="wikitable"
|-
| '''Port'''
| Description''''''
|-
| 0xc000
| '''Status'''
bit 0: abort
bit 1: collision
bit 2: protocol error
bit 3: busy
bit 4: cycle complete
bit 5: timeout
|-
| 0xc002
| '''Control'''
bit 2-0: cycle type
bit 3: start
bit 4: enable interrupt
bit 5: abort
|-
| 0xc004
| '''Address'''
|-
| 0xc006
| '''Data'''
|-
| 0xc008
| '''Command'''
|}
This is very similar (but not identical) to the AMD756/AMD766/AMD768 SMBus controllers. The [https://web.archive.org/web/20100617015507/http://www.lm-sensors.nu/ lm_sensors project] includes GPLed Linux kernel code for it since version 2.6.4 (kernel/busses/i2c-amd756.c).
==SMBus Controller Programming==
The following two routines illustrate how to read and write data from and to an SMBus device:
<pre> int SMBusWriteCommand(unsigned char slave, unsigned char command, int isWord, unsigned short data) {
again:
_outp(0xc004, (slave<<1)&0xfe);
_outp(0xc008, command);
_outpw(0xc006, data);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
return 1;
}
</pre>
<pre> int SMBusReadCommand(unsigned char slave, unsigned char command, int isWord, unsigned short *data) {
again:
_outp(0xc004, (slave<<1)|0x01);
_outp(0xc008, command);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
*data = _inpw(0xc006);
return 1;
}
</pre>
<br />
To avoid busy waiting of the CPU, the SMBus controller can also issue an interrupt when the operation is complete, by setting bit #4 in the control port when initiating the transfer.
==Xbox SMBus Devices==
The following four devices are connected to the Xbox SMBus:
{| class="wikitable"
|-
| '''Device'''
| '''Hardware Address'''
| '''Software Address'''
|-
| PIC16LC
| 0x10
| 0x20
|-
| Conexant CX25871 Video Encoder
| 0x45
| 0x8a
|-
| ADM1032 System Temperature Monitor
| 0x4c
| 0x98
|-
| Serial EEPROM
| 0x54
| 0xa8
|}
Do not confuse the hardware with the software addresses: The software ID is the hardware ID shifted by one bit left. The code above expects the hardware ID.
Actually, these addresses are not literally accurate; you find that the hardware address is 0x54 for the EEPROM: the actual address of the EEPROM on the i2c bus is 1010 (0xa), however, you will also notice that 0x54 is '''1010'''100 in binary, and it seems that this 100 is also appended onto the other devices as well (although their software address is naturally read as say '''1010'''1000 - obviously because of the left shifting, however, it could be speculated that it would be possible to communicate with devices over the SMBus that are connected via i2c, so long as you knew their base address.
3a69b0c66e1241a06ff935ae9d441adc2dc4fd3b
Xbox Hardware Overview
0
3767
5541
2017-05-29T12:22:36Z
Espes
2484
Created page with "Retrieved from [http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview] The Xbox is a standard PC, based on standard components, but extended with a some security solutions...."
wikitext
text/x-wiki
Retrieved from [http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview]
The Xbox is a standard PC, based on standard components, but extended with a some security solutions. This document gives an overview of the components the Xbox is made of.
= Overview =
Viewed by connection (similar to the Windows 2000 Device Manager
view), the Xbox system hardware looks like this:
Diagram modified by Fahad
<pre>Xbox V1.0-1.5
|
|-- Mobile Intel Pentium III 733mHz w/128kb Cache
|
|-- Flash ROM (V1.0/1.1 -
|
\-- PCI bus
|
|-- Programmable Interrupt Controller
|
|-- System Timer
|
|-- DMA Controller
|
|-- PCI Bridge Device - Host Bridge (0:0:0, 0x2a5)
|
|-- Memory Controller - SDRAM - Samsung K4D263238M-QC50 133mHz 16mb (0:0:3, 0x2a6)
| |
| |-- Top of Motherboard
| | |
| | |-- Pad 1 (closest to power connector) (empty)
| | |
| | |-- Pad 2 (left of Pad 1)
| | |
| | |-- Pad 3 (below Pad 4)
| | |
| | \-- Pad 4 (closest to AV connector) (empty)
| |
| \-- Bottom of Motherboard
| |
| |-- Pad 5 (paralell to Pad 1) (empty)
| |
| |-- Pad 6 (paralell to Pad 2)
| |
| |-- Pad 7 (paralell to Pad 3)
| |
| \-- Pad 8 (paralell to Pad 4) (empty)
|
|-- HUB Interface - ISA Bridge (0:1:0, 0x1b2) [nForce]
|
|-- SMBus Controller (0:1:1, 0x1b4) [nForce]
| |
| |-- PIC16LC
| |
| |-- Conexant 25871/Focus 454/Xcalibur Video Encoder
| |
| |-- ADM1032 System Temperature Monitor
| |
| \-- Serial EEPROM
|
|-- OHCI USB Controller (0:2:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 1 & 2)
|
|-- OHCI USB Controller (0:3:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 3 & 4)
|
|-- MCP-X V3 Southbridge
| |
| |-- MCP Networking Adapter (0:4:0, 0x1c3) [nForce]
| |
| \-- MCP APU (0:5:0, 0x1b0) [nForce]
|
|-- AC`97 Audio Codec Interface (0:6:0, 0x1b1) [nForce]
|
|-- Simple Communication Controller - Generic Modem (0:6:1, 0x1c1) [???]
|
|-- IDE Controller (0:9:0, 0x1bc) [nForce]
| |
| |-- Primary IDE Channel
| | |
| | |-- Seagate ST3210014ACE 10.2gb (8gb used)/Custom Western Digital WD80EB 8gb hard drive
| | |
| | \-- Custom Samsung/Phillips/Thompson/LG DVD Drive
| |
| \--- Secondary IDE Channel
|
|-- PCI Bridge (0:8:0, 0x1b8) [nForce]
|
\-- AGP Host to PCI Bridge (0:30:0, 0x1b7) [nForce]
|
\-- NV2A GeForce 3MX Integrated GPU/Northbridge 233mHz (1:0:0, 0x2a0)
</pre>
<br />
PCI devices have their Bus:Dev:Func numbers as well as the DevID
printed next to them. PCI devices with "[nForce]" have the same DevIDs as
their counterparts of the nForce chipset.
A derivative of the Xbox chipset is also available as the PC chipset
"nVidia nForce", which consists of a northbridge with the memory
interface and the GPU and the southbridge with the PCI bus and its
devices, just like the Xbox chipset. Many of the southbridge PCI devices
are the same on both versions, i.e. they have the same DevID.
= The Devices in Detail =
== Intel Pentium III CPU ==
The CPU is a standard Pentium III Coppermine mobile at 733 MHz. This CPU has been found to be a modified Pentium III, as it has many of the features a Celeron lacks. Therefore, it can be classified as a Pentium III with a smaller cache. (Regular has 256kb or more, XBox has 128kb)
== Flash ROM ==
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MB; 0xFFFC0000, if the ROM is 256 KB) into the but the Xbox kernel.
== PCI bus, Host Bridge, ISA Bridge, AGP Host to PCI Bridge, Memory Controller ==
These devices are identical to the corresponding devices contained in the nForce chipset. The PCI bus can be accessed like on any PC.
== Programmable Interrupt Controller, System Timer, DMA Controller ==
These legacy PC/AT system devices are fully PC-compatible, but the timer frequency is 6% higher than in a PC.
== SMBus Controller ==
Some low-speed devices are connected through the SMBus, so the
southbridge contains an SMBus controller, compatible to the SMBus
controller in the nVidia nForce chipset. Since nForce is based on AMD's original chipset for Athlon CPUs, the SMBus controller is AMD-756 compatible.
== PIC16LC ==
The PIC16LC is a small 8 bit processor running at 20 MHz with its
own ROM, RAM and I/O lines. It controls:
* Power button
* Eject button
* Power/error LED
* DVD tray status (through extra pins to DVD drive)
* Video cable type (3 pins)
The PIC is always running, even if the Xbox is turned off. When the
power cable is unplugged, it gets its energy from a capacitor for some
hours.
== Video Encoder ==
The Xbox does not use an ordinary [https://web.archive.org/web/20100617022211/http://en.wikipedia.org/wiki/RAMDAC RAMDAC] for video output. Instead, it employs a <em>video encoder</em>.
Video encoder is a chip that converts a digital pixel data stream (coming from the nVidia NV2A graphics processor) into analog video signal, just like a RAMDAC would. An ordinary RAMDAC, however, can only output VGA-style RGB signal. The video encoder used in the Xbox is more flexible, and can generate several different types of signals that adhere to various video standards and color formats. These include, but are not necessarily limited to:
* VGA-style >31 kHz RGB, though only with Sync-on-Green sync signals. (If needed, separate HSYNC and VSYNC signals can be obtained from the motherboard, or by building a special video cable with active electronics for stripping and separating the Sync-on-Green sync signal. In any case, separate HSYNC and VSYNC are not available directly through the AV connector.)
* TV-compatible 15 kHz RGB (with composite sync) – suitable for European-style SCART RGB output (are progressive 625/50 signals supported?)
* Component (Y'PbPr) signal, both in SDTV and HDTV resolutions; suitable for American-style "component" output
* PAL color signal with typical PAL timings (including PAL60), in both composite (CVBS) and s-video (Y/C) formats
* SECAM color signal with typical SECAM timings, in both composite (CVBS) and s-video (Y/C) formats
* NTSC color signal with typical NTSC timings, in both composite (CVBS) and s-video (Y/C) formats
* Black and white composite video signal without a color carrier
The video encoder is also capable of PALplus style Line 23 Wide Screen Signalling (WSS), and the Xbox PIC is rigged with the capability of controlling Scart pin 8 (the ''function switching pin'', which is used as an alternative method of Wide Screen Signalling) and pin 16 (the ''fast switching pin''.)
The make and model of the video encoder has varied through the times – three different video encoders have been used this far. All three are very similar in their features; they support various modes and are flexible enough to be able to output a VGA compatible signal (which is not supported by the Xbox kernel.) They are, however, not register-compatible.
Two of the video encoders (namely, Conexant CX25871 and Focus FS454) also have extensive scaling and filtering functionality, which allows for [https://web.archive.org/web/20100617022211/http://scanline.ca/overscan/ overscan compensation] in desktop-style "TV out" usage. (This means that the GPU can output ordinary VGA resolutions with VGA timings and the video encoder can convert them to SDTV resolutions with TV-style timings on the fly, adding borders around the image so that a projection of the VGA framebuffer image falls within the "safe area" of the video signal.) The capabilities of the Xcalibur chip, however, remain a mystery in this regard: it is not known whether it has a scaler.
All video encoders are connected to (and controlled via) <a href="/web/20100617022211/http://www.xbox-linux.org/wiki/SMBus_Controller" title="SMBus Controller">IÃÂÃÂÃÂòC/SMBus</a>.
=== Conexant CX25871 ===
[https://web.archive.org/web/20100617022211/http://www.conexant.com:9000/cgi-bin/query?mss=srchprod&pg=q&i=IDXPRODSRCH&q=cx25870 Conexant CX25871] is a close relative of the Brooktree BT868/BT869. There is also a sister model (CX25870) without the Macrovision capability. This chip was used in Xbox versions v1.0 through v1.3. If you follow the link, you will find a product brief and a complete data sheet, with register-level programming information.
=== Focus FS454 ===
[https://web.archive.org/web/20100617022211/http://www.focusinfo.com/solutions/catalog.asp?id=30 Focus FS454] was used in v1.4 (and possibly v1.5) Xboxes. There is also a sister model (FS453) without the Macrovision capability. The data sheet containing the necessary programming information is available from the manufacturer by separate request. Copies of it have also been seen floating around the net.
=== Xcalibur ===
The "Xcalibur" video encoder is a custom chip manufactured for Microsoft. It was first used in the Xbox hardware revision 1.6.
The Xbox-Linux support the Xcalibur video encoders is very limited at present (see <a href="/web/20100617022211/http://www.xbox-linux.org/wiki/Xbox_v1.6_Issues" title="Xbox v1.6 Issues">Xbox v1.6 Issues</a>). The reason for this is that there is, at least currently, no official programming documentation available for this chip. It seems the only way to find out more is through reverse-engineering techniques.
Xboxes that contain the Xcalibur encoder have the firmware ROM and the PIC physically integrated into another MS-specific chip, named Xyclops.
== ADM1032 System Temperature Monitor ==
The Analog Devices ADM1032 is an SMBus device that does temperature
measurement.
== Serial EEPROM ==
The Serial EEPROM holds some settings, such as time zone, language,
IP address etc., as well as the hard disk key and the Xbox serial number.
== OHCI USB Controller, IDE Controller ==
These devices are compatible to standard PC devices.
== MCP Networking Adapter, MCP APU, Audio Codec Interface ==
These are identical with the nForce devices.
== Simple Communication Controller - Generic Modem ==
Nothing is known about the purpose of this device. It never gets
used by the Xbox system software. It is probably there, because the nForce has a PCI softmodem, but in the Xbox, the corresponding lines of the Southbridge don't seem to be connected.
== NV2A GeForce3 Integrated GPU ==
The Xbox graphics hardware is VGA compatible and very similar to
existing nVidia graphics cards.
= Further Information =
Information about all chips and links to technical documentation can
be found at
[https://web.archive.org/web/20100617022211/http://www.console-dev.com/xbox.htm Pixel8's site]
somehting
61e508517e742fa577ed8eef8ddcb3b0f8dcc824
Xbox DVD Movie Playback Kit
0
3768
5542
2017-05-29T12:23:49Z
Espes
2484
Created page with "Retrieved from [http://www.xbox-linux.org/wiki/DVD-IR_Internals] by ''Rob Reilink'', 3 Mar 2003 ==Introduction== The DVD-IR remote receiver is a part of the DVD kit whi..."
wikitext
text/x-wiki
Retrieved from [http://www.xbox-linux.org/wiki/DVD-IR_Internals]
by ''Rob Reilink'', 3 Mar 2003
==Introduction==
The DVD-IR remote receiver is a part of the DVD kit which allows you to view DVDs on your Xbox. It comes together with a remote controller. Although it may seem just a simple microcontroller device with a receiver module, there is something more inside which could make it even more interesting.
==Pictures==
Ok, let's start with the pictures from the internals:
'''Missing image'''<br />''Dvdirfront.jpg'' <br />Image:Dvdirfront.jpg<br /><br />
'''Missing image'''<br />''Dvdirback.jpg'' <br />Image:Dvdirback.jpg<br /><br />
==IC's==
So, what is inside and what does it do?
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
==Hacking!==
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. It should be noted though, that the ROM is probably scrambled. Also, the microcontroller could encrypt the data even more. As the mask ROM is not a proprietary device, it is known not to contain any encryption hardware. On the other hand is it quite reasonable to assume Microsoft also signed this piece of code, and the dashboard might refuse to run it if it is not signed.
bc891902f582ef699e1f52cb96900f70d132f7a1
Network
0
3692
5543
5151
2017-05-29T13:54:48Z
Wayo
2479
/* Xbox Live */
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. [Wikipedia]
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.de/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
3baeb0eac433b2a2f9dcfca3f371d651337c3e39
5544
5543
2017-05-29T14:38:24Z
Wayo
2479
/* Xbox Live */
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.de/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.de/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.de/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.de/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.de/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.de/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.de/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
83304589fb0a0ca0d5fa25ed579ebbd16293dc84
Kernel
0
3678
5545
5276
2017-05-29T16:07:13Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
It's image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
=== IDEXPRDT ===
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
Later kernels{{FIXME|reason=Which revision?}} will discard this section after initialization.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/RtlSnprintf]]
|361
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
12a73a57c84911a370e47bbcd66b41bb2fe4ee58
5546
5545
2017-05-29T16:11:19Z
JayFoxRox
2
/* IDEXPRDT */
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
It's image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
Later kernels{{FIXME|reason=Which revision?}} will discard this section after initialization.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/RtlSnprintf]]
|361
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
9893f1fc2961565c63cf69e44a8d452c8c03ff11
5547
5546
2017-05-29T16:16:25Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
Later kernels{{FIXME|reason=Which revision?}} will discard this section after initialization.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/RtlSnprintf]]
|361
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
bbfee54b8d7a1f6783209d61521b5e7867c0adcc
5550
5547
2017-05-29T20:07:28Z
JayFoxRox
2
/* STICKY */
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
Later kernels{{FIXME|reason=Which revision?}} will discard this section after initialization.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/RtlSnprintf]]
|361
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
86166624f34a6f6d09994ba24a34fcdb49c6bed9
5551
5550
2017-05-29T23:18:07Z
Haxar
2485
.text and .rdata distinction
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains all x86 subroutines to be executed by the processor.
=== .rdata ===
The .rdata section contains the kernel thunk table. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
Later kernels{{FIXME|reason=Which revision?}} will discard this section after initialization.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|
|-
|[[Kernel/DbgPrompt]]
|10
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|
|-
|[[Kernel/ExAllocatePool]]
|14
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|
|-
|[[Kernel/ExEventObjectType]]
|16
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|
|-
|[[Kernel/ExRaiseException]]
|26
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|
|-
|[[Kernel/InterlockedExchange]]
|54
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|
|-
|[[Kernel/IoCreateFile]]
|66
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|
|-
|[[Kernel/IoStartPacket]]
|83
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|
|-
|[[Kernel/IofCallDriver]]
|86
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|
|-
|[[Kernel/KeAlertThread]]
|93
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|
|-
|[[Kernel/KeBugCheck]]
|95
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|
|-
|[[Kernel/KeCancelTimer]]
|97
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|
|-
|[[Kernel/MmGlobalData]]
|102
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|
|-
|[[Kernel/KeInitializeApc]]
|105
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|
|-
|[[Kernel/KeInsertQueue]]
|117
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|
|-
|[[Kernel/KeInterruptTime]]
|120
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|
|-
|[[Kernel/KePulseEvent]]
|123
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|
|-
|[[Kernel/KeResetEvent]]
|138
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|
|-
|[[Kernel/KeResumeThread]]
|140
|
|-
|[[Kernel/KeRundownQueue]]
|141
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|
|-
|[[Kernel/KeSetEvent]]
|145
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|
|-
|[[Kernel/KeSetTimer]]
|149
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|
|-
|[[Kernel/KeSuspendThread]]
|152
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|
|-
|[[Kernel/KeSystemTime]]
|154
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|
|-
|[[Kernel/KeTickCount]]
|156
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|
|-
|[[Kernel/KfLowerIrql]]
|161
|
|-
|[[Kernel/KiBugCheckData]]
|162
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|
|-
|[[Kernel/LaunchDataPage]]
|164
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|
|-
|[[Kernel/NtCancelTimer]]
|185
|
|-
|[[Kernel/NtClearEvent]]
|186
|
|-
|[[Kernel/NtClose]]
|187
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|
|-
|[[Kernel/NtCreateEvent]]
|189
|
|-
|[[Kernel/NtCreateFile]]
|190
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|
|-
|[[Kernel/NtCreateMutant]]
|192
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|
|-
|[[Kernel/NtCreateTimer]]
|194
|
|-
|[[Kernel/NtDeleteFile]]
|195
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|
|-
|[[Kernel/NtFsControlFile]]
|200
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|
|-
|[[Kernel/NtOpenFile]]
|202
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|
|-
|[[Kernel/NtPulseEvent]]
|205
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|
|-
|[[Kernel/NtQueryEvent]]
|209
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|
|-
|[[Kernel/NtQueryMutant]]
|213
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|
|-
|[[Kernel/NtQueryTimer]]
|216
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|
|-
|[[Kernel/NtReadFile]]
|219
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|
|-
|[[Kernel/NtResumeThread]]
|224
|
|-
|[[Kernel/NtSetEvent]]
|225
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|
|-
|[[Kernel/NtSuspendThread]]
|231
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|
|-
|[[Kernel/NtWriteFile]]
|236
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|
|-
|[[Kernel/NtYieldExecution]]
|238
|
|-
|[[Kernel/ObCreateObject]]
|239
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|
|-
|[[Kernel/PhyInitialize]]
|253
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|
|-
|[[Kernel/RtlAssert]]
|264
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|
|-
|[[Kernel/RtlCompareString]]
|270
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|
|-
|[[Kernel/RtlCopyString]]
|272
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|
|-
|[[Kernel/RtlEqualString]]
|279
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|
|-
|[[Kernel/RtlFillMemory]]
|284
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|
|-
|[[Kernel/RtlLowerChar]]
|296
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|
|-
|[[Kernel/RtlRaiseException]]
|302
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|
|-
|[[Kernel/RtlUnwind]]
|312
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|
|-
|[[Kernel/RtlUpperChar]]
|316
|
|-
|[[Kernel/RtlUpperString]]
|317
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|
|-
|[[Kernel/XeUnloadSection]]
|328
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|
|-
|[[Kernel/XcSHAInit]]
|335
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|
|-
|[[Kernel/XcSHAFinal]]
|337
|
|-
|[[Kernel/XcRC4Key]]
|338
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|
|-
|[[Kernel/XcHMAC]]
|340
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|
|-
|[[Kernel/XcModExp]]
|345
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|
|-
|[[Kernel/XcKeyTable]]
|347
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|
|-
|[[Kernel/XcCryptService]]
|350
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|
|-
|[[Kernel/RtlRip]]
|352
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|
|-
|[[Kernel/RtlSnprintf]]
|361
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|
|-
|
|367
|Unused?
|-
|
|368
|Unused?
|-
|
|369
|Unused?
|-
|
|370
|Unused?
|-
|
|371
|Unused?
|-
|
|372
|Unused?
|-
|
|373
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
268a8aee4299ba6b05a9a63526cddf458fea6785
5552
5551
2017-05-29T23:49:21Z
Haxar
2485
Added Calling Convention definitions
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains all x86 subroutines to be executed by the processor.
=== .rdata ===
The .rdata section contains the kernel thunk table. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
Later kernels{{FIXME|reason=Which revision?}} will discard this section after initialization.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|stdcall
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|stdcall
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|stdcall
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|stdcall
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|stdcall
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|stdcall
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|stdcall
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|stdcall
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|stdcall
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|stdcall
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|stdcall
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|stdcall
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|stdcall
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|stdcall
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|stdcall
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|stdcall
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|stdcall
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|stdcall
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|stdcall
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|stdcall
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|stdcall
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|stdcall
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|stdcall
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|stdcall
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|stdcall
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|stdcall
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|stdcall
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|stdcall
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|stdcall
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|stdcall
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|stdcall
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|stdcall
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|stdcall
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|stdcall
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
bb568f6ead9cf97c5dfb0af52adddda0cc16aef1
5553
5552
2017-05-29T23:52:42Z
Haxar
2485
Undo revision 5551: whoops... should go to the XBE page
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
Later kernels{{FIXME|reason=Which revision?}} will discard this section after initialization.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|stdcall
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|stdcall
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|stdcall
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|stdcall
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|stdcall
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|stdcall
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|stdcall
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|stdcall
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|stdcall
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|stdcall
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|stdcall
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|stdcall
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|stdcall
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|stdcall
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|stdcall
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|stdcall
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|stdcall
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|stdcall
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|stdcall
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|stdcall
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|stdcall
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|stdcall
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|stdcall
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|stdcall
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|stdcall
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|stdcall
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|stdcall
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|stdcall
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|stdcall
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|stdcall
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|stdcall
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|stdcall
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|stdcall
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|stdcall
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
== See Also ==
[[Hard Drive Files]]
d4dad83a62efce1f3cd201174542e30c2a9adef9
5569
5553
2017-05-30T15:47:11Z
JayFoxRox
2
/* See Also */
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
Later kernels{{FIXME|reason=Which revision?}} will discard this section after initialization.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|stdcall
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|stdcall
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|stdcall
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|stdcall
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|stdcall
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|stdcall
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|stdcall
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|stdcall
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|stdcall
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|stdcall
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|stdcall
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|stdcall
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|stdcall
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|stdcall
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|stdcall
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|stdcall
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|stdcall
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|stdcall
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|stdcall
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|stdcall
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|stdcall
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|stdcall
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|stdcall
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|stdcall
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|stdcall
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|stdcall
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|stdcall
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|stdcall
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|stdcall
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|stdcall
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|stdcall
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|stdcall
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|stdcall
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|stdcall
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
69604c5f13af635778476b22d15b16e8727a3264
XBE
0
3769
5554
2017-05-30T00:01:29Z
Haxar
2485
Created page with "=== .text === The .text section contains all x86 subroutines to be executed by the [[CPU|processor]]. === .rdata === The .rdata section contains the Kernel|kernel thunk t..."
wikitext
text/x-wiki
=== .text ===
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
=== .rdata ===
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
3e0b29dca2b9be0d57c908919dec3f45839b4d9d
5562
5554
2017-05-30T01:13:05Z
Haxar
2485
An XBE page already exists.
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
5563
5562
2017-05-30T01:14:59Z
Haxar
2485
Redirected page to [[Xbe]]
wikitext
text/x-wiki
#REDIRECT [[Xbe]]
31effefe95bd7e24787724412bc6178afa0aaf6d
Main Page
0
1
5555
5500
2017-05-30T00:04:11Z
Haxar
2485
/* System Software */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[DSP]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
805e684e96bd965f492de0a9a2de636fab3045eb
User:Haxar
2
3770
5556
2017-05-30T00:41:03Z
Haxar
2485
Created page with "=== GitHub === * [https://github.com/haxar/cxbx-shogun Cxbx w/ Wine support.] === R&D === * [[User:Haxar/fastcall|fastcall routines from rgrep]]"
wikitext
text/x-wiki
=== GitHub ===
* [https://github.com/haxar/cxbx-shogun Cxbx w/ Wine support.]
=== R&D ===
* [[User:Haxar/fastcall|fastcall routines from rgrep]]
574d358c48a2ba70de5ea4714ebf7ed3f8e79ff8
User:Haxar/fastcall
2
3771
5557
2017-05-30T00:47:38Z
Haxar
2485
Created page with "=== fastcall routines from rgrep === All kernel and library routines are '''stdcall''' unless noted otherwise: <pre> FASTCALL D3DDevice_SetRenderState_Deferred FASTCALL D3DDe..."
wikitext
text/x-wiki
=== fastcall routines from rgrep ===
All kernel and library routines are '''stdcall''' unless noted otherwise:
<pre>
FASTCALL D3DDevice_SetRenderState_Deferred
FASTCALL D3DDevice_SetRenderState_Simple
FASTCALL D3DDevice_SetTextureState_Deferred
FASTCALL D3DDevice_SetVertexShaderConstant1
FASTCALL D3DDevice_SetVertexShaderConstant1Fast
FASTCALL D3DDevice_SetVertexShaderConstant4
FASTCALL D3DDevice_SetVertexShaderConstantNotInline
FASTCALL D3DDevice_SetVertexShaderConstantNotInlineFast
FASTCALL D3DDevice_SwitchTexture
FASTCALL DmProfileDpcDispatchNotifyCallback
FASTCALL DmProfileThreadSwitchNotifyCallback
FASTCALL ExAcquireFastMutex
FASTCALL ExAcquireFastMutexUnsafe
FASTCALL ExfInterlockedInsertTailList
FASTCALL ExfInterlockedRemoveHeadList
FASTCALL ExInterlockedAddLargeStatistic
FASTCALL ExInterlockedAddUlong
FASTCALL ExInterlockedCompareExchange64
FASTCALL ExInterlockedFlushSList
FASTCALL ExInterlockedInsertHeadList
FASTCALL ExInterlockedInsertTailList
FASTCALL ExInterlockedPopEntryList
FASTCALL ExInterlockedPopEntrySList
FASTCALL ExInterlockedPushEntryList
FASTCALL ExInterlockedPushEntrySList
FASTCALL ExInterlockedRemoveHeadList
FASTCALL ExReleaseFastMutex
FASTCALL ExReleaseFastMutexUnsafe
FASTCALL FlashReadMSR
FASTCALL FlashWriteMSR
FASTCALL fProcessBrainBoxData
FASTCALL FscSetCacheBufferProtection
FASTCALL GetTypeInformation
FASTCALL HalBeginClockInterrupt
FASTCALL HalBeginProfileInterrupt
FASTCALL HalBeginSMBusInterrupt
FASTCALL HalBeginSystemControlInterrupt
FASTCALL HalBeginSystemInterrupt
FASTCALL HalClearSoftwareInterrupt
FASTCALL HalEndSystemInterrupt
FASTCALL HalEndSystemLevelInterrupt
FASTCALL HalRequestSoftwareInterrupt
FASTCALL IdexCdRomStartCheckVerify
FASTCALL IdexCdRomStartEndSession
FASTCALL IdexCdRomStartGetDriveGeometry
FASTCALL IdexCdRomStartRawRead
FASTCALL IdexCdRomStartReadKey
FASTCALL IdexCdRomStartReadTOC
FASTCALL IdexCdRomStartScsiPassThrough
FASTCALL IdexCdRomStartSendKey
FASTCALL IdexCdRomStartSetSpindleSpeed
FASTCALL IdexCdRomStartStartSession
FASTCALL IdexChannelInvalidParameterRequest
FASTCALL IdexChannelPrepareBufferTransfer
FASTCALL IdexChannelSpinWhileBusy
FASTCALL IdexChannelSpinWhileBusyAndNotDrq
FASTCALL IdexDiskStartFlushBuffers
FASTCALL IdexDiskStartReadWrite
FASTCALL IdexDiskStartVerify
FASTCALL IdexMediaBoardStartReadWrite
FASTCALL InterlockedCompareExchange
FASTCALL InterlockedDecrement
FASTCALL InterlockedExchange
FASTCALL InterlockedExchangeAdd
FASTCALL InterlockedFlushSList
FASTCALL InterlockedIncrement
FASTCALL InterlockedPopEntrySList
FASTCALL InterlockedPushEntrySList
FASTCALL IofCallDriver
FASTCALL IofCompleteRequest
FASTCALL IopAcquireFileObjectLock
FASTCALL IopReleaseFileObjectLock
FASTCALL KeAcquireSpinLockRaiseToSynch
FASTCALL KefAcquireSpinLockAtDpcLevel
FASTCALL KefReleaseSpinLockFromDpcLevel
FASTCALL KfAcquireSpinLock
FASTCALL KfLowerIrql
FASTCALL KfRaiseIrql
FASTCALL KfReleaseSpinLock
FASTCALL KiAcquireSpinLock
FASTCALL KiActivateWaiterQueue
FASTCALL KiComputeWaitInterval
FASTCALL KiDpcDispatchNotify
FASTCALL KiFindReadyThread
FASTCALL KiInsertQueue
FASTCALL KiInsertQueueApc
FASTCALL KiInsertTimerTable
FASTCALL KiInsertTreeTimer
FASTCALL KiReadyThread
FASTCALL KiReinsertTreeTimer
FASTCALL KiReleaseSpinLock
FASTCALL KiSelectNextThread
FASTCALL KiSetPriorityThread
FASTCALL KiSwapThread
FASTCALL KiTimerListExpire
FASTCALL KiUnlockDispatcherDatabase
FASTCALL KiUnwaitThread
FASTCALL KiWaitSatisfyAll
FASTCALL KiWaitSatisfyAny
FASTCALL KiWaitSatisfyMutant
FASTCALL KiWaitSatisfyOther
FASTCALL KiWaitTest
FASTCALL MiDecodePteProtectionMask
FASTCALL MiGetFirstNode
FASTCALL MiGetNextNode
FASTCALL MiGetPreviousNode
FASTCALL MiInsertNode
FASTCALL MiInsertPageInFreeList
FASTCALL MiLocateAddress
FASTCALL MiLocateAddressInTree
FASTCALL MiMakePteProtectionMask
FASTCALL MiMakeSystemPteProtectionMask
FASTCALL MiReleasePageOwnership
FASTCALL MiRelocateBusyPage
FASTCALL MiRemoveAnyPage
FASTCALL MiRemoveAnyPageFromFreeList
FASTCALL MiRemoveDebuggerPage
FASTCALL MiRemoveNode
FASTCALL MiRemovePageFromFreeList
FASTCALL MiRemoveZeroPage
FASTCALL MiZeroAndFlushPtes
FASTCALL MU_fCbwTransfer
FASTCALL MU_fCloseEndpoints
FASTCALL MU_fCswTransfer
FASTCALL MU_fDataTransfer
FASTCALL MU_fDiskReadDriveCapacity
FASTCALL MU_fDiskReadWrite
FASTCALL MU_fDiskVerify
FASTCALL MU_fMarkWriteBufferCorrupt
FASTCALL MU_fMrbErrorHandler
FASTCALL MU_fStartMrb
FASTCALL MU_fValidateMrb
FASTCALL MU_fVscCommand
FASTCALL ObfDereferenceObject
FASTCALL ObfReferenceObject
FASTCALL ObpComputeHashIndex
FASTCALL OHCD_fAbortEndpoint
FASTCALL OHCD_fCancelQueuedUrbs
FASTCALL OHCD_fCleanEndpointTDs
FASTCALL OHCD_fCloseEndpoint
FASTCALL OHCD_fCompleteRequest
FASTCALL OHCD_fCreditTDQuota
FASTCALL OHCD_fDequeueBulkTransfer
FASTCALL OHCD_fDequeueControlTransfer
FASTCALL OHCD_fDequeueInterruptTransfer
FASTCALL OHCD_fGetEndpointState
FASTCALL OHCD_fGetTDsRequired
FASTCALL OHCD_fIsochAttachBuffer
FASTCALL OHCD_fIsochCloseEndpoint
FASTCALL OHCD_fIsochCompleteCloseEndpoint
FASTCALL OHCD_fIsochOpenEndpoint
FASTCALL OHCD_fIsochProcessTD
FASTCALL OHCD_fIsochStartTransfer
FASTCALL OHCD_fIsochStopTransfer
FASTCALL OHCD_fMapTransfer
FASTCALL OHCD_fOpenEndpoint
FASTCALL OHCD_fPauseEndpoint
FASTCALL OHCD_fPoolFindLostDoneHead
FASTCALL OHCD_fPoolInit
FASTCALL OHCD_fProcessAbortPendingList
FASTCALL OHCD_fProcessCancelPendingList
FASTCALL OHCD_fProcessClosePendingList
FASTCALL OHCD_fProcessDoneTD
FASTCALL OHCD_fProcessFailedTD
FASTCALL OHCD_fProgramBulkTransfer
FASTCALL OHCD_fProgramControlTransfer
FASTCALL OHCD_fProgramInterruptTransfer
FASTCALL OHCD_fProgramTransfer
FASTCALL OHCD_fQueueBulkTransfer
FASTCALL OHCD_fQueueControlTransfer
FASTCALL OHCD_fQueueInterruptTransfer
FASTCALL OHCD_fQueueTransferRequest
FASTCALL OHCD_fSetEndpointState
FASTCALL OHCD_fSetResources
FASTCALL OHCD_Get32BitFrameNumber
FASTCALL OHCD_HookNewEndpointToChildren
FASTCALL OHCD_ReverseBits
FASTCALL OHCD_RootHubInitialize
FASTCALL OHCD_RootHubProcessHotPlug
FASTCALL OHCD_RootHubProcessInterrupt
FASTCALL OHCD_ScheduleAddEndpointControlOrBulk
FASTCALL OHCD_ScheduleAddEndpointPeriodic
FASTCALL OHCD_ScheduleInitialize
FASTCALL OHCD_ScheduleRemoveEndpointControlOrBulk
FASTCALL OHCD_ScheduleRemoveEndpointPeriodic
FASTCALL PFMM
FASTCALL PFN_PROCESS_NEWDATA
FASTCALL PFOFSC
FASTCALL PFOFSTM
FASTCALL PFOFSTMED
FASTCALL PPROCESSOR_IDLE_FUNCTION
FASTCALL PPROCESSOR_IDLE_HANDLER
FASTCALL PSET_PROCESSOR_THROTTLE
FASTCALL PSWAP_CONTEXT_NOTIFY_ROUTINE
FASTCALL PTHREAD_SELECT_NOTIFY_ROUTINE
FASTCALL PTIME_UPDATE_NOTIFY_ROUTINE
FASTCALL RDMSR
FASTCALL RtlFindFirstSetRightMember
FASTCALL RtlpInterlockedPopEntrySList
FASTCALL RtlpInterlockedPushEntrySList
FASTCALL RtlUlongByteSwap
FASTCALL RtlUlonglongByteSwap
FASTCALL RtlUshortByteSwap
FASTCALL USBD_AllocateUsbAddress
FASTCALL USBD_fDeviceAbortEnum2
FASTCALL USBD_fDeviceEnumStage1
FASTCALL USBD_fDeviceEnumStage4
FASTCALL USBD_FreeUsbAddress
FASTCALL USBD_LoadClassDriver
FASTCALL VideoPortInterlockedDecrement
FASTCALL VideoPortInterlockedExchange
FASTCALL VideoPortInterlockedIncrement
FASTCALL XDCS_fCompleteRemove
FASTCALL XDCS_fCreateBufferEvents
FASTCALL XDCS_fDownloadFile
FASTCALL XDCS_fRandomBlock
FASTCALL XDCS_fVerifyFile
FASTCALL XID_fCloseDevice
FASTCALL XID_fCloseEndpoints
FASTCALL XID_fFindNode
FASTCALL XID_fOpenDevice
FASTCALL XID_fOpenEndpoints
FASTCALL XID_fOutputComplete1
FASTCALL XID_fRemoveDeviceComplete
FASTCALL XID_fSendDeviceReport
FASTCALL XID_ProcessGamepadData
FASTCALL XID_ProcessIRRemoteData
FASTCALL XID_ProcessNewKeyboardData
FASTCALL XProfpDpcDispatchNotifyCallback
FASTCALL XProfpThreadSwitchNotifyCallback
</pre>
938601a8040de1cac3ae9e00e3fe4921f791b652
Xbox 360 Backward Compatibility
0
3701
5558
5183
2017-05-30T00:50:22Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPDTR section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [[https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec]] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter?
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter?
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x0B ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
f425fe9ad0e0302676c2c13458321332f9177d09
5559
5558
2017-05-30T00:50:46Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPDTR section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter?
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter?
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x0B ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
153d5a7e9cc79e58d2b0d0f55e57ee94c93616e7
5560
5559
2017-05-30T01:09:05Z
JayFoxRox
2
/* Guest to host communication */
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPDTR section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter? eax points to a zero terminated list of pointers into the kernel memory [7 elements]
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter? " [4 elements]
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter? Seems to be some call to that address?!
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter? " [3 elements]
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter?
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x0B ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
5872926fc0981b6fc6d772cca64a32ddfb3a2317
5564
5560
2017-05-30T01:34:09Z
JayFoxRox
2
/* Guest to host communication */
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPDTR section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter? eax points to a zero terminated list of pointers into the kernel memory [7 elements]
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter? " [4 elements]
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter? Seems to be some call to that address?!
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter? " [3 elements]
|-
| colspan="3" | Cleaner list starts here {{FIXME}}
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x21 ||
|-
| 0x04 || 0x22 ||
|-
| 0x04 || 0x23 ||
|-
| 0x04 || 0x24 ||
|-
| 0x04 || 0x35 ||
|-
| 0x04 || 0x50 ||
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter? Memory is 0x00 filled before. location is 0x8002b420, size would be 0x3000
|-
| 0x06 || 0x02 ||
|-
| 0x06 || 0x20 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x21 ||
|-
| 0x06 || 0x22 ||
|-
| 0x06 || 0x23 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x24 ||
|-
| 0x06 || 0x25 ||
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x40 ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
d135ef2dd86acc8779c34deb3d5db318cd2f5c9c
5565
5564
2017-05-30T01:35:09Z
JayFoxRox
2
/* Modifications to xboxkrnl.exe */
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPRDT section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter? eax points to a zero terminated list of pointers into the kernel memory [7 elements]
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter? " [4 elements]
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter? Seems to be some call to that address?!
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter? " [3 elements]
|-
| colspan="3" | Cleaner list starts here {{FIXME}}
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x21 ||
|-
| 0x04 || 0x22 ||
|-
| 0x04 || 0x23 ||
|-
| 0x04 || 0x24 ||
|-
| 0x04 || 0x35 ||
|-
| 0x04 || 0x50 ||
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter? Memory is 0x00 filled before. location is 0x8002b420, size would be 0x3000
|-
| 0x06 || 0x02 ||
|-
| 0x06 || 0x20 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x21 ||
|-
| 0x06 || 0x22 ||
|-
| 0x06 || 0x23 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x24 ||
|-
| 0x06 || 0x25 ||
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x40 ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
55a3660831aeeb3fd60c712753a9e8ad78bf9c0a
Xbe
0
3706
5561
5444
2017-05-30T01:12:09Z
Haxar
2485
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
=== .text ===
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
=== .rdata ===
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
0207583500904b0e791bb3eae30191731ab8daca
5566
5561
2017-05-30T01:47:17Z
JayFoxRox
2
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
2f2a65f4501c0cc93c7d7f338fe064ce176c4ea5
CPU
0
3681
5567
5192
2017-05-30T03:47:43Z
Haxar
2485
A better reference for the Xbox processor.
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium 3 running at 733MHz. The 'custom' part of this was that that the Pentium 3 in the Xbox was that it had only 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [http://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/28365403.pdf Mobile Intel® Celeron® Processor (0.18μ) in BGA2 and Micro-PGA2 Packages] (This datasheet is for the mobile version Coppermine with 256kB L2 cache. It does not contain the Xbox Coppermine-128 with 128kB L2 cache at 733MHz (S-Spec SL5SN). No such datasheet exists. Both differences are pin compatible.
3ed0885f9232e9bcb86d83b8fee372c8f09c9001
Dashboard
0
3772
5570
2017-05-30T15:47:27Z
JayFoxRox
2
Created page with "== See Also == [[Hard Drive Files]]"
wikitext
text/x-wiki
== See Also ==
[[Hard Drive Files]]
0a88e6da820ed867351330df4995dac9a64274c8
The Hidden Boot Code of the Xbox
0
3773
5577
2017-05-31T08:19:56Z
Espes
2484
Created page with " Retrieved from [https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/wiki/The_Hidden_Boot_Code_of_the_Xbox] or '''"How to fit three bugs in 512 bytes of secu..."
wikitext
text/x-wiki
Retrieved from [https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/wiki/The_Hidden_Boot_Code_of_the_Xbox]
or '''"How to fit three bugs in 512 bytes of security code"'''
by [https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/wiki/User:Michael_Steil Michael Steil]
Note: This article is partially incomplete. It is superseded by the more detailed article [https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/wiki/The_Hidden_Boot_Code_of_the_Xbox 17 Mistakes Microsoft Made in the Xbox Security System]
In order to lock out both copied games as well as homebrew software, including the GNU/Linux operating system, Microsoft built a chain of trust on the Xbox reaching from the hardware to the execution of game code, in order to avoid the infiltration of code that has not been authorized by Microsoft. The link between hardware and software in this chain of trust is the hidden "MCPX" boot ROM. The principles, the implementations and the security vulnerabilities of this 512 bytes ROM will be discussed in this article.
<div class="center">'''Missing image'''<br />''Chain_Of_Trust.png'' <br />Image:Chain Of Trust.png<br /><br /> </div>
In short: The memory limitations in the hidden ROM made the system vulnerable in principle. A terribly wrong design and three bugs in the implementation opened three independent backdoors.
== Why a Hidden ROM is Needed ==
The Xbox is an IBM PC, i.e. it has an x86 CPU. When the machine is turned on, it starts execution 16 bytes from the top of its address space, at the address FFFF_FFF0 (F000:FFF0 in 8086 segment:offset notation). On an IBM PC, the upper 64 KB (or more) of the address space are occupied by the BIOS ROM, so the CPU starts execution in this ROM.
The Xbox, having an external (reprogrammable) 1 MB Flash ROM chip (models since 2003 have only 256 KB), would normally start running code there as well, since this megabyte is also mapped into the uppermost area of the address space. But this would make it too easy for someone who wants to either replace the ROM image with a self-written one or patch it to break the chain of trust ("modchips"). If the ROM image could be fully accessed, it would be easy to reverse-engineer the code; encryption and obfuscation would only slow down the hacking process a bit.
A common idea to make the code inaccessible is not to put it into an external chip, but integrate it into one of the other chips. Then there is no standard way to extract the data, and none to replace the chip with one with different contents. But this way, it is a lot more expensive, both the design of a chip that includes both ROM and additional logic, and updating the ROM in a new version of the Xbox if there is a flaw in the ROM.
A good compromise is to store only a small amount of code in one of the other chips, and store the bulk of it in the external Flash chip. This small ROM can not be extracted easily, and it cannot be changed or replaced. The code in there just has to make sure that an attacker can neither understand nor successfully patch the bulk of the code he has access to, which is stored in Flash ROM.
Microsoft decided to go this way, and they stored 512 bytes of code in the Xbox' Southbridge, the MCPX (Media and Communications Processor for Xbox), which is manufactured by nVidia. This code is supposed to be mapped into the uppermost 512 bytes of the address space, overriding the Flash ROM at this position, so that the CPU starts execution there. It includes x86 code for a decryption function with a secret key that makes the CPU decipher (parts of the) "unsafe" code in the Flash ROM into RAM and run it. Without knowing the key, it is practically impossible to understand or even patch the encrypted code in Flash ROM.
== The Code in the Hidden ROM ==
ROM in a multifunction IC is expensive, therefore it has to be small. Microsoft decided it to be only 512 bytes. Microsoft's implementation of the RC4 decryption algorithm fits well in about 150 bytes, so, at first inspection, this should be no problem.
=== The 512 Bytes problem ===
But it is. When the CPU starts up, we cannot simply start decrypting data from flash ROM into RAM. We have to
* initialize the CPU (32 bit mode, caching, segmenting)
* initialize the chipset and RAM so that the machine is in a stable state
While the CPU initialization can be done in less than 150 bytes, the initialization of the chipset and RAM, if done completely, will require more than 1000 bytes of assembly code. Even at a minimum, Microsoft probably did not see a way to fit all this into these 512 bytes.
Therefore it was decided to store some initialization tables in Flash ROM. The Southbridge was modified to read these tables even before the CPU starts running, and to pass these values to the Northbridge and Southbridge components. These tables are fetched from the very beginning of Flash ROM (FFF0_0000) and are 52 bytes long.
But these tables are not enough for full hardware initialization. Tables are just not powerful enough - for memory initialization, memory stability tests have to be made. Putting some x86 code to do this into Flash ROM would pervert the security system, because a hacker could then easily put his own code there.
=== The Xcodes ===
Microsoft decided to create a simple virtual machine that was well-suited for running hardware initialization code, but not much else. They created a tiny interpreter that understands 12 statements, but is not supposed to be powerful enough to take over the machine. As it is secure, this bytecode, called Xcode by the hackers that discovered it, can then be stored in Flash ROM. So the hidden ROM initializes the CPU, interprets the Xcodes stored in Flash ROM to set up the machine and then decrypts and runs x86 code from Flash ROM.
The Xcodes start at FFF0_0080 (at 128 bytes) in Flash ROM. As the Flash can be easily updated in newer revisions of the Xbox, their size needn't be constant; they are typically about 3000 bytes in size, which is about 330 statements.
An Xcode consists of an 8 bit statement, always followed by two 32 bit operands. The virtual machine has a 32 bit accumulator. The following table summarizes possible instructions; all other codes are treated as NOP:
{| class="wikitable"
|-
| 0x02
| PEEK
| ACC := MEM[OP1]
|-
| 0x03
| POKE
| MEM[OP1] := OP2
|-
| 0x04
| POKEPCI
| PCICONF[OP1] := OP2
|-
| 0x05
| PEEKPCI
| ACC := PCICONF[OP1]
|-
| 0x06
| AND/OR
| ACC := (ACC & OP1) OP2
|-
| 0x07
| (prefix)
| execute the instruction code in OP1 with OP1 := OP2, OP2 := ACC
|-
| 0x08
| BNE
| IF ACC = OP1 THEN PC := PC + OP2
|-
| 0x09
| BRA
| PC := PC + OP2
|-
| 0x10
| AND/OR ACC2
| ''(unused/defunct)'' ACC2 := (ACC2 & OP1) OP2
|-
| 0x11
| OUTB
| PORT[OP1] := OP2
|-
| 0x12
| INB
| ACC := PORT(OP1)
|-
| 0xEE
| END
|}
So the interpreter, rewritten in C, looks roughly like this:
<pre>struct {
char opcode;
int op1;
int op2;
} *p;
int acc;
p = 0xFFF00080;
while(1) {
switch(p->opcode) {
case 2:
acc = *((int*)p->op1);
break;
case 3:
*((int*)p->op1) = p->op2;
break;
case 4:
outl(p->op1, 0x0CF8);
outl(p->op2, 0x0CFC);
break;
case 5:
...
case 0xEE:
goto end;
}
p++;
}
end:
</pre>
PEEK and POKE read from and write constants to main memory. OUTB and INB do the same with 8 bit I/O ports. (I/O ports are another address space, 16 bit wide, next to the 32 bit memory address space. While most other CPU architectures control hardware by accessing their registers as if they were memory, the Intel architecture can access some older components through specialized in/out assembly instructions.) POKEPCI and PEEKPCI access the PCI configuration area, by sending the PCI config address to 32 bit I/O port 0xCF8 and accessing the value at 32 bit I/O port 0xCFC. (On PCI-equipped computers, every PCI device has at least 64 bytes of PCI config registers. On a PC, the BIOS or a Plug-and-Play operating system communicates through these registers to find out what resources (memory, I/O ports, interrupts) a device needs and then maps these resources. The I/O ports 0xCF8/0xCFC are the communication mechanism for the PCI config space on PCs.)
The AND/OR instruction can do a 32 bit AND or OR or both at the same time with the accumulator. BNE branches if the accumulator is equal to a constant, BRA branches always. The prefix 0x07 can be used to execute any of the other statements with the accumulator as the second operand. This way, "POKE addr, ACC", "POKEPCI addr, ACC", "BNE PC+ACC", "BRA PC+ACC" and "OUT addr, ACC" are possible. The code 0x07 is handled by the interpreter, and uses a second accumulator, but this code is never used by the Xcodes. The code 0xEE ends the interpreter and makes the hidden ROM go on with the RC4 decryption.
=== RC4 decryption, validity check and panic code ===
After the Xcodes have completed the hardware setup, the machine is in a stable state, so that it is possible to decrypt parts of the Flash ROM directly into RAM and run it there. As mentioned earlier, the RC4 code including the key is about 150 bytes in size. The Xcode interpreter is about 175 bytes, and CPU init about 145 bytes. This leaves only about 40 bytes for a check whether decryption was successful and halt the machine otherwise.
This seems not to have been enough space for Microsoft's engineers to implement a small checksum routine, so they only checked for one 32 bit constant (0x7854794A) at the end of the decrypted data in RAM (0x0009_5FE4). If this is successful, the CPU jumps to 0x9_0000 in RAM, where the new code has been written. This code, the "second bootloader" ("2bl") is about 25 KB in size. It continues initializing the hardware and decompresses the kernel from Flash ROM.
If the decrypted value is not correct, the CPU is supposed to halt. Simply using the "hlt" opcode would mean that the machine would remain turned on and idle with the hidden ROM visible in the address space. A hacker could then use some hardware attached to the chipset that extracts the data from ROM from a running machine. The designers therefore decided to always turn off the hidden ROM as soon as possible in both branches, when decryption was successful (then it is turned off as one of the first instructions in the "2bl" code), and if it wasn't.
But making the CPU crash and turning off the ROM it is running in is a challenge. If we halt the CPU, we cannot turn off the ROM afterwards. If we turn off the ROM, we turn off the code that gets run and we cannot halt the CPU - even worse, the CPU would continue fetching its opcodes from the underlying Flash ROM as soon as the hidden ROM is deactivated.
Microsoft's developers came up with a very interesting trick: They led execution to the absolute top of the address space, and as the very last instruction, they turn off the hidden ROM. Then the instruction pointer is supposed to overflow from FFFF_FFFF to 0000_0000 and an exception is supposed to be generated which in turn is supposed to halt the CPU because no exception handler is registered.
<div class="center"><img src="https://web.archive.org/web/20100617012156im_/http://www.xbox-linux.org/pic/memorymap.png" alt="memorymap.png" /></div>
== Security Issues ==
This system looks pretty secure. If we don't know what's going on, it is a lot of work to find out that there is a hidden boot ROM (but it's easy to prove because the Xbox still boots if you overwrite the upper 512 bytes of Flash ROM since they never get used). If we don't have access to the boot ROM, we cannot decrypt and thus cannot understand the code in Flash ROM. Because we don't know how to reencrypt, we cannot patch the code in Flash.
=== The Importance of the Secret Key ===
But what happens if someone finds out the hidden 512 bytes? [https://web.archive.org/web/20100617012156/http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html Bunnie] did, Christmas 2001. He tapped the bus between the Southbridge (where the secret MCPX code is stored) and the Northbridge (the CPU's memory interface) where all secret data gets transmitted. The compromise to store the secret ROM in the MCPX instead of the CPU, so that data would travel over a bus, finally broke the system. Knowing the algorithm and the secret key, he could easily disassemble the whole code in Flash ROM, and he could have even patched and reencrypted the code - the decryption code won't notice the difference, as the Flash ROM is not hashed: Only a single 32 bit value is checked. Modchip makers, who used similar tricks to get hold of the hidden ROM, used this knowledge to create patched versions of the Flash ROM image and distributed them on boards that, soldered to the Xbox motherboard, overrode the onboard Flash ROM.
=== Security Measures in the Hidden ROM ===
So as soon as the encryption algorithm and the key are known, everything is possible? Not quite. In order to create a working Flash ROM image, you have to use Microsoft's secret key, which is considered illegal under certain jurisdictions. So for a completely legal replacement Flash ROM image that takes over the machine to be free to run any homebrew software or alternative operating systems, a complete security analysis had to be made.
Since the hidden code depends in some way on external data, stored in Flash ROM, which can be quite easily changed by the user, it may be attackable through certain data stored there. Microsoft understood this danger and added some precautions so that the Xcodes could not be abused - supposedly - in case the secret ROM was known.
==== PEEK ====
The Xcode language is powerful enough to easily read and write memory, the PCI configuration space as well as I/O ports. The user could easily add Xcodes that read the hidden MCPX ROM and send the data to some I/O ports, e.g. the I2C bus. Therefore all memory reads are limited to the lower 256 MB:
<pre> and ebx, 0FFFFFFFh ; clear upper 4 bits
mov edi, [ebx] ; read from memory location op1 into di
jmp next_instruction
</pre>
==== POKEPCI ====
Turning off the hidden ROM is done by the following statements:
<pre> mov eax, 80000880h
mov dx, 0CF8h
out dx, eax
add dl, 4
mov al, 2
out dx, al
</pre>
This code sets bit #1 in the PCI config space, device 0:1:0, register offset 0x80 (coded in 0x80000880).
Using the POKEPCI instruction, it would be possible to disable the hidden ROM prematurely, so that the underlying Flash ROM, which is normally overlapped by the secret ROM, would be visible, and CPU would continue running there, where the hacker could simly store his code:
<pre> POKEPCI 0x80000880, 2
</pre>
Therefore the interpreter always clears bit 1 if the Xcode wants to write to 0x80000880:
<pre> cmp ebx, 80000880h ; ISA Bridge, MCPX disable?
jnz short not_mcpx_disable ; no
and ecx, not 2 ; clear bit 1
not_mcpx_disable:
mov eax, ebx
mov dx, 0CF8h
out dx, eax ; PCI configuration address
add dl, 4
mov eax, ecx
out dx, eax ; PCI configuration data
jmp short next_instruction
</pre>
==== Halt ====
As described earlier, if the hidden ROM detects that decryption was unsuccessful, it halts the CPU and turns off the hidden ROM by turning it off as the very last statement in the CPU's address space, causing an address overflow exception and thus a CPU halt in the very next cycle. This is supposed to make it impossible for a hacker to extract the hidden ROM contents, because the hidden ROM is always turned off very quickly, even if the machine does not boot correctly.
<pre> mov eax, ds:95FE4h
cmp eax, 7854794Ah
jnz short bad_checkcode
mov eax, ds:90000h
jmp eax ; jump to decrypted second bootloader in RAM
bad_checkcode:
mov eax, 80000880h ; prepare MCPX ROM disable
mov dx, 0CF8h
out dx, eax
jmp far ptr 8:0FFFFFFFAh ; jump to end of ROM, wraparound
[...]
FFFA: ; this is address FFFFFFFA
add dl, 4
mov al, 2
out dx, al
; ------ this is address 00000000 ------
</pre>
=== Security Flaws in the Hidden ROM ===
While these three security precautions that have just been described are indeed vital, two of them are faulty. The POKEPCI check is incorrectly implemented, and the somewhat clever "Halt" trick, which was supposed to lock out hardware sniffers, opened a software backdoor.
==== The Visor Trick ====
The roll over of the instruction pointer from FFFF_FFFF to 0000_0000 is supposed to generate an exception. Since no exception handlers are installed, this is supposed to halt the machine. But in reality, no exception is generated. Execution just happily continues at 0000_0000 - in RAM! Apparently the i386 CPU family throws no exception in this case, Microsoft's engineers only assumed it or misread the documentation and never tested it.
By adding Xcodes to write a jump to some Flash ROM address, like FFF0_0000, into memory at location 0, and causing the decryption check to fail by just not including the 32 bit check value into the Flash ROM, one's own code will be run right after the RC4 decryption:
<pre> POKE 0x00000000, 0x001000B8 ; store "mov eax, 0xFF001000; jmp eax"
POKE 0x00000004, 0x90E0FFFF ; at 0x00000000 in memory
END
; now we can place our code at 0x1000 in Flash
</pre>
==== The MIST Trick ====
POKEPCI's check for 0x80000880, the address of the configuration register to turn off the hidden ROM, is incorrect. The Southbridge, which decodes the 32 bit value into "bus", "device", "function" and "register" and sends the funcion and register numbers to the specific device on the specific bus, simply ignores the unused bits of that 32 bit value, so 0x88000880 or 0xF0000880 behave exactly the same as 0x80000880 - but POKEPCI's check does not detect them. So this check even gives the attacker a hint how to circumvent it.
By adding the statement POKEPCI 0x88000880, 2 to the Xcodes, the interpreter will turn off the hidden ROM - where it is running itself! As soon as the CPU cache has run empty, execution will continue somewhere between FFFF_FE00 and FFFF_FFFF in Flash ROM. You can simply fill everything with NOPs and add a JMP to your own code at the very top.
==== More Attacks? ====
Since two methods to circumvent the Xbox hidden ROM security without touching any crypto both work equally well, there has been little need for further research, but there might very well be more than two security issues in these 512 bytes. There are two more approaches for attacks that we do not want to disclose yet, as Microsoft may still offer updated Xboxes in the future.
== Microsoft's Fixes ==
In August 2002, Microsoft started manufacturing V1.1 Xboxes, which had been improved in many ways. In concerns of security, the hidden ROM and the MCPX' PCI config behavior had been updated (the MCPX revision is "C3" instead of "B2"): They now squeezed a TEA hash into the 512 bytes, replacing the old 32 bit test. The "2bl" code now couldn't be altered easily. And they changed the RC4 secret key.
But although they had the possibility to patch their design, Microsoft again failed to make the Xbox secure this time:
* They left both the MIST backdoor and the Visor backdoor wide open.
* The TEA hash has been a bad choice. If they had even read Schneier's "Applied Cryptography" (''the'' book on crypto), they would have known that TEA is insecure if used as a hash. This can be easily exploited so that 2bl changes remain undetected, leading to the third bug in the second implementation.
It is pretty obvious that the changes had been made in reaction to Bunnie's hack, who retrieved the secret key for the RC4 decryption, and before the Visor or MIST bugs had been found.
In May 2004, Microsoft started shipping Xboxes that had the ROM image, the video encoder and the security chip (SMC) integrated into a single package, so that it was no longer possible to overwrite the firmware. The secret ROM in the MCPX was still the same though. But as of November 2005, it is still possible to attach a replacement ROM to the LPC bus ("modchip") of new Xboxes, as the verification weakness is still there.
== Microsoft's Strategy ==
Microsoft's engineers first seem to have thought that the secret key would never be revealed: security by obscurity. This explains why the decrypted code did not get hashed. Once the secret key was known, anyone could decrypt, patch and reencrypt the flash contents.
So when the secret key had been extracted, Microsoft understood that it could be done again with another key very easily, so they added a hash function over the decrypted code. If the new secret key was to be found out again, attackers should at least not have had the possibility to change the code. Changing the key introduced no security, but was easy to do and at least required attackers to repeat the ROM extraction process.
== Conclusion ==
The design of the first MCPX was very wrong, and the implementation was catastrophic. The design of the second version was a lot better, but the implementation was not.
Without the various security holes (Visor and MIST bugs as well as possibly more) and with a working hash function, the system would have been pretty secure. Encrypting the ROM contents with a secret key, i.e. security by obscurity, simply does not work if the key travels over a bus that can be sniffed.
So with the first version of the MCPX, Microsoft was too naive and apparently did not understand basic security concepts. After they had learnt their lesson, they designed a pretty good system with the second version of the MCPX - but the implementation still contained at least three security holes (Visor, MIST, TEA). They were too fast releasing a new version of the MCPX, spending a lot of money in trashing tons of already manufactured MCPX chips and manufacturing updated ones, apparently without any further code audit which should have revealed the security holes.
512 bytes is a very small amount of code (it fits on a single sheet of paper!), compared to the megabytes of code contained in software like Windows, Internet Explorer or Internet Information Server. Three bugs within these 512 bytes compromised the security completely - a bunch of hackers found them within days after first looking at the code. Why hasn't Microsoft Corp. been able to do the same? Why?
==Links==
* [https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/ The Xbox Linux Project]
* [https://web.archive.org/web/20100617012156/http://hackingthexbox.com/ Hacking the Xbox]
* [https://web.archive.org/web/20100617012156/http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html bunnie's adventures hacking the Xbox]
* [https://web.archive.org/web/20100617012156/http://web.archive.org/web/20021208233956/http://65.108.63.67/visor/ visor's aXventure]
3c1e3c40bc1e25ed8886f3007493989292056392
5579
5577
2017-05-31T08:28:56Z
JayFoxRox
2
Trying to use a template
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/wiki/The_Hidden_Boot_Code_of_the_Xbox|ours=MCPX ROM}}
or '''"How to fit three bugs in 512 bytes of security code"'''
by [https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/wiki/User:Michael_Steil Michael Steil]
Note: This article is partially incomplete. It is superseded by the more detailed article [https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/wiki/The_Hidden_Boot_Code_of_the_Xbox 17 Mistakes Microsoft Made in the Xbox Security System]
In order to lock out both copied games as well as homebrew software, including the GNU/Linux operating system, Microsoft built a chain of trust on the Xbox reaching from the hardware to the execution of game code, in order to avoid the infiltration of code that has not been authorized by Microsoft. The link between hardware and software in this chain of trust is the hidden "MCPX" boot ROM. The principles, the implementations and the security vulnerabilities of this 512 bytes ROM will be discussed in this article.
<div class="center">'''Missing image'''<br />''Chain_Of_Trust.png'' <br />Image:Chain Of Trust.png<br /><br /> </div>
In short: The memory limitations in the hidden ROM made the system vulnerable in principle. A terribly wrong design and three bugs in the implementation opened three independent backdoors.
== Why a Hidden ROM is Needed ==
The Xbox is an IBM PC, i.e. it has an x86 CPU. When the machine is turned on, it starts execution 16 bytes from the top of its address space, at the address FFFF_FFF0 (F000:FFF0 in 8086 segment:offset notation). On an IBM PC, the upper 64 KB (or more) of the address space are occupied by the BIOS ROM, so the CPU starts execution in this ROM.
The Xbox, having an external (reprogrammable) 1 MB Flash ROM chip (models since 2003 have only 256 KB), would normally start running code there as well, since this megabyte is also mapped into the uppermost area of the address space. But this would make it too easy for someone who wants to either replace the ROM image with a self-written one or patch it to break the chain of trust ("modchips"). If the ROM image could be fully accessed, it would be easy to reverse-engineer the code; encryption and obfuscation would only slow down the hacking process a bit.
A common idea to make the code inaccessible is not to put it into an external chip, but integrate it into one of the other chips. Then there is no standard way to extract the data, and none to replace the chip with one with different contents. But this way, it is a lot more expensive, both the design of a chip that includes both ROM and additional logic, and updating the ROM in a new version of the Xbox if there is a flaw in the ROM.
A good compromise is to store only a small amount of code in one of the other chips, and store the bulk of it in the external Flash chip. This small ROM can not be extracted easily, and it cannot be changed or replaced. The code in there just has to make sure that an attacker can neither understand nor successfully patch the bulk of the code he has access to, which is stored in Flash ROM.
Microsoft decided to go this way, and they stored 512 bytes of code in the Xbox' Southbridge, the MCPX (Media and Communications Processor for Xbox), which is manufactured by nVidia. This code is supposed to be mapped into the uppermost 512 bytes of the address space, overriding the Flash ROM at this position, so that the CPU starts execution there. It includes x86 code for a decryption function with a secret key that makes the CPU decipher (parts of the) "unsafe" code in the Flash ROM into RAM and run it. Without knowing the key, it is practically impossible to understand or even patch the encrypted code in Flash ROM.
== The Code in the Hidden ROM ==
ROM in a multifunction IC is expensive, therefore it has to be small. Microsoft decided it to be only 512 bytes. Microsoft's implementation of the RC4 decryption algorithm fits well in about 150 bytes, so, at first inspection, this should be no problem.
=== The 512 Bytes problem ===
But it is. When the CPU starts up, we cannot simply start decrypting data from flash ROM into RAM. We have to
* initialize the CPU (32 bit mode, caching, segmenting)
* initialize the chipset and RAM so that the machine is in a stable state
While the CPU initialization can be done in less than 150 bytes, the initialization of the chipset and RAM, if done completely, will require more than 1000 bytes of assembly code. Even at a minimum, Microsoft probably did not see a way to fit all this into these 512 bytes.
Therefore it was decided to store some initialization tables in Flash ROM. The Southbridge was modified to read these tables even before the CPU starts running, and to pass these values to the Northbridge and Southbridge components. These tables are fetched from the very beginning of Flash ROM (FFF0_0000) and are 52 bytes long.
But these tables are not enough for full hardware initialization. Tables are just not powerful enough - for memory initialization, memory stability tests have to be made. Putting some x86 code to do this into Flash ROM would pervert the security system, because a hacker could then easily put his own code there.
=== The Xcodes ===
Microsoft decided to create a simple virtual machine that was well-suited for running hardware initialization code, but not much else. They created a tiny interpreter that understands 12 statements, but is not supposed to be powerful enough to take over the machine. As it is secure, this bytecode, called Xcode by the hackers that discovered it, can then be stored in Flash ROM. So the hidden ROM initializes the CPU, interprets the Xcodes stored in Flash ROM to set up the machine and then decrypts and runs x86 code from Flash ROM.
The Xcodes start at FFF0_0080 (at 128 bytes) in Flash ROM. As the Flash can be easily updated in newer revisions of the Xbox, their size needn't be constant; they are typically about 3000 bytes in size, which is about 330 statements.
An Xcode consists of an 8 bit statement, always followed by two 32 bit operands. The virtual machine has a 32 bit accumulator. The following table summarizes possible instructions; all other codes are treated as NOP:
{| class="wikitable"
|-
| 0x02
| PEEK
| ACC := MEM[OP1]
|-
| 0x03
| POKE
| MEM[OP1] := OP2
|-
| 0x04
| POKEPCI
| PCICONF[OP1] := OP2
|-
| 0x05
| PEEKPCI
| ACC := PCICONF[OP1]
|-
| 0x06
| AND/OR
| ACC := (ACC & OP1) OP2
|-
| 0x07
| (prefix)
| execute the instruction code in OP1 with OP1 := OP2, OP2 := ACC
|-
| 0x08
| BNE
| IF ACC = OP1 THEN PC := PC + OP2
|-
| 0x09
| BRA
| PC := PC + OP2
|-
| 0x10
| AND/OR ACC2
| ''(unused/defunct)'' ACC2 := (ACC2 & OP1) OP2
|-
| 0x11
| OUTB
| PORT[OP1] := OP2
|-
| 0x12
| INB
| ACC := PORT(OP1)
|-
| 0xEE
| END
|}
So the interpreter, rewritten in C, looks roughly like this:
<pre>struct {
char opcode;
int op1;
int op2;
} *p;
int acc;
p = 0xFFF00080;
while(1) {
switch(p->opcode) {
case 2:
acc = *((int*)p->op1);
break;
case 3:
*((int*)p->op1) = p->op2;
break;
case 4:
outl(p->op1, 0x0CF8);
outl(p->op2, 0x0CFC);
break;
case 5:
...
case 0xEE:
goto end;
}
p++;
}
end:
</pre>
PEEK and POKE read from and write constants to main memory. OUTB and INB do the same with 8 bit I/O ports. (I/O ports are another address space, 16 bit wide, next to the 32 bit memory address space. While most other CPU architectures control hardware by accessing their registers as if they were memory, the Intel architecture can access some older components through specialized in/out assembly instructions.) POKEPCI and PEEKPCI access the PCI configuration area, by sending the PCI config address to 32 bit I/O port 0xCF8 and accessing the value at 32 bit I/O port 0xCFC. (On PCI-equipped computers, every PCI device has at least 64 bytes of PCI config registers. On a PC, the BIOS or a Plug-and-Play operating system communicates through these registers to find out what resources (memory, I/O ports, interrupts) a device needs and then maps these resources. The I/O ports 0xCF8/0xCFC are the communication mechanism for the PCI config space on PCs.)
The AND/OR instruction can do a 32 bit AND or OR or both at the same time with the accumulator. BNE branches if the accumulator is equal to a constant, BRA branches always. The prefix 0x07 can be used to execute any of the other statements with the accumulator as the second operand. This way, "POKE addr, ACC", "POKEPCI addr, ACC", "BNE PC+ACC", "BRA PC+ACC" and "OUT addr, ACC" are possible. The code 0x07 is handled by the interpreter, and uses a second accumulator, but this code is never used by the Xcodes. The code 0xEE ends the interpreter and makes the hidden ROM go on with the RC4 decryption.
=== RC4 decryption, validity check and panic code ===
After the Xcodes have completed the hardware setup, the machine is in a stable state, so that it is possible to decrypt parts of the Flash ROM directly into RAM and run it there. As mentioned earlier, the RC4 code including the key is about 150 bytes in size. The Xcode interpreter is about 175 bytes, and CPU init about 145 bytes. This leaves only about 40 bytes for a check whether decryption was successful and halt the machine otherwise.
This seems not to have been enough space for Microsoft's engineers to implement a small checksum routine, so they only checked for one 32 bit constant (0x7854794A) at the end of the decrypted data in RAM (0x0009_5FE4). If this is successful, the CPU jumps to 0x9_0000 in RAM, where the new code has been written. This code, the "second bootloader" ("2bl") is about 25 KB in size. It continues initializing the hardware and decompresses the kernel from Flash ROM.
If the decrypted value is not correct, the CPU is supposed to halt. Simply using the "hlt" opcode would mean that the machine would remain turned on and idle with the hidden ROM visible in the address space. A hacker could then use some hardware attached to the chipset that extracts the data from ROM from a running machine. The designers therefore decided to always turn off the hidden ROM as soon as possible in both branches, when decryption was successful (then it is turned off as one of the first instructions in the "2bl" code), and if it wasn't.
But making the CPU crash and turning off the ROM it is running in is a challenge. If we halt the CPU, we cannot turn off the ROM afterwards. If we turn off the ROM, we turn off the code that gets run and we cannot halt the CPU - even worse, the CPU would continue fetching its opcodes from the underlying Flash ROM as soon as the hidden ROM is deactivated.
Microsoft's developers came up with a very interesting trick: They led execution to the absolute top of the address space, and as the very last instruction, they turn off the hidden ROM. Then the instruction pointer is supposed to overflow from FFFF_FFFF to 0000_0000 and an exception is supposed to be generated which in turn is supposed to halt the CPU because no exception handler is registered.
<div class="center"><img src="https://web.archive.org/web/20100617012156im_/http://www.xbox-linux.org/pic/memorymap.png" alt="memorymap.png" /></div>
== Security Issues ==
This system looks pretty secure. If we don't know what's going on, it is a lot of work to find out that there is a hidden boot ROM (but it's easy to prove because the Xbox still boots if you overwrite the upper 512 bytes of Flash ROM since they never get used). If we don't have access to the boot ROM, we cannot decrypt and thus cannot understand the code in Flash ROM. Because we don't know how to reencrypt, we cannot patch the code in Flash.
=== The Importance of the Secret Key ===
But what happens if someone finds out the hidden 512 bytes? [https://web.archive.org/web/20100617012156/http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html Bunnie] did, Christmas 2001. He tapped the bus between the Southbridge (where the secret MCPX code is stored) and the Northbridge (the CPU's memory interface) where all secret data gets transmitted. The compromise to store the secret ROM in the MCPX instead of the CPU, so that data would travel over a bus, finally broke the system. Knowing the algorithm and the secret key, he could easily disassemble the whole code in Flash ROM, and he could have even patched and reencrypted the code - the decryption code won't notice the difference, as the Flash ROM is not hashed: Only a single 32 bit value is checked. Modchip makers, who used similar tricks to get hold of the hidden ROM, used this knowledge to create patched versions of the Flash ROM image and distributed them on boards that, soldered to the Xbox motherboard, overrode the onboard Flash ROM.
=== Security Measures in the Hidden ROM ===
So as soon as the encryption algorithm and the key are known, everything is possible? Not quite. In order to create a working Flash ROM image, you have to use Microsoft's secret key, which is considered illegal under certain jurisdictions. So for a completely legal replacement Flash ROM image that takes over the machine to be free to run any homebrew software or alternative operating systems, a complete security analysis had to be made.
Since the hidden code depends in some way on external data, stored in Flash ROM, which can be quite easily changed by the user, it may be attackable through certain data stored there. Microsoft understood this danger and added some precautions so that the Xcodes could not be abused - supposedly - in case the secret ROM was known.
==== PEEK ====
The Xcode language is powerful enough to easily read and write memory, the PCI configuration space as well as I/O ports. The user could easily add Xcodes that read the hidden MCPX ROM and send the data to some I/O ports, e.g. the I2C bus. Therefore all memory reads are limited to the lower 256 MB:
<pre> and ebx, 0FFFFFFFh ; clear upper 4 bits
mov edi, [ebx] ; read from memory location op1 into di
jmp next_instruction
</pre>
==== POKEPCI ====
Turning off the hidden ROM is done by the following statements:
<pre> mov eax, 80000880h
mov dx, 0CF8h
out dx, eax
add dl, 4
mov al, 2
out dx, al
</pre>
This code sets bit #1 in the PCI config space, device 0:1:0, register offset 0x80 (coded in 0x80000880).
Using the POKEPCI instruction, it would be possible to disable the hidden ROM prematurely, so that the underlying Flash ROM, which is normally overlapped by the secret ROM, would be visible, and CPU would continue running there, where the hacker could simly store his code:
<pre> POKEPCI 0x80000880, 2
</pre>
Therefore the interpreter always clears bit 1 if the Xcode wants to write to 0x80000880:
<pre> cmp ebx, 80000880h ; ISA Bridge, MCPX disable?
jnz short not_mcpx_disable ; no
and ecx, not 2 ; clear bit 1
not_mcpx_disable:
mov eax, ebx
mov dx, 0CF8h
out dx, eax ; PCI configuration address
add dl, 4
mov eax, ecx
out dx, eax ; PCI configuration data
jmp short next_instruction
</pre>
==== Halt ====
As described earlier, if the hidden ROM detects that decryption was unsuccessful, it halts the CPU and turns off the hidden ROM by turning it off as the very last statement in the CPU's address space, causing an address overflow exception and thus a CPU halt in the very next cycle. This is supposed to make it impossible for a hacker to extract the hidden ROM contents, because the hidden ROM is always turned off very quickly, even if the machine does not boot correctly.
<pre> mov eax, ds:95FE4h
cmp eax, 7854794Ah
jnz short bad_checkcode
mov eax, ds:90000h
jmp eax ; jump to decrypted second bootloader in RAM
bad_checkcode:
mov eax, 80000880h ; prepare MCPX ROM disable
mov dx, 0CF8h
out dx, eax
jmp far ptr 8:0FFFFFFFAh ; jump to end of ROM, wraparound
[...]
FFFA: ; this is address FFFFFFFA
add dl, 4
mov al, 2
out dx, al
; ------ this is address 00000000 ------
</pre>
=== Security Flaws in the Hidden ROM ===
While these three security precautions that have just been described are indeed vital, two of them are faulty. The POKEPCI check is incorrectly implemented, and the somewhat clever "Halt" trick, which was supposed to lock out hardware sniffers, opened a software backdoor.
==== The Visor Trick ====
The roll over of the instruction pointer from FFFF_FFFF to 0000_0000 is supposed to generate an exception. Since no exception handlers are installed, this is supposed to halt the machine. But in reality, no exception is generated. Execution just happily continues at 0000_0000 - in RAM! Apparently the i386 CPU family throws no exception in this case, Microsoft's engineers only assumed it or misread the documentation and never tested it.
By adding Xcodes to write a jump to some Flash ROM address, like FFF0_0000, into memory at location 0, and causing the decryption check to fail by just not including the 32 bit check value into the Flash ROM, one's own code will be run right after the RC4 decryption:
<pre> POKE 0x00000000, 0x001000B8 ; store "mov eax, 0xFF001000; jmp eax"
POKE 0x00000004, 0x90E0FFFF ; at 0x00000000 in memory
END
; now we can place our code at 0x1000 in Flash
</pre>
==== The MIST Trick ====
POKEPCI's check for 0x80000880, the address of the configuration register to turn off the hidden ROM, is incorrect. The Southbridge, which decodes the 32 bit value into "bus", "device", "function" and "register" and sends the funcion and register numbers to the specific device on the specific bus, simply ignores the unused bits of that 32 bit value, so 0x88000880 or 0xF0000880 behave exactly the same as 0x80000880 - but POKEPCI's check does not detect them. So this check even gives the attacker a hint how to circumvent it.
By adding the statement POKEPCI 0x88000880, 2 to the Xcodes, the interpreter will turn off the hidden ROM - where it is running itself! As soon as the CPU cache has run empty, execution will continue somewhere between FFFF_FE00 and FFFF_FFFF in Flash ROM. You can simply fill everything with NOPs and add a JMP to your own code at the very top.
==== More Attacks? ====
Since two methods to circumvent the Xbox hidden ROM security without touching any crypto both work equally well, there has been little need for further research, but there might very well be more than two security issues in these 512 bytes. There are two more approaches for attacks that we do not want to disclose yet, as Microsoft may still offer updated Xboxes in the future.
== Microsoft's Fixes ==
In August 2002, Microsoft started manufacturing V1.1 Xboxes, which had been improved in many ways. In concerns of security, the hidden ROM and the MCPX' PCI config behavior had been updated (the MCPX revision is "C3" instead of "B2"): They now squeezed a TEA hash into the 512 bytes, replacing the old 32 bit test. The "2bl" code now couldn't be altered easily. And they changed the RC4 secret key.
But although they had the possibility to patch their design, Microsoft again failed to make the Xbox secure this time:
* They left both the MIST backdoor and the Visor backdoor wide open.
* The TEA hash has been a bad choice. If they had even read Schneier's "Applied Cryptography" (''the'' book on crypto), they would have known that TEA is insecure if used as a hash. This can be easily exploited so that 2bl changes remain undetected, leading to the third bug in the second implementation.
It is pretty obvious that the changes had been made in reaction to Bunnie's hack, who retrieved the secret key for the RC4 decryption, and before the Visor or MIST bugs had been found.
In May 2004, Microsoft started shipping Xboxes that had the ROM image, the video encoder and the security chip (SMC) integrated into a single package, so that it was no longer possible to overwrite the firmware. The secret ROM in the MCPX was still the same though. But as of November 2005, it is still possible to attach a replacement ROM to the LPC bus ("modchip") of new Xboxes, as the verification weakness is still there.
== Microsoft's Strategy ==
Microsoft's engineers first seem to have thought that the secret key would never be revealed: security by obscurity. This explains why the decrypted code did not get hashed. Once the secret key was known, anyone could decrypt, patch and reencrypt the flash contents.
So when the secret key had been extracted, Microsoft understood that it could be done again with another key very easily, so they added a hash function over the decrypted code. If the new secret key was to be found out again, attackers should at least not have had the possibility to change the code. Changing the key introduced no security, but was easy to do and at least required attackers to repeat the ROM extraction process.
== Conclusion ==
The design of the first MCPX was very wrong, and the implementation was catastrophic. The design of the second version was a lot better, but the implementation was not.
Without the various security holes (Visor and MIST bugs as well as possibly more) and with a working hash function, the system would have been pretty secure. Encrypting the ROM contents with a secret key, i.e. security by obscurity, simply does not work if the key travels over a bus that can be sniffed.
So with the first version of the MCPX, Microsoft was too naive and apparently did not understand basic security concepts. After they had learnt their lesson, they designed a pretty good system with the second version of the MCPX - but the implementation still contained at least three security holes (Visor, MIST, TEA). They were too fast releasing a new version of the MCPX, spending a lot of money in trashing tons of already manufactured MCPX chips and manufacturing updated ones, apparently without any further code audit which should have revealed the security holes.
512 bytes is a very small amount of code (it fits on a single sheet of paper!), compared to the megabytes of code contained in software like Windows, Internet Explorer or Internet Information Server. Three bugs within these 512 bytes compromised the security completely - a bunch of hackers found them within days after first looking at the code. Why hasn't Microsoft Corp. been able to do the same? Why?
==Links==
* [https://web.archive.org/web/20100617012156/http://www.xbox-linux.org/ The Xbox Linux Project]
* [https://web.archive.org/web/20100617012156/http://hackingthexbox.com/ Hacking the Xbox]
* [https://web.archive.org/web/20100617012156/http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html bunnie's adventures hacking the Xbox]
* [https://web.archive.org/web/20100617012156/http://web.archive.org/web/20021208233956/http://65.108.63.67/visor/ visor's aXventure]
4c4a6d869ccdb0f72e90d0d1f93a1949af379342
Xbox Savegame System
0
3774
5578
2017-05-31T08:26:55Z
Espes
2484
Created page with "Retrieved from [https://web.archive.org/web/20100617021545/http://www.xbox-linux.org/wiki/Xbox_Savegame_System] The Xbox savegame management system is a simple organization..."
wikitext
text/x-wiki
Retrieved from [https://web.archive.org/web/20100617021545/http://www.xbox-linux.org/wiki/Xbox_Savegame_System]
The Xbox savegame management system is a simple organizational system that allows users to manage their saved games, downloaded contents from Xbox LIVE, and copy savegames to memory units.
==Overview==
The Xbox savegame system uses folders and metadata to organize savegames according to its game, type, and name (in that order). All game-generated data are stored in either E:\UDATA or E:\TDATA. The UDATA folder is generally used to store gamesaves (user data), and the TDATA folder is generally used to store LIVE contents and other configurations (such as downloaded levels, high-score tables, game updates, and other miscellaneous configurations). These are the universal elements of gamesaves:
* A title meta (universal)
* A title image (universal)
* A save title
* A save image
Saves are nested individually inside the game's folder, which are nested inside the game-data folders (UDATA and TDATA). Every XBE that had ever run will have a folder for itself in both of the game-data folders (however, the Xbox Dashboard is a special case).
==Structure Layout==
Here's a typical layout of a the savegame folders, shown with Splinter Cell and Xbox Dashboard Music.
<pre>+-E:
+-TDATA
| +-5553000c
| | +-audiovideo.par
| | +-contentimage.xbx
| +-fffe0000
| +-music
| +-ST.DB
+-UDATA
+-5553000c
+-8E6AA806E588
| +-GMMAN_Profile.sg1
| +-GMMAN_Profile.sg2
| +-GMMAN_Profile.sg3
| +-Profile.inf
| +-SaveMeta.xbx
+-SaveImage.xbx
+-TitleImage.xbx
+-TitleMeta.xbx</pre>
As you can see, in the top level there are two folders, TDATA and UDATA. Under each of those folders are folders named according to the game's ID (for example, Splinter Cell's ID is 5553000c). They are in both TDATA and UDATA folders.
===UDATA Folder===
The UDATA folder is generally used to store user content, such as save games, settings, and user-created customizations. Under this folder are folders for each individual game, named by their ID number. Under every game folder, there are two files: TitleImage.xbx and TitleMeta.xbx.
====TitleImage.xbx====
TitleImage.xbx is a 128*128px Xbox texture, used for displaying the game's logo at the left of the game's section in the Memory browser. If this file is missing or corrupted, a generic Xbox logo will be displayed in its place.
====TitleMeta.xbx====
TitleMeta.xbx is a text file for indicating what title of the game would be displayed in the Memory browser. The title is taken from the embedded title of the executable that created the game folder (ie. if you run Splinter Cell's default.xbe first, the title will be "Splinter Cell". If you run its downloader.xbe (same game ID), the title will be "Downloader"). If this file is missing or corrupted, the game's title will be displayed as "Unknown Title". The structure for TitleMeta.xbx is:
<pre>
TitleName=Game Name</pre>
In the case of Splinter Cell, it is <code>TitleName=Splinter Cell</code>.
=====Localization=====
The TitleMeta.xbx file may contain localization:
<pre>
[default]
TitleName=Network Configurations
[EN]
TitleName=Network Configurations
[JA]
TitleName=ネットワーク設定データ
[DE]
TitleName=Daten für Netzwerkeinstellungen
[FR]
TitleName=Données des paramètres réseau
[ES]
TitleName=Datos de configuración de red
[IT]
TitleName=Dati impostazioni di rete
[KO]
TitleName=네트워크 설정 데이터
[TW]
TitleName=網路設定資料
[BR]
TitleName=Dados de Configurações da Rede</pre>
There is a separate TitleName entry listed under each of the languages. The entry under <code>[default]</code> will be used if a localized game title cannot be found in this file for the current system language.
===Gamesaves===
Each individual gamesave or game profile is under the game's folder in the UDATA folder. Each save or profile has its own folder. The name of the folders differs from game to game, as there is not set format for the name of a save folder. Ie. one game may choose to name its save folder as "001aecf7", another game may name the save folder as "Profile01". There is always a SaveMeta.xbx file under the folder, and there may also be a SaveImage.xbx file there. Each save folder may contain whatever data that is needed for a valid save.
====SaveMeta.xbx====
SaveMeta.xbx is very similar to TitleMeta.xbx. This defines the name of a save and is displayed on the left side of the screen when the save is selected. If this file is missing or corrupted, the gamesave's name will be displayed as "Corrupted Save". Its format is as the following:
<pre>
Name=Save Name</pre>
In the case of a Splinter Cell game save, it is something like <code>Name=GMMAN_Profile</code>.
====SaveImage.xbx====
SaveImage.xbx is a 64*64px Xbox texture, used to represent an individual save folder. It'll be located in the game's folder under the UDATA folder if all of the saves use the same image (to avoid unnecessary duplication), or under each individual save folder, if there are different kinds of saves located in each folder. The gamesave folder's SaveImage.xbx has precedence over the game folder's SaveImage.xbx. If this file is missing or corrupted, a generic Xbox logo will be in its place.
Universal save image:
<pre>
+-UDATA
+-5553000c
+-SaveImage.xbx</pre>
Individual save image:
<pre>
+-UDATA
+-4d530013
+-129E1A3F1B2A
+-SaveImage.xbx</pre>
===TDATA Folder===
The TDATA folder is similar in structure to the UDATA folder. However, it is used to store Xbox LIVE contents, game configurations, and other miscellaneous data. With the TDATA game folders, there is no specific structure, so games may store whatever file it needs wherever inside its game folder.
====contentimage.xbx====
Contentimage.xbx is used in the same way as SaveImage.xbx, except that it is used specifically to indicate downloaded contents.
==Special Case of Xbox Dashboard==
The Xbox Dashboard does not abide by these structures. For one, it doesn't have a UDATA folder, and in the TDATA folder it doesn't have any .xbx files. However, in its TDATA folder (E:\TDATA\fffe0000), there is a folder named <code>music</code>. Inside it is a file named <code>ST.DB</code> and several folders with hexadecimal names. This is where soundtracks are stored.
If you go into the LIVE Dash's "Test Connections" screen and press the Black button, a folder that follows the structure will be created under the game folder fffe0000 under the UDATA folder. This contains diagnostic information about the connection to Xbox LIVE.
==Other Occurrences in the UDATA and TDATA Folders==
* Under the Dashboard's TDATA game folder, a blank file named <code>NoisyCamera</code> may be present. This is a marker for an Easter egg on the main menu of the Dashboard. Toggle it the same way as the full-screen visualization egg.
* Under the UDATA folder, there may be a file named <code>NICKNAME.XBN</code>. This stores the Xbox's nickname for online games.
==Application to Xbox-Linux==
One way the Xbox-Linux project can take advantage of the gamesave system is by having a all Xbox-Linux distributions reside inside an Xbox-Linux game folder. Each individual distribution would be a "gamesave." For example, suppose that the Xbox-Linux project uses the game ID <code>ffffff00</code> and that we're using Xebian as the distro. Here would be the layout of the files following the gamesave structure:
<pre>+-E:
+-TDATA
| +-ffffff00
| +-linuxboot.cfg
+-UDATA
+-ffffff00
+-debian
| +-initrd
| +-rootfs
| +-SaveImage.xbx
| +-SaveMeta.xbx
| +-swap
| +-vmlinuz
+-TitleImage.xbx
+-TitleMeta.xbx</pre>
Xromwell would search the gamesave directories for linuxboot.cfg and have a special method of handling of a special tag for the gamesave system, so that the following would point to the Xebian files in the UDATA structure:
<pre>title Xebian
kernel !gs/debian/vmlinuz
initrd !gs/debian/initrd
append init=/linuxrc root=/dev/ram0 kbd-reset xbox=fatx_e:/UDATA/ffffff00/debian ramdisk_blocksize=4096
xboxfb y</pre>
Contents of SaveMeta.xbx:
<pre>
Name=Xebian</pre>
Contents of TitleMeta.xbx:
<pre>
TitleName=Xbox-Linux</pre>
SaveImage.xbx would show the Debian logo, and TitleImage.xbx would show Tux.
With this arrangement, it would be easy to uninstall or copy Xbox-Linux distributions simply by selecting its icon in the Memory browser. To completely get rid of Xbox-Linux distributions, just select the Tux icon. Distribution on a specially formatted USB drive would also be possible: create a pre-installed Linux image with a FATX filesystem, and then <code>dd</code> it onto the flash drive.
709a3e8645c05a05a789d8408397c1ddc9e96d2b
Xbox Manufacturing Process
0
3775
5580
2017-05-31T08:35:31Z
Espes
2484
Created page with "Retrieved from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process] by ''Michael Steil'' There are many different Xboxes...."
wikitext
text/x-wiki
Retrieved from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process]
by ''Michael Steil''
There are many different Xboxes. Although they all look the same (except for the "Special Edition"), and all of them work with all games, they have been produced in three different factories and may contain different components.
This article describes the "reverse-engineered" internals of Xbox manufacturing.
==The Serial Number==
Every Xbox has a sticker on the bottom that looks like this:
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/serial-sticker.jpg" alt="serial-sticker.jpg" />
It contains the manufacturing date and the 12-digit serial number:
<pre>1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
<br />
Three factories have produced the Xbox. Mexico (Guadalajara) is "02", Hungary (S�rv�r) is "03" and China (Doumen) is "05".
So this Xbox has been manufactured in week #9, 2002 in line 1 of the factory in Hungary, and it was number 166,356 of this week.
==Factories==
{| class="wikitable"
|-
| '''Date'''
| '''Mexico'''
| '''Hungary'''
| '''China'''
|-
| 10/2001
| Production of 110V 1.0 Xboxes with Thomson drives is started for the USA/Canada market.
| Production of 110V 1.0 Xboxes with Thomson drives is started for the USA/Canada market.
|-
| 01/2002
| Production gets extended for Japan.
| Complete switch to 220V European/Australian models.
|-
| 04/2002
| Production lines #1 and #6 get closed and get moved to China. The other four lines continue production. The first Xboxes with Philips DVD drives are made, now 50% of all Mexican devices have Philips, and 50% have Thomson.
|
|-
| 05/2002
|
| Production stops after only less than 9 months, and after about 3 Million Xboxes. All four production lines get moved to China.
|-
| 08/2002
|
|
| Production of the 220V 1.1 Xbox for Europe and Australia only begins, with mostly Philips and sometimes Thomson DVD drives.
|-
| 09/2002
|
|
| First Samsung DVD drives. Most Xboxes now contain Samsung devices, a few contain Philips ones, and very few still contain Thomson ones.
|-
| 10/2002
| Switch the remaining four lines to version 1.1.
|
|
|-
| 11/2002
|
|
| Production gets extended by 110V USA/Canada/Japan models.
|-
| 12/2002
| Production ends after 14 months, and after nearly 7 Million Xboxes.
|
| First line changes to version 1.2
|-
| 02/2003
|
|
| Last line changes to version 1.2
|-
| 03/2003
|
|
| First line changes to version 1.3
|-
| 04/2003
|
|
| Last line changes to version 1.3
|-
| 07/2003
|
|
| First line changes to version 1.4
|-
| 08/2003
|
|
| First line changes to version 1.5
|}
Look at the <a href="/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Versions_HOWTO" title="Xbox Versions HOWTO">Xbox Versions HOWTO</a> for details on when which Chinese line switched to a new version.
==Manufacturing Process==
(Please note that a lot of this information has been concluded from implicit information, it may contain errors.)
When a computer such as the Xbox is manufactured, three very different tasks have to be done:
* assemble the hardware
* copy the software on the hardware
* test the device
The most interesting part about this is when the software is copied, and when and how the device is tested, because there is a lot of room for optimization.
Not counting the firmware of independent components such as the HD, the DVD and the SMC, the Xbox contains three pieces of software:
* The Xbox kernel in Flash ROM
* The hard disk contents (and hard disk key)
* The EEPROM contents
It depends on the device whether it is more convenient to program it before putting it into the Xbox or doing in-system-programming.
===Putting the System together===
The Flash ROM chips gets programmed externally with the final Xbox kernel and then gets soldered onto the Xbox motherboard. The EEPROM is empty when it gets soldered onto it. So is the hard disk when it gets connected.
===The Installation CD===
So when the Xbox is complete, but the EEPROM and the hard disk are still empty and the hard disk is not locked yet, an optical media gets inserted into the DVD drive (this needn't be an Xbox DVD), which contains a properly retail-signed default.xbe built with the XDK that has the allow eject flag set and has the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from CD, which does the following:
* format the three swap partitions
* copy XMTAXBOX.XBE from CD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
===XMTAXBOX.XBE===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
* retrieve the EEPROM contents from a network server
* retrieve the contents of the system and data partitions from a network server
* lock the hard disk
* make some self tests and send the report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/repairdvd.jpg" alt="repairdvd.jpg" />
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/xboxqc.jpg" alt="xboxqc.jpg" /> [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-01/articles/16-01_26.asp]
== Further Reading ==
* [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process_Pictures Xbox Manufacturing Process Pictures]
* [https://web.archive.org/web/20100617013616/http://www.ifm.eng.cam.ac.uk/ctm/idm/cases/xbox.html] Innovation and Design Management case study
* O'Brien, J. [https://web.archive.org/web/20100617013616/http://www.wired.com/wired/archive/9.11/flex_pr.html The making of the Xbox], Wired, Issue 9.11, November 2001
* Shah, J. and Serant, C. [https://web.archive.org/web/20100617013616/http://www.ebnonline.com/story/OEG20020311S0076 Microsoft's Xbox sets supply chain standard], EBN Online, 11 March 2002
* Olavsrud, T. [https://web.archive.org/web/20100617013616/http://www.internetnews.com/bus-news/article.php/1129171 Flextronics relocates Xbox manufacturing facility], Internetnews.com, 15 May 2002
* Penz, B. [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-06/articles/16-06_27.asp Game Over? Xbox production heads east], Business Hungary, Vol 16 No 6, June 2002
* Carbone, J. [https://web.archive.org/web/20100617013616/http://manufacturing.net/pur/article/CA237778?stt=001&pubdate=08%2F15%2F02 Outsourcing the Xbox], Purchasing Magazine Online, 15 August 2002
* Neilley, R: [https://web.archive.org/web/20100617013616/http://www.immnet.com/articles?article=1763 Molding is big man on this campus]
9c65b7f4c30050762780fcaa8c192baa58b0c535
Template:Retrieved
10
3776
5581
2017-05-31T08:36:46Z
JayFoxRox
2
Created page with "'''This article has been retrieved from [{{{1|{{FIXME}}}}}].''' We might have a similar article. [[{{ours}}]] <!-- would be nice to have https://en.wikipedia.org/wiki/Help:Con..."
wikitext
text/x-wiki
'''This article has been retrieved from [{{{1|{{FIXME}}}}}].'''
We might have a similar article. [[{{ours}}]] <!-- would be nice to have https://en.wikipedia.org/wiki/Help:Conditional_expressions -->
ec2df75a27fb7cd8d195dc5b3d48387d0e4b3953
5582
5581
2017-05-31T08:37:21Z
JayFoxRox
2
wikitext
text/x-wiki
'''This article has been retrieved from [{{{1|{{FIXME}}}}}].'''
We might have a similar article. [[{{{ours}}}]] <!-- would be nice to have https://en.wikipedia.org/wiki/Help:Conditional_expressions -->
b83107c25aff6466b0a81f3379d646a7c3e17f93
5583
5582
2017-05-31T08:37:45Z
JayFoxRox
2
wikitext
text/x-wiki
'''This article has been retrieved from [{{{1|{{FIXME}}}}}].'''
We might have a similar article. [[{{{ours|}}}]] <!-- would be nice to have https://en.wikipedia.org/wiki/Help:Conditional_expressions -->
f84edab41c31ad994f9c99a113f29354cb13551c
5584
5583
2017-05-31T08:38:40Z
JayFoxRox
2
wikitext
text/x-wiki
'''This article has been retrieved from [{{{1|{{FIXME}}}}}].'''
We might have a similar article. [[{{{ours|}}}]] <!-- would be nice to have https://en.wikipedia.org/wiki/Help:Conditional_expressions -->
----
e4c322d31f024dbe26924b552224e3be8af91eb8
Xbox Hard Disk Technical Details
0
3763
5586
5537
2017-05-31T08:44:00Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Xbox_Hard_Disk_Technical_Details|ours=Hard Drive}}
by Michael Steil (original version: 1 May 2002, updated 26 September 2002)
== Seagate (10 GB) ==
=== Harddisk information as reported by hdparm -i ===
<pre>Model=ST310211A, FwRev=6.55, SerialNo=6DB2WQW2
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=512kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=19541088
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 *udma2
AdvancedPM=no WriteCache=enabled
Drive Supports : Reserved : ATA-1 ATA-2 ATA-3 ATA-4
</pre>
=== Detailed information as reported by hdparm -I ===
<pre>non-removable ATA device, with non-removable media
Model Number: ST310211A
Serial Number: 6DB2WQW2
Firmware Revision: 6.55
Standards:
Supported: 1 2 3 4
Likely used: 5
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
bytes/track: 0 (obsolete)
bytes/sector: 0 (obsolete)
current sector capacity: 16514064
LBA user addressable sectors = 19541088
Capabilities:
LBA, IORDY(can be disabled)
Buffer size: 512.0kB Queue depth: 1
Standby timer values: spec'd by standard
r/w multiple sector transfer: Max = 16 Current = 16
DMA: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma3 udma4 udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* look-ahead
* write cache
* Power Management feature set
* Security Mode feature set
SMART feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
Security:
supported
enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
Security level high
HW reset results:
CBLID- below Vih
Device num = 1
Checksum: correct
</pre>
=== Hard disk performance measured by hdparm -t ===
<pre>Timing buffered disk reads: 64 MB in 3.51 seconds = 18.23 MB/sec
Timing buffer-cache reads: 128 MB in 0.85 seconds =150.59 MB/sec
</pre>
== Western Digital (8 GB) ==
=== Harddisk information as reported by hdparm -i ===
<pre>Model=WDC WD80EB-28CGH1, FwRev=24.84G24, SerialNo=***************
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=15509/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
BuffType=DualPortCache, BuffSize=768kB, MaxMultSect=16, MultSect=off
CurCHS=15509/16/63, CurSects=15633072, LBA=yes, LBAsects=15633072
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 *mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: device does not report version: 1 2 3 4 5
</pre>
=== Detailed information as reported by hdparm -I ===
<pre>ATA device, with non-removable media
Model Number: WDC WD80EB-28CGH1
Serial Number: ***************
Firmware Revision: 24.84G24
Standards:
Supported: 5 4 3 2
Likely used: 6
Configuration:
Logical max current
cylinders 15509 15509
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 15633072
LBA user addressable sectors: 15633072
device size with M = 1024*1024: 7633 MBytes
device size with M = 1000*1000: 8004 MBytes (8 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 40 Queue depth: 1
Standby timer values: spec'd by Standard, with device specific minimum
R/W multiple sector transfer: Max = 16 Current = 0
Recommended acoustic management value: 128, current value: 254
DMA: mdma0 mdma1 *mdma2 udma0 udma1 udma2 udma3 udma4 udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* Look-ahead
* Write cache
* Power Management feature set
* Security Mode feature set
* SMART feature set
Automatic Acoustic Management feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
Security:
supported
enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
Security level high
HW reset results:
CBLID- above Vih
Device num = 0 determined by CSEL
Checksum: correct
</pre>
=== Hard disk performance measured by hdparm -t ===
<pre>Timing buffered disk reads: 64 MB in 6.58 seconds = 9.73 MB/sec
Timing buffer-cache reads: 128 MB in 3.28 seconds = 39.02 MB/sec
</pre>
d24ed66bbc3b4603c67052cc010b7a99c5391e6d
Porting an Operating System to the Xbox HOWTO
0
3764
5587
5534
2017-05-31T08:44:27Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Porting_an_Operating_System_to_the_Xbox_HOWTO}}
== Differences ==
The Xbox hardware consists of standard components, like a Pentium III Celeron CPU, an nForce chipset and IDE DVD and hard disk drives. Still there are a few differences, some of which would make an unmodified operating system crash.
=== Chipset ===
The Xbox chipset is basically an nVidia nForce 420, but with a GeForce "NV2A" integrated (instead of a GeForce2 MX), and with an Intel instead of an AMD CPU. Here is the output of "lspci" on a PC nForce:
<pre>00:00.0 Host bridge: nVidia Corporation nForce CPU bridge (rev b2)
00:00.1 RAM memory: nVidia Corporation nForce 220/420 Memory Controller (rev b2)
00:00.2 RAM memory: nVidia Corporation nForce 220/420 Memory Controller (rev b2)
00:00.3 RAM memory: nVidia Corporation nForce 420 Memory Controller (DDR) (rev b2)
00:01.0 ISA bridge: nVidia Corporation nForce ISA Bridge (rev c3)
00:01.1 SMBus: nVidia Corporation nForce PCI System Management (rev c1)
00:02.0 USB Controller: nVidia Corporation nForce USB Controller (rev c3)
00:03.0 USB Controller: nVidia Corporation nForce USB Controller (rev c3)
00:04.0 Ethernet controller: nVidia Corporation nForce Ethernet Controller (rev d2)
00:05.0 Multimedia audio controller: nVidia Corporation: Unknown device 01b0 (rev c2)
00:06.0 Multimedia audio controller: nVidia Corporation nForce Audio (rev c2)
00:08.0 PCI bridge: nVidia Corporation nForce PCI-to-PCI bridge (rev c2)
00:09.0 IDE interface: nVidia Corporation nForce IDE (rev c3)
00:1e.0 PCI bridge: nVidia Corporation nForce AGP to PCI Bridge (rev b2)
02:00.0 VGA compatible controller: nVidia Corporation NVCrush11 [GeForce2 MX Integrated Graphics] (rev b1)
</pre>
On the Xbox, the output looks like this:
<pre>00:00.0 Host bridge: nVidia Corporation: Unknown device 02a5 (rev a1)
00:00.3 RAM memory: nVidia Corporation: Unknown device 02a6 (rev a1)
00:01.0 ISA bridge: nVidia Corporation nForce ISA Bridge (rev d4)
00:01.1 SMBus: nVidia Corporation nForce PCI System Management (rev d1)
00:02.0 USB Controller: nVidia Corporation nForce USB Controller (rev d4)
00:03.0 USB Controller: nVidia Corporation nForce USB Controller (rev d4)
00:04.0 Ethernet controller: nVidia Corporation nForce Ethernet Controller (rev d2)
00:05.0 Multimedia audio controller: nVidia Corporation: Unknown device 01b0 (rev d2)
00:06.0 Multimedia audio controller: nVidia Corporation nForce Audio (rev d2)
00:06.1 Modem: nVidia Corporation Intel 537 [nForce MC97 Modem] (rev d1)
00:08.0 PCI bridge: nVidia Corporation nForce PCI-to-PCI bridge (rev d2)
00:09.0 IDE interface: nVidia Corporation nForce IDE (rev d4)
00:1e.0 PCI bridge: nVidia Corporation nForce AGP to PCI Bridge (rev a1)
01:00.0 VGA compatible controller: nVidia Corporation: Unknown device 02a0 (rev a1)
</pre>
PCI bus 0 is almost identical, except for the Xbox only having a single memory controller. Bus 1 on the PC contains all PCI cards. Since the Xbox does not support PCI cards, the AGP bus on the Xbox is bus 1 instead of bus 2.
==== PCI Enumeration Bug ====
These two differences between the PC and the Xbox version of the nForce chipset have introduced three bugs into the chipset that all have to do with PCI enumeration:
* The nonexistent memory controllers at 0:0.1 and 0:0.2 are completely broken: If you try to probe them, i.e. read out their PCI IDs, the Xbox freezes.
* There are ghost devices on bus 1, after the video controller (1:0.0). You get garbage if you try to probe them.
* The same is true for the complete bus 2.
So if your operating system scans the PCI bus in order to find out what drivers need to be loaded for the PCI devices, do not touch 0:0.1 and 0:0.2. The easiest fix would be to start the PCI enumeration with 0:1.0, as the first few devices need no driver anyway, but the following code, taken from the Xbox Linux kernel, handles this better and also hides the ghost devices:
<pre>if (mach_pci_is_blacklisted(bus, PCI_SLOT(devfn), PCI_FUNC(devfn)))
return -EINVAL;
static inline int mach_pci_is_blacklisted(int bus, int dev, int fn)
{
if(machine_is_xbox) {
return (bus > 1) || ((bus != 0) && ((dev != 0) || (fn != 0))) ||
(!bus && !dev && ((fn == 1) || (fn == 2)));
}
}
</pre>
Note that some operating systems (or even some applications) repeat the PCI enumeration later: On Unix systems, the XFree86/X.org X Window servers for example do that, but this can be deactivated using a configuration parameter (or of course patched in the source code).
==== No Keyboard Controller ====
The Xbox is a legacy free PC, so it does not contain a so-called "Super-I/O Chip" which includes old ISA hardware such as
* serial port
* parallell port
* floppy disk controller
* keyboard controller
In general, this should be no problem for any operating system; there is just one thing: Many operating systems (such as Linux up some 2.4.x version) assume that every PC has a keyboard controller (although this is not true for many embedded x86 as well as Itanium systems), and therefore statically allocate interrupt line 1 for the keyboard controller.
The problem is that the original Xbox hardware initialization code (as well as Cromwell) put the first USB controller on interrupt 1, so if the operating system already has it allocated, the first USB controller will not work. On a 1.0 Xbox this means that no USB devices (including, ironically, a keyboard) will work, while on later boxes this only affects two of the four connectors.
So make sure that your operating system checks for a keyboard controller and allocates no interrupt if it does not exist. The following code, taken from the Linux kernel, shows how to check for a keyboard controller:
<pre>#define kbd_read_input() inb(KBD_DATA_REG)
#define kbd_read_status() inb(KBD_STATUS_REG)
if (kbd_read_status() == 0xff && kbd_read_input() == 0xff)
kbd_exists = 0;
</pre>
==== Timer Frequency ====
The system timer inside the "8254 PIT" unit of the chipset on a PC has a base frequency of 1.193182 MHz. The number of task switches, the system clock and all timing for multimedia is usually based on the interrupts generated by the PIT unit. For some unknown reason, this base frequency is 1.125000 MHz on the Xbox, which is about 6% lower. If your operating system does not handle this difference, multimedia plays at the wrong speed and the system clock (if you have a software clock and do not use the hardware clock) will be incorrect quite quickly.
So all you have to do is to search for the constant of 1193182 (sometimes it is 1193180) and replace it with code like this:
<pre>timer_base = machine_is_xbox? 1125000 : 1193182;
</pre>
In case your operating system defines this as a constant, you have to change it into a variable and make sure it is assigned early enough. In this case, it should be a good idea to assign it as soon as you detect whether the machine is an Xbox.
==== Reboot and Poweroff ====
The Xbox chipset has no ACPI capabilities, so it is not possible to shut it down using the ACPI protocol. It is also not possible to reset the Xbox like a PC, because it lacks the keyboard controller which usually includes this feature. Both these functions are handled by the "System Management Controller" SMC (also called the "PIC"), which is a device on the SMBus.
In order to communicate with a device on the SMBus, you need a driver for the Xbox SMBus controller, which is AMD754 compatible. Linux for example includes this driver. But there is no need to statically include a complete bus driver just for this simple function: The SMBus on the Xbox is simple enough to be controlled with just two small C functions. The following code is all you need:
<pre>#define XBOX_SMB_IO_BASE 0xC000
#define XBOX_SMB_GLOBAL_ENABLE (0x2 + XBOX_SMB_IO_BASE)
#define XBOX_SMB_HOST_ADDRESS (0x4 + XBOX_SMB_IO_BASE)
#define XBOX_SMB_HOST_DATA (0x6 + XBOX_SMB_IO_BASE)
#define XBOX_SMB_HOST_COMMAND (0x8 + XBOX_SMB_IO_BASE)
#define XBOX_PIC_ADDRESS 0x10
#define SMC_CMD_POWER 0x02
#define SMC_SUBCMD_POWER_RESET 0x01
#define SMC_SUBCMD_POWER_CYCLE 0x40
#define SMC_SUBCMD_POWER_OFF 0x80
static void xbox_pic_cmd(u8 command)
{
outw_p(((XBOX_PIC_ADDRESS) << 1), XBOX_SMB_HOST_ADDRESS);
outb_p(SMC_CMD_POWER, XBOX_SMB_HOST_COMMAND);
outw_p(command, XBOX_SMB_HOST_DATA);
outw_p(inw(XBOX_SMB_IO_BASE), XBOX_SMB_IO_BASE);
outb_p(0x0a, XBOX_SMB_GLOBAL_ENABLE);
}
void xbox_power_reset(char * __unused)
{
xbox_pic_cmd(SMC_SUBCMD_POWER_RESET);
}
void xbox_power_cycle(char * __unused)
{
xbox_pic_cmd(SMC_SUBCMD_POWER_CYCLE);
}
void xbox_power_off(void)
{
xbox_pic_cmd(SMC_SUBCMD_POWER_OFF);
}
</pre>
''xbox_power_reset'' just resets the system while ''xbox_power_cycle'' turns it off and turns it back on after half a second. Please note that the above SMBus code lacks error detection and should not be used in the general case.
=== DVD Driver ===
Although the DVD drives in the Xbox are basically standard IDE drives, there are some differences, some due to protection issues, and some because of bugs in their firmwares.
==== Reset on Eject ====
On the PlayStation, it was possible to trick the console into loading copies by inserting an original, having the CD checked and quickly replacing it with a copy. The designers of the Xbox made this trick impossible by having an additional security chip, the SMC, which resets the system if the user presses the eject button or even tries to manually eject the tray.
But the system does not ''always'' reset in this case. In the Xbox Dashboard, for example, it is possible to open the tray. Every time the user presses the eject button or the tray opens (for example if the drive ejects on request of software), the PIC sends an EXTSMI# interrupt to the CPU. If the software running on the CPU handles this interrupt and sends back a message to the PIC, then the system will not be reset.
The code in [[arch/i386/mach-xbox/reset-on-eject.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/arch/i386/mach-xbox/reset-on-eject.c?rev=1.2&view=auto'') in the Xbox Linux kernel handles this. Again, you need SMBus code to talk to the SMC.
==== DVD Drive Bugs ====
Microsoft uses several different DVD drives in the Xbox, some of which have its compatibility problems:
{| border="1"
|-
| '''drive string'''
| '''problems'''
|-
| "THOMSON-DVD"
| pretends it cannot play audio or dvds; does not understand the ATAPI eject command
|-
| "PHILIPS XBOX DVD DRIVE"
| does not understand the ATAPI eject command
|-
| "PHILIPS J5 3235C"
| pretends it cannot play audio or dvds
|-
| "SAMSUNG DVD-ROM SDG-605B"
| no issues
|}
In addition, none of these drives respect door locking when the user presses the eject button.
So if you do nothing, some drives won't respond to software eject commands, and some will refuse to play DVD or audio content, because the player software thinks the drive cannot do it. If you want to support all these DVD drives completely, you have to add some code to the ATAPI CD/DVD driver code in your operating system, which probably already includes some tests for other devices, because many CD/DVD drives report incorrect capabilities. The table above includes the exact string identifiers for these Xbox DVD drives, so you can easily check for them.
If the drive does not understand the ATAPI eject command (as well as the load command), you have to issue an eject command to the SMC. The file [[include/linux/xbox.h]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/include/linux/xbox.h?rev=1.1&view=auto'') includes the code you will need. The following two lines are taken from this file:
<pre>#define Xbox_tray_load() Xbox_SMC_write(SMC_CMD_EJECT, SMC_SUBCMD_EJECT_LOAD);
#define Xbox_tray_eject() Xbox_SMC_write(SMC_CMD_EJECT, SMC_SUBCMD_EJECT_EJECT);
</pre>
Please note that having an Xbox DVD drive installed does not necessarily mean that we are running on an Xbox. It is possible (although impractical, because of the incompatible power connectors) to use them in a standard PC. So if the drive does not understand the ATAPI eject command, and we are not running on an Xbox, there is no way to eject the tray, as the drive does not even have its own eject button - and you should of course not send SMC commands on the PC.
The Linux implementation of this behaviour can be found in [[drivers/ide/ide-cd.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/drivers/ide/ide-cd.c?rev=1.13&view=auto''). When detecting the drives, the driver notes in the drive's kernel structure whether it is an Xbox drive and whether it can eject, and corrects the incorrect capabilities. As the physical eject button, which is connected to the SMC, does not respect whether the tray is supposed to be locked, the driver simulates this in software.
Locking/unlocking the door:
<pre>if (xbox_drive && machine_is_xbox) {
simulated_lock = lock;
}
</pre>
Ejecting/loading:
<pre>if (machine_is_xbox && xbox_drive && cannot_eject) {
if (load) {
Xbox_tray_load();
} else {
simulated_lock = 0;
Xbox_tray_eject();
}
return;
}
</pre>
The reset-on-eject driver, which catches eject button presses, should then also respect the flag "simulated_lock" and not open the door if it is locked in software.
Please also note that although certain capability flags of the Xbox drives are correct, software can still have a problem with them. An example on Unix is cdparanoia: If a CD drive has a headphone, then it assumes it must support playing audio CDs. This is logical. But cdparanoia assumes that if a drive has no headphone jack, it does not support audio CDs, but this is not true. All Xbox DVD drives can rip audio CDs, although they all have no headphone jack (and correctly report that).
=== Video Driver ===
Fully supporting the Xbox video hardware could mean a lot of work (or at least a lot of copying from the Xbox kernel). But there is no need to implement a complete video driver. Both bootloaders provided by the Xbox Linux project set up a 640x480 screen (32 bit colour, RGBX), which is useful for many setups. This linear framebuffer lies at the top of memory (around 60 MB) and can be used by your operating system without ever touching any video registers. This just works like the VESA modes supported by most operating systems, which get set up by the boot loader (using BIOS functions) and never get switched afterwards. Have a look at the bootloader section to learn how to find out where this framebuffer is located.
If you want full support, you can reuse driver code for nVidia video hardware, as the Xbox video hardware is fully nVidia compatible. The problem is just that the Xbox does not have a VGA RAMDAC, but a PAL/NTSC video encoder (which is connected through the SMBus), so you always need to make sure when you set up a new mode that the video encoder is also correctly set up, or else you will get garbage on the screen.
Unfortunately, there is one of three incompatible video encoders in every Xbox: The first Xboxes used Connexant chips (1.0 to 1.3), later ones used Focus components (1.4 and 1.5), and 1.6 Xboxes include an integrated Xcalibur unit. That is why you might have to copy a lot of code from the Xbox Linux kernel and have others with different Xboxes test your code. You can find all this code in [[drivers/video/xbox/*]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/drivers/video/xbox/'').
=== Hard Disk ===
The Xbox includes a standard 8 or 10 GB hard disk. For security reasons (the user should be unable to just connect it to a PC) they are locked with an ATA password, but as the firmware already unlocks it, you should not have to care about this, unless you send ATA reset commands to the drive - which you should avoid.
Nevertheless, you might want your operating system to coexist with the Xbox system software, then you have to respect the existing partitioning and install it (probably as an image file) onto an existing partition.
==== Xbox Partitioning ====
The Xbox uses an implicit partitioning scheme, which is described in the articles [[Xbox Partitioning and Filesystem Details]] and [[Xbox Hard Disk Partitioning]]. In order to detect whether the hard drive is Xbox-partitioned, you have to check for the "BRFR" magic value, which must always be present. If this is too little evidence for you, you can also check for the "FATX" header in the "System Files" (C:) partition, but you should not assume any more FATX headers.
You should also create a sixth partition for the space between 8 GB and 137 GB, and a seventh partition for the space above 137 GB in order to be compatible with patched Xbox kernels that work with larger hard disks.
You might want to consider allowing two partitioning systems active at the same time: Xbox partitioning, which defines (at least) the lowermost 8 GB, and standard PC partitioning using a PC partition table (the first sector on the hard disk is unused). Therefore, in Xbox Linux, the Xbox partitions are assigned the numbers 50 to 56, while the Pc partitions start with 1.
In Xbox Linux, this code is located in [[fs/partitions/check.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/fs/partitions/check.c?rev=1.9&view=auto'') and [[fs/partitions/xbox.c xbox.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/fs/partitions/xbox.c?rev=1.7&view=auto'').
==== FATX filesystem ====
On the hard disk, the Xbox exclusively uses the FATX filesystem, which is a simplified version of FAT16/FAT32. The articles [[Xbox Partitioning and Filesystem Details]] and [[Differences between Xbox FATX and MS-DOS FAT]] explain FATX in detail.
=== Peripherals ===
==== Xbox Gamepad ====
The Xbox gamepad is a USB device with a proprietary protocol, which you can find in the Xbox Linux kernel in [[drivers/usb/input/xpad.c]] (''http://cvs.sourceforge.net/viewcvs.py/xbox-linux/kernel-2.6/drivers/usb/input/xpad.c?rev=1.5&view=auto''). You might want to add emulation for mouse and/or keyboard as well.
==== Remote Control ====
The remote control is similar to the gamepad. Keyboard and mouse emulation may make sense for it as well.
<! --==== Xbox Live Headset ==== -->
=== Other System Components ===
==== USB ====
The Xbox has a standard OHCI host controller, which your operating system hopefully supports out of the box.
==== Ethernet ====
The Ethernet controller of the Xbox is an nForce "nvnet". The Linux driver [[forcedeth]] (''http://www.hailfinger.org/carldani/linux/patches/forcedeth/'') supports it completely.
=== Sensors ===
There are two temperature sensors on the Xbox (CPU and system). Standard Linux drivers support them. You can control the system fan using the SMC. See the Xbox Linux "tools" source code for details.
2aec105edb9d24fd5943512ba3d088a3cfa4cdf8
Xbox Hardware Overview
0
3767
5588
5541
2017-05-31T08:44:43Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview}}
The Xbox is a standard PC, based on standard components, but extended with a some security solutions. This document gives an overview of the components the Xbox is made of.
= Overview =
Viewed by connection (similar to the Windows 2000 Device Manager
view), the Xbox system hardware looks like this:
Diagram modified by Fahad
<pre>Xbox V1.0-1.5
|
|-- Mobile Intel Pentium III 733mHz w/128kb Cache
|
|-- Flash ROM (V1.0/1.1 -
|
\-- PCI bus
|
|-- Programmable Interrupt Controller
|
|-- System Timer
|
|-- DMA Controller
|
|-- PCI Bridge Device - Host Bridge (0:0:0, 0x2a5)
|
|-- Memory Controller - SDRAM - Samsung K4D263238M-QC50 133mHz 16mb (0:0:3, 0x2a6)
| |
| |-- Top of Motherboard
| | |
| | |-- Pad 1 (closest to power connector) (empty)
| | |
| | |-- Pad 2 (left of Pad 1)
| | |
| | |-- Pad 3 (below Pad 4)
| | |
| | \-- Pad 4 (closest to AV connector) (empty)
| |
| \-- Bottom of Motherboard
| |
| |-- Pad 5 (paralell to Pad 1) (empty)
| |
| |-- Pad 6 (paralell to Pad 2)
| |
| |-- Pad 7 (paralell to Pad 3)
| |
| \-- Pad 8 (paralell to Pad 4) (empty)
|
|-- HUB Interface - ISA Bridge (0:1:0, 0x1b2) [nForce]
|
|-- SMBus Controller (0:1:1, 0x1b4) [nForce]
| |
| |-- PIC16LC
| |
| |-- Conexant 25871/Focus 454/Xcalibur Video Encoder
| |
| |-- ADM1032 System Temperature Monitor
| |
| \-- Serial EEPROM
|
|-- OHCI USB Controller (0:2:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 1 & 2)
|
|-- OHCI USB Controller (0:3:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 3 & 4)
|
|-- MCP-X V3 Southbridge
| |
| |-- MCP Networking Adapter (0:4:0, 0x1c3) [nForce]
| |
| \-- MCP APU (0:5:0, 0x1b0) [nForce]
|
|-- AC`97 Audio Codec Interface (0:6:0, 0x1b1) [nForce]
|
|-- Simple Communication Controller - Generic Modem (0:6:1, 0x1c1) [???]
|
|-- IDE Controller (0:9:0, 0x1bc) [nForce]
| |
| |-- Primary IDE Channel
| | |
| | |-- Seagate ST3210014ACE 10.2gb (8gb used)/Custom Western Digital WD80EB 8gb hard drive
| | |
| | \-- Custom Samsung/Phillips/Thompson/LG DVD Drive
| |
| \--- Secondary IDE Channel
|
|-- PCI Bridge (0:8:0, 0x1b8) [nForce]
|
\-- AGP Host to PCI Bridge (0:30:0, 0x1b7) [nForce]
|
\-- NV2A GeForce 3MX Integrated GPU/Northbridge 233mHz (1:0:0, 0x2a0)
</pre>
<br />
PCI devices have their Bus:Dev:Func numbers as well as the DevID
printed next to them. PCI devices with "[nForce]" have the same DevIDs as
their counterparts of the nForce chipset.
A derivative of the Xbox chipset is also available as the PC chipset
"nVidia nForce", which consists of a northbridge with the memory
interface and the GPU and the southbridge with the PCI bus and its
devices, just like the Xbox chipset. Many of the southbridge PCI devices
are the same on both versions, i.e. they have the same DevID.
= The Devices in Detail =
== Intel Pentium III CPU ==
The CPU is a standard Pentium III Coppermine mobile at 733 MHz. This CPU has been found to be a modified Pentium III, as it has many of the features a Celeron lacks. Therefore, it can be classified as a Pentium III with a smaller cache. (Regular has 256kb or more, XBox has 128kb)
== Flash ROM ==
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MB; 0xFFFC0000, if the ROM is 256 KB) into the but the Xbox kernel.
== PCI bus, Host Bridge, ISA Bridge, AGP Host to PCI Bridge, Memory Controller ==
These devices are identical to the corresponding devices contained in the nForce chipset. The PCI bus can be accessed like on any PC.
== Programmable Interrupt Controller, System Timer, DMA Controller ==
These legacy PC/AT system devices are fully PC-compatible, but the timer frequency is 6% higher than in a PC.
== SMBus Controller ==
Some low-speed devices are connected through the SMBus, so the
southbridge contains an SMBus controller, compatible to the SMBus
controller in the nVidia nForce chipset. Since nForce is based on AMD's original chipset for Athlon CPUs, the SMBus controller is AMD-756 compatible.
== PIC16LC ==
The PIC16LC is a small 8 bit processor running at 20 MHz with its
own ROM, RAM and I/O lines. It controls:
* Power button
* Eject button
* Power/error LED
* DVD tray status (through extra pins to DVD drive)
* Video cable type (3 pins)
The PIC is always running, even if the Xbox is turned off. When the
power cable is unplugged, it gets its energy from a capacitor for some
hours.
== Video Encoder ==
The Xbox does not use an ordinary [https://web.archive.org/web/20100617022211/http://en.wikipedia.org/wiki/RAMDAC RAMDAC] for video output. Instead, it employs a <em>video encoder</em>.
Video encoder is a chip that converts a digital pixel data stream (coming from the nVidia NV2A graphics processor) into analog video signal, just like a RAMDAC would. An ordinary RAMDAC, however, can only output VGA-style RGB signal. The video encoder used in the Xbox is more flexible, and can generate several different types of signals that adhere to various video standards and color formats. These include, but are not necessarily limited to:
* VGA-style >31 kHz RGB, though only with Sync-on-Green sync signals. (If needed, separate HSYNC and VSYNC signals can be obtained from the motherboard, or by building a special video cable with active electronics for stripping and separating the Sync-on-Green sync signal. In any case, separate HSYNC and VSYNC are not available directly through the AV connector.)
* TV-compatible 15 kHz RGB (with composite sync) – suitable for European-style SCART RGB output (are progressive 625/50 signals supported?)
* Component (Y'PbPr) signal, both in SDTV and HDTV resolutions; suitable for American-style "component" output
* PAL color signal with typical PAL timings (including PAL60), in both composite (CVBS) and s-video (Y/C) formats
* SECAM color signal with typical SECAM timings, in both composite (CVBS) and s-video (Y/C) formats
* NTSC color signal with typical NTSC timings, in both composite (CVBS) and s-video (Y/C) formats
* Black and white composite video signal without a color carrier
The video encoder is also capable of PALplus style Line 23 Wide Screen Signalling (WSS), and the Xbox PIC is rigged with the capability of controlling Scart pin 8 (the ''function switching pin'', which is used as an alternative method of Wide Screen Signalling) and pin 16 (the ''fast switching pin''.)
The make and model of the video encoder has varied through the times – three different video encoders have been used this far. All three are very similar in their features; they support various modes and are flexible enough to be able to output a VGA compatible signal (which is not supported by the Xbox kernel.) They are, however, not register-compatible.
Two of the video encoders (namely, Conexant CX25871 and Focus FS454) also have extensive scaling and filtering functionality, which allows for [https://web.archive.org/web/20100617022211/http://scanline.ca/overscan/ overscan compensation] in desktop-style "TV out" usage. (This means that the GPU can output ordinary VGA resolutions with VGA timings and the video encoder can convert them to SDTV resolutions with TV-style timings on the fly, adding borders around the image so that a projection of the VGA framebuffer image falls within the "safe area" of the video signal.) The capabilities of the Xcalibur chip, however, remain a mystery in this regard: it is not known whether it has a scaler.
All video encoders are connected to (and controlled via) <a href="/web/20100617022211/http://www.xbox-linux.org/wiki/SMBus_Controller" title="SMBus Controller">IÃÂÃÂÃÂòC/SMBus</a>.
=== Conexant CX25871 ===
[https://web.archive.org/web/20100617022211/http://www.conexant.com:9000/cgi-bin/query?mss=srchprod&pg=q&i=IDXPRODSRCH&q=cx25870 Conexant CX25871] is a close relative of the Brooktree BT868/BT869. There is also a sister model (CX25870) without the Macrovision capability. This chip was used in Xbox versions v1.0 through v1.3. If you follow the link, you will find a product brief and a complete data sheet, with register-level programming information.
=== Focus FS454 ===
[https://web.archive.org/web/20100617022211/http://www.focusinfo.com/solutions/catalog.asp?id=30 Focus FS454] was used in v1.4 (and possibly v1.5) Xboxes. There is also a sister model (FS453) without the Macrovision capability. The data sheet containing the necessary programming information is available from the manufacturer by separate request. Copies of it have also been seen floating around the net.
=== Xcalibur ===
The "Xcalibur" video encoder is a custom chip manufactured for Microsoft. It was first used in the Xbox hardware revision 1.6.
The Xbox-Linux support the Xcalibur video encoders is very limited at present (see <a href="/web/20100617022211/http://www.xbox-linux.org/wiki/Xbox_v1.6_Issues" title="Xbox v1.6 Issues">Xbox v1.6 Issues</a>). The reason for this is that there is, at least currently, no official programming documentation available for this chip. It seems the only way to find out more is through reverse-engineering techniques.
Xboxes that contain the Xcalibur encoder have the firmware ROM and the PIC physically integrated into another MS-specific chip, named Xyclops.
== ADM1032 System Temperature Monitor ==
The Analog Devices ADM1032 is an SMBus device that does temperature
measurement.
== Serial EEPROM ==
The Serial EEPROM holds some settings, such as time zone, language,
IP address etc., as well as the hard disk key and the Xbox serial number.
== OHCI USB Controller, IDE Controller ==
These devices are compatible to standard PC devices.
== MCP Networking Adapter, MCP APU, Audio Codec Interface ==
These are identical with the nForce devices.
== Simple Communication Controller - Generic Modem ==
Nothing is known about the purpose of this device. It never gets
used by the Xbox system software. It is probably there, because the nForce has a PCI softmodem, but in the Xbox, the corresponding lines of the Southbridge don't seem to be connected.
== NV2A GeForce3 Integrated GPU ==
The Xbox graphics hardware is VGA compatible and very similar to
existing nVidia graphics cards.
= Further Information =
Information about all chips and links to technical documentation can
be found at
[https://web.archive.org/web/20100617022211/http://www.console-dev.com/xbox.htm Pixel8's site]
somehting
afa68697971e59775ab4c0d1528ce3afd542701f
Xbox DVD Movie Playback Kit
0
3768
5589
5542
2017-05-31T08:44:59Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/DVD-IR_Internals}}
by ''Rob Reilink'', 3 Mar 2003
==Introduction==
The DVD-IR remote receiver is a part of the DVD kit which allows you to view DVDs on your Xbox. It comes together with a remote controller. Although it may seem just a simple microcontroller device with a receiver module, there is something more inside which could make it even more interesting.
==Pictures==
Ok, let's start with the pictures from the internals:
'''Missing image'''<br />''Dvdirfront.jpg'' <br />Image:Dvdirfront.jpg<br /><br />
'''Missing image'''<br />''Dvdirback.jpg'' <br />Image:Dvdirback.jpg<br /><br />
==IC's==
So, what is inside and what does it do?
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
==Hacking!==
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. It should be noted though, that the ROM is probably scrambled. Also, the microcontroller could encrypt the data even more. As the mask ROM is not a proprietary device, it is known not to contain any encryption hardware. On the other hand is it quite reasonable to assume Microsoft also signed this piece of code, and the dashboard might refuse to run it if it is not signed.
79e8c2f2bc1c35375fdf6234bec9e7f1ab8908fd
Xbox Manufacturing Process
0
3775
5590
5580
2017-05-31T08:45:17Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process}}
by ''Michael Steil''
There are many different Xboxes. Although they all look the same (except for the "Special Edition"), and all of them work with all games, they have been produced in three different factories and may contain different components.
This article describes the "reverse-engineered" internals of Xbox manufacturing.
==The Serial Number==
Every Xbox has a sticker on the bottom that looks like this:
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/serial-sticker.jpg" alt="serial-sticker.jpg" />
It contains the manufacturing date and the 12-digit serial number:
<pre>1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
<br />
Three factories have produced the Xbox. Mexico (Guadalajara) is "02", Hungary (S�rv�r) is "03" and China (Doumen) is "05".
So this Xbox has been manufactured in week #9, 2002 in line 1 of the factory in Hungary, and it was number 166,356 of this week.
==Factories==
{| class="wikitable"
|-
| '''Date'''
| '''Mexico'''
| '''Hungary'''
| '''China'''
|-
| 10/2001
| Production of 110V 1.0 Xboxes with Thomson drives is started for the USA/Canada market.
| Production of 110V 1.0 Xboxes with Thomson drives is started for the USA/Canada market.
|-
| 01/2002
| Production gets extended for Japan.
| Complete switch to 220V European/Australian models.
|-
| 04/2002
| Production lines #1 and #6 get closed and get moved to China. The other four lines continue production. The first Xboxes with Philips DVD drives are made, now 50% of all Mexican devices have Philips, and 50% have Thomson.
|
|-
| 05/2002
|
| Production stops after only less than 9 months, and after about 3 Million Xboxes. All four production lines get moved to China.
|-
| 08/2002
|
|
| Production of the 220V 1.1 Xbox for Europe and Australia only begins, with mostly Philips and sometimes Thomson DVD drives.
|-
| 09/2002
|
|
| First Samsung DVD drives. Most Xboxes now contain Samsung devices, a few contain Philips ones, and very few still contain Thomson ones.
|-
| 10/2002
| Switch the remaining four lines to version 1.1.
|
|
|-
| 11/2002
|
|
| Production gets extended by 110V USA/Canada/Japan models.
|-
| 12/2002
| Production ends after 14 months, and after nearly 7 Million Xboxes.
|
| First line changes to version 1.2
|-
| 02/2003
|
|
| Last line changes to version 1.2
|-
| 03/2003
|
|
| First line changes to version 1.3
|-
| 04/2003
|
|
| Last line changes to version 1.3
|-
| 07/2003
|
|
| First line changes to version 1.4
|-
| 08/2003
|
|
| First line changes to version 1.5
|}
Look at the <a href="/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Versions_HOWTO" title="Xbox Versions HOWTO">Xbox Versions HOWTO</a> for details on when which Chinese line switched to a new version.
==Manufacturing Process==
(Please note that a lot of this information has been concluded from implicit information, it may contain errors.)
When a computer such as the Xbox is manufactured, three very different tasks have to be done:
* assemble the hardware
* copy the software on the hardware
* test the device
The most interesting part about this is when the software is copied, and when and how the device is tested, because there is a lot of room for optimization.
Not counting the firmware of independent components such as the HD, the DVD and the SMC, the Xbox contains three pieces of software:
* The Xbox kernel in Flash ROM
* The hard disk contents (and hard disk key)
* The EEPROM contents
It depends on the device whether it is more convenient to program it before putting it into the Xbox or doing in-system-programming.
===Putting the System together===
The Flash ROM chips gets programmed externally with the final Xbox kernel and then gets soldered onto the Xbox motherboard. The EEPROM is empty when it gets soldered onto it. So is the hard disk when it gets connected.
===The Installation CD===
So when the Xbox is complete, but the EEPROM and the hard disk are still empty and the hard disk is not locked yet, an optical media gets inserted into the DVD drive (this needn't be an Xbox DVD), which contains a properly retail-signed default.xbe built with the XDK that has the allow eject flag set and has the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from CD, which does the following:
* format the three swap partitions
* copy XMTAXBOX.XBE from CD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
===XMTAXBOX.XBE===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
* retrieve the EEPROM contents from a network server
* retrieve the contents of the system and data partitions from a network server
* lock the hard disk
* make some self tests and send the report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/repairdvd.jpg" alt="repairdvd.jpg" />
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/xboxqc.jpg" alt="xboxqc.jpg" /> [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-01/articles/16-01_26.asp]
== Further Reading ==
* [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process_Pictures Xbox Manufacturing Process Pictures]
* [https://web.archive.org/web/20100617013616/http://www.ifm.eng.cam.ac.uk/ctm/idm/cases/xbox.html] Innovation and Design Management case study
* O'Brien, J. [https://web.archive.org/web/20100617013616/http://www.wired.com/wired/archive/9.11/flex_pr.html The making of the Xbox], Wired, Issue 9.11, November 2001
* Shah, J. and Serant, C. [https://web.archive.org/web/20100617013616/http://www.ebnonline.com/story/OEG20020311S0076 Microsoft's Xbox sets supply chain standard], EBN Online, 11 March 2002
* Olavsrud, T. [https://web.archive.org/web/20100617013616/http://www.internetnews.com/bus-news/article.php/1129171 Flextronics relocates Xbox manufacturing facility], Internetnews.com, 15 May 2002
* Penz, B. [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-06/articles/16-06_27.asp Game Over? Xbox production heads east], Business Hungary, Vol 16 No 6, June 2002
* Carbone, J. [https://web.archive.org/web/20100617013616/http://manufacturing.net/pur/article/CA237778?stt=001&pubdate=08%2F15%2F02 Outsourcing the Xbox], Purchasing Magazine Online, 15 August 2002
* Neilley, R: [https://web.archive.org/web/20100617013616/http://www.immnet.com/articles?article=1763 Molding is big man on this campus]
7672a73cecbf11fc91b293c82db65208a99b38ae
Xbox Savegame System
0
3774
5591
5578
2017-05-31T08:45:41Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617021545/http://www.xbox-linux.org/wiki/Xbox_Savegame_System}}
The Xbox savegame management system is a simple organizational system that allows users to manage their saved games, downloaded contents from Xbox LIVE, and copy savegames to memory units.
==Overview==
The Xbox savegame system uses folders and metadata to organize savegames according to its game, type, and name (in that order). All game-generated data are stored in either E:\UDATA or E:\TDATA. The UDATA folder is generally used to store gamesaves (user data), and the TDATA folder is generally used to store LIVE contents and other configurations (such as downloaded levels, high-score tables, game updates, and other miscellaneous configurations). These are the universal elements of gamesaves:
* A title meta (universal)
* A title image (universal)
* A save title
* A save image
Saves are nested individually inside the game's folder, which are nested inside the game-data folders (UDATA and TDATA). Every XBE that had ever run will have a folder for itself in both of the game-data folders (however, the Xbox Dashboard is a special case).
==Structure Layout==
Here's a typical layout of a the savegame folders, shown with Splinter Cell and Xbox Dashboard Music.
<pre>+-E:
+-TDATA
| +-5553000c
| | +-audiovideo.par
| | +-contentimage.xbx
| +-fffe0000
| +-music
| +-ST.DB
+-UDATA
+-5553000c
+-8E6AA806E588
| +-GMMAN_Profile.sg1
| +-GMMAN_Profile.sg2
| +-GMMAN_Profile.sg3
| +-Profile.inf
| +-SaveMeta.xbx
+-SaveImage.xbx
+-TitleImage.xbx
+-TitleMeta.xbx</pre>
As you can see, in the top level there are two folders, TDATA and UDATA. Under each of those folders are folders named according to the game's ID (for example, Splinter Cell's ID is 5553000c). They are in both TDATA and UDATA folders.
===UDATA Folder===
The UDATA folder is generally used to store user content, such as save games, settings, and user-created customizations. Under this folder are folders for each individual game, named by their ID number. Under every game folder, there are two files: TitleImage.xbx and TitleMeta.xbx.
====TitleImage.xbx====
TitleImage.xbx is a 128*128px Xbox texture, used for displaying the game's logo at the left of the game's section in the Memory browser. If this file is missing or corrupted, a generic Xbox logo will be displayed in its place.
====TitleMeta.xbx====
TitleMeta.xbx is a text file for indicating what title of the game would be displayed in the Memory browser. The title is taken from the embedded title of the executable that created the game folder (ie. if you run Splinter Cell's default.xbe first, the title will be "Splinter Cell". If you run its downloader.xbe (same game ID), the title will be "Downloader"). If this file is missing or corrupted, the game's title will be displayed as "Unknown Title". The structure for TitleMeta.xbx is:
<pre>
TitleName=Game Name</pre>
In the case of Splinter Cell, it is <code>TitleName=Splinter Cell</code>.
=====Localization=====
The TitleMeta.xbx file may contain localization:
<pre>
[default]
TitleName=Network Configurations
[EN]
TitleName=Network Configurations
[JA]
TitleName=ネットワーク設定データ
[DE]
TitleName=Daten für Netzwerkeinstellungen
[FR]
TitleName=Données des paramètres réseau
[ES]
TitleName=Datos de configuración de red
[IT]
TitleName=Dati impostazioni di rete
[KO]
TitleName=네트워크 설정 데이터
[TW]
TitleName=網路設定資料
[BR]
TitleName=Dados de Configurações da Rede</pre>
There is a separate TitleName entry listed under each of the languages. The entry under <code>[default]</code> will be used if a localized game title cannot be found in this file for the current system language.
===Gamesaves===
Each individual gamesave or game profile is under the game's folder in the UDATA folder. Each save or profile has its own folder. The name of the folders differs from game to game, as there is not set format for the name of a save folder. Ie. one game may choose to name its save folder as "001aecf7", another game may name the save folder as "Profile01". There is always a SaveMeta.xbx file under the folder, and there may also be a SaveImage.xbx file there. Each save folder may contain whatever data that is needed for a valid save.
====SaveMeta.xbx====
SaveMeta.xbx is very similar to TitleMeta.xbx. This defines the name of a save and is displayed on the left side of the screen when the save is selected. If this file is missing or corrupted, the gamesave's name will be displayed as "Corrupted Save". Its format is as the following:
<pre>
Name=Save Name</pre>
In the case of a Splinter Cell game save, it is something like <code>Name=GMMAN_Profile</code>.
====SaveImage.xbx====
SaveImage.xbx is a 64*64px Xbox texture, used to represent an individual save folder. It'll be located in the game's folder under the UDATA folder if all of the saves use the same image (to avoid unnecessary duplication), or under each individual save folder, if there are different kinds of saves located in each folder. The gamesave folder's SaveImage.xbx has precedence over the game folder's SaveImage.xbx. If this file is missing or corrupted, a generic Xbox logo will be in its place.
Universal save image:
<pre>
+-UDATA
+-5553000c
+-SaveImage.xbx</pre>
Individual save image:
<pre>
+-UDATA
+-4d530013
+-129E1A3F1B2A
+-SaveImage.xbx</pre>
===TDATA Folder===
The TDATA folder is similar in structure to the UDATA folder. However, it is used to store Xbox LIVE contents, game configurations, and other miscellaneous data. With the TDATA game folders, there is no specific structure, so games may store whatever file it needs wherever inside its game folder.
====contentimage.xbx====
Contentimage.xbx is used in the same way as SaveImage.xbx, except that it is used specifically to indicate downloaded contents.
==Special Case of Xbox Dashboard==
The Xbox Dashboard does not abide by these structures. For one, it doesn't have a UDATA folder, and in the TDATA folder it doesn't have any .xbx files. However, in its TDATA folder (E:\TDATA\fffe0000), there is a folder named <code>music</code>. Inside it is a file named <code>ST.DB</code> and several folders with hexadecimal names. This is where soundtracks are stored.
If you go into the LIVE Dash's "Test Connections" screen and press the Black button, a folder that follows the structure will be created under the game folder fffe0000 under the UDATA folder. This contains diagnostic information about the connection to Xbox LIVE.
==Other Occurrences in the UDATA and TDATA Folders==
* Under the Dashboard's TDATA game folder, a blank file named <code>NoisyCamera</code> may be present. This is a marker for an Easter egg on the main menu of the Dashboard. Toggle it the same way as the full-screen visualization egg.
* Under the UDATA folder, there may be a file named <code>NICKNAME.XBN</code>. This stores the Xbox's nickname for online games.
==Application to Xbox-Linux==
One way the Xbox-Linux project can take advantage of the gamesave system is by having a all Xbox-Linux distributions reside inside an Xbox-Linux game folder. Each individual distribution would be a "gamesave." For example, suppose that the Xbox-Linux project uses the game ID <code>ffffff00</code> and that we're using Xebian as the distro. Here would be the layout of the files following the gamesave structure:
<pre>+-E:
+-TDATA
| +-ffffff00
| +-linuxboot.cfg
+-UDATA
+-ffffff00
+-debian
| +-initrd
| +-rootfs
| +-SaveImage.xbx
| +-SaveMeta.xbx
| +-swap
| +-vmlinuz
+-TitleImage.xbx
+-TitleMeta.xbx</pre>
Xromwell would search the gamesave directories for linuxboot.cfg and have a special method of handling of a special tag for the gamesave system, so that the following would point to the Xebian files in the UDATA structure:
<pre>title Xebian
kernel !gs/debian/vmlinuz
initrd !gs/debian/initrd
append init=/linuxrc root=/dev/ram0 kbd-reset xbox=fatx_e:/UDATA/ffffff00/debian ramdisk_blocksize=4096
xboxfb y</pre>
Contents of SaveMeta.xbx:
<pre>
Name=Xebian</pre>
Contents of TitleMeta.xbx:
<pre>
TitleName=Xbox-Linux</pre>
SaveImage.xbx would show the Debian logo, and TitleImage.xbx would show Tux.
With this arrangement, it would be easy to uninstall or copy Xbox-Linux distributions simply by selecting its icon in the Memory browser. To completely get rid of Xbox-Linux distributions, just select the Tux icon. Distribution on a specially formatted USB drive would also be possible: create a pre-installed Linux image with a FATX filesystem, and then <code>dd</code> it onto the flash drive.
dc367c9974f77913322fb2a104cfbea920c702f8
5593
5591
2017-05-31T08:50:45Z
JayFoxRox
2
/* Structure Layout */
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617021545/http://www.xbox-linux.org/wiki/Xbox_Savegame_System}}
The Xbox savegame management system is a simple organizational system that allows users to manage their saved games, downloaded contents from Xbox LIVE, and copy savegames to memory units.
==Overview==
The Xbox savegame system uses folders and metadata to organize savegames according to its game, type, and name (in that order). All game-generated data are stored in either E:\UDATA or E:\TDATA. The UDATA folder is generally used to store gamesaves (user data), and the TDATA folder is generally used to store LIVE contents and other configurations (such as downloaded levels, high-score tables, game updates, and other miscellaneous configurations). These are the universal elements of gamesaves:
* A title meta (universal)
* A title image (universal)
* A save title
* A save image
Saves are nested individually inside the game's folder, which are nested inside the game-data folders (UDATA and TDATA). Every XBE that had ever run will have a folder for itself in both of the game-data folders (however, the Xbox Dashboard is a special case).
==Structure Layout==
Here's a typical layout of a the savegame folders, shown with Splinter Cell and Xbox Dashboard Music.
*{{fs-drive|E:}}
**{{fs-folder|TDATA}}
***{{fs-folder|5553000c}}
****{{fs-file|audiovideo.par}}
****{{fs-file|contentimage.xbx}}
***{{fs-folder|fffe0000}}
****{{fs-folder|music}}
*****{{fs-file|ST.DB}}
**{{fs-folder|UDATA}}
***{{fs-folder|5553000c}}
****{{fs-folder|8E6AA806E588}}
*****{{fs-file|GMMAN_Profile.sg1}}
*****{{fs-file|GMMAN_Profile.sg2}}
*****{{fs-file|GMMAN_Profile.sg3}}
*****{{fs-file|Profile.inf}}
*****{{fs-file|SaveMeta.xbx}}
****{{fs-file|SaveImage.xbx}}
****{{fs-file|TitleImage.xbx}}
****{{fs-file|TitleMeta.xbx}}
As you can see, in the top level there are two folders, TDATA and UDATA. Under each of those folders are folders named according to the game's ID (for example, Splinter Cell's ID is 5553000c). They are in both TDATA and UDATA folders.
===UDATA Folder===
The UDATA folder is generally used to store user content, such as save games, settings, and user-created customizations. Under this folder are folders for each individual game, named by their ID number. Under every game folder, there are two files: TitleImage.xbx and TitleMeta.xbx.
====TitleImage.xbx====
TitleImage.xbx is a 128*128px Xbox texture, used for displaying the game's logo at the left of the game's section in the Memory browser. If this file is missing or corrupted, a generic Xbox logo will be displayed in its place.
====TitleMeta.xbx====
TitleMeta.xbx is a text file for indicating what title of the game would be displayed in the Memory browser. The title is taken from the embedded title of the executable that created the game folder (ie. if you run Splinter Cell's default.xbe first, the title will be "Splinter Cell". If you run its downloader.xbe (same game ID), the title will be "Downloader"). If this file is missing or corrupted, the game's title will be displayed as "Unknown Title". The structure for TitleMeta.xbx is:
<pre>
TitleName=Game Name</pre>
In the case of Splinter Cell, it is <code>TitleName=Splinter Cell</code>.
=====Localization=====
The TitleMeta.xbx file may contain localization:
<pre>
[default]
TitleName=Network Configurations
[EN]
TitleName=Network Configurations
[JA]
TitleName=ネットワーク設定データ
[DE]
TitleName=Daten für Netzwerkeinstellungen
[FR]
TitleName=Données des paramètres réseau
[ES]
TitleName=Datos de configuración de red
[IT]
TitleName=Dati impostazioni di rete
[KO]
TitleName=네트워크 설정 데이터
[TW]
TitleName=網路設定資料
[BR]
TitleName=Dados de Configurações da Rede</pre>
There is a separate TitleName entry listed under each of the languages. The entry under <code>[default]</code> will be used if a localized game title cannot be found in this file for the current system language.
===Gamesaves===
Each individual gamesave or game profile is under the game's folder in the UDATA folder. Each save or profile has its own folder. The name of the folders differs from game to game, as there is not set format for the name of a save folder. Ie. one game may choose to name its save folder as "001aecf7", another game may name the save folder as "Profile01". There is always a SaveMeta.xbx file under the folder, and there may also be a SaveImage.xbx file there. Each save folder may contain whatever data that is needed for a valid save.
====SaveMeta.xbx====
SaveMeta.xbx is very similar to TitleMeta.xbx. This defines the name of a save and is displayed on the left side of the screen when the save is selected. If this file is missing or corrupted, the gamesave's name will be displayed as "Corrupted Save". Its format is as the following:
<pre>
Name=Save Name</pre>
In the case of a Splinter Cell game save, it is something like <code>Name=GMMAN_Profile</code>.
====SaveImage.xbx====
SaveImage.xbx is a 64*64px Xbox texture, used to represent an individual save folder. It'll be located in the game's folder under the UDATA folder if all of the saves use the same image (to avoid unnecessary duplication), or under each individual save folder, if there are different kinds of saves located in each folder. The gamesave folder's SaveImage.xbx has precedence over the game folder's SaveImage.xbx. If this file is missing or corrupted, a generic Xbox logo will be in its place.
Universal save image:
<pre>
+-UDATA
+-5553000c
+-SaveImage.xbx</pre>
Individual save image:
<pre>
+-UDATA
+-4d530013
+-129E1A3F1B2A
+-SaveImage.xbx</pre>
===TDATA Folder===
The TDATA folder is similar in structure to the UDATA folder. However, it is used to store Xbox LIVE contents, game configurations, and other miscellaneous data. With the TDATA game folders, there is no specific structure, so games may store whatever file it needs wherever inside its game folder.
====contentimage.xbx====
Contentimage.xbx is used in the same way as SaveImage.xbx, except that it is used specifically to indicate downloaded contents.
==Special Case of Xbox Dashboard==
The Xbox Dashboard does not abide by these structures. For one, it doesn't have a UDATA folder, and in the TDATA folder it doesn't have any .xbx files. However, in its TDATA folder (E:\TDATA\fffe0000), there is a folder named <code>music</code>. Inside it is a file named <code>ST.DB</code> and several folders with hexadecimal names. This is where soundtracks are stored.
If you go into the LIVE Dash's "Test Connections" screen and press the Black button, a folder that follows the structure will be created under the game folder fffe0000 under the UDATA folder. This contains diagnostic information about the connection to Xbox LIVE.
==Other Occurrences in the UDATA and TDATA Folders==
* Under the Dashboard's TDATA game folder, a blank file named <code>NoisyCamera</code> may be present. This is a marker for an Easter egg on the main menu of the Dashboard. Toggle it the same way as the full-screen visualization egg.
* Under the UDATA folder, there may be a file named <code>NICKNAME.XBN</code>. This stores the Xbox's nickname for online games.
==Application to Xbox-Linux==
One way the Xbox-Linux project can take advantage of the gamesave system is by having a all Xbox-Linux distributions reside inside an Xbox-Linux game folder. Each individual distribution would be a "gamesave." For example, suppose that the Xbox-Linux project uses the game ID <code>ffffff00</code> and that we're using Xebian as the distro. Here would be the layout of the files following the gamesave structure:
<pre>+-E:
+-TDATA
| +-ffffff00
| +-linuxboot.cfg
+-UDATA
+-ffffff00
+-debian
| +-initrd
| +-rootfs
| +-SaveImage.xbx
| +-SaveMeta.xbx
| +-swap
| +-vmlinuz
+-TitleImage.xbx
+-TitleMeta.xbx</pre>
Xromwell would search the gamesave directories for linuxboot.cfg and have a special method of handling of a special tag for the gamesave system, so that the following would point to the Xebian files in the UDATA structure:
<pre>title Xebian
kernel !gs/debian/vmlinuz
initrd !gs/debian/initrd
append init=/linuxrc root=/dev/ram0 kbd-reset xbox=fatx_e:/UDATA/ffffff00/debian ramdisk_blocksize=4096
xboxfb y</pre>
Contents of SaveMeta.xbx:
<pre>
Name=Xebian</pre>
Contents of TitleMeta.xbx:
<pre>
TitleName=Xbox-Linux</pre>
SaveImage.xbx would show the Debian logo, and TitleImage.xbx would show Tux.
With this arrangement, it would be easy to uninstall or copy Xbox-Linux distributions simply by selecting its icon in the Memory browser. To completely get rid of Xbox-Linux distributions, just select the Tux icon. Distribution on a specially formatted USB drive would also be possible: create a pre-installed Linux image with a FATX filesystem, and then <code>dd</code> it onto the flash drive.
c5811a8f5cf18a6477e439e647ae4cba500863ce
Main Page
0
1
5592
5555
2017-05-31T08:48:23Z
Espes
2484
/* Development Kits and Tools */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[DSP]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
ae2daa9441d86726ebe7aebfbb42c95c8593ac66
5598
5592
2017-05-31T08:52:25Z
Espes
2484
/* Emulation */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[DSP]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
37e1490859fe846e23f479a7924a24bb7b0934f6
5611
5598
2017-05-31T09:15:12Z
Espes
2484
/* Emulation */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[DSP]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
9c5757604b8f9c181bfb1f991133c10401dca098
Template:Fs-drive
10
3777
5594
2017-05-31T08:50:56Z
JayFoxRox
2
Created page with "{{1}}"
wikitext
text/x-wiki
{{1}}
8d1a7ca8f5878e8c4bfb9b4c32e0c531cff7bb58
5609
5594
2017-05-31T09:13:45Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Drive-harddisk.svg.png|16px]] {{{1}}}
b5ea3faa99a09cd2857ac8a6c6b810538517295f
Template:Fs-folder
10
3778
5595
2017-05-31T08:51:09Z
JayFoxRox
2
Created page with "{{{1}}}"
wikitext
text/x-wiki
{{{1}}}
6c1d7c6d588a87a5e7dd855a9f2baf785578acec
5608
5595
2017-05-31T09:13:21Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Folder.svg.png|16px]] {{{1}}}
9f2ae6a150d4119839f584354ade0e8c8e06bbeb
Template:Fs-file
10
3779
5596
2017-05-31T08:51:26Z
JayFoxRox
2
Created page with "{{{1}}}"
wikitext
text/x-wiki
{{{1}}}
6c1d7c6d588a87a5e7dd855a9f2baf785578acec
5607
5596
2017-05-31T09:12:27Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Text-x-generic.svg.png|16px]] {{{1}}}
e6be5752ecc3b18dc400eb9c3fedd69b197cec4e
5614
5607
2017-05-31T09:24:23Z
JayFoxRox
2
wikitext
text/x-wiki
<!-- Also getting an optional {{{hash}}} -->
[[File:Text-x-generic.svg.png|16px]] {{{1}}} ({{{size|Unknown number of}}} bytes}}})
1355b8c9fe1c9168a8f8b9663255ae52f034a76f
5615
5614
2017-05-31T09:25:37Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude><!-- Also getting an optional {{{hash}}} --></noinclude>
[[File:Text-x-generic.svg.png|16px]] {{{1}}} ({{{size|Unknown number of}}} bytes}}})
f9b28eefbcd68844f9701bcff902e19b20b3ec97
5616
5615
2017-05-31T09:26:27Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Text-x-generic.svg.png|16px]] {{{1}}} ({{{size|Unknown number of}}} bytes)
<noinclude><!-- Also getting an optional {{{hash}}} --></noinclude>
3e6f42100ad17c8a8a77df3f57198650a4cae465
5617
5616
2017-05-31T09:26:56Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Text-x-generic.svg.png|16px]] {{{1}}} ({{{size|Unknown number of}}} bytes)<noinclude><!-- Also getting an optional {{{hash}}} --></noinclude>
24622c7f31c0ffae4a96c95358bcfe4a61cdadfc
5618
5617
2017-05-31T09:27:47Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Text-x-generic.svg.png|16px]] {{{1}}} ''({{{size|Unknown number of}}} bytes)''<noinclude><!-- Also getting an optional {{{hash}}} --></noinclude>
f4bab5396a4a278b86ab46ecf7b42705ee86fe2d
5620
5618
2017-05-31T09:55:11Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Text-x-generic.svg.png|16px]] {{{1}}} ''({{{size|Unknown number of}}} bytes)'' <sup><abbr title="{{{hash}}}">#</abbr></sup><noinclude><!-- Also getting an optional {{{hash}}} --></noinclude>
8ed0664b9fe98d6fc42ca9e090a37c2c4098fa21
5621
5620
2017-05-31T09:56:33Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Text-x-generic.svg.png|16px]] {{{1}}} ''({{{size|Unknown number of}}} bytes)'' <sup><sup>{{{hash}}}</sup></sup><noinclude><!-- Also getting an optional {{{hash}}} --></noinclude>
e20ea0186080e5a865fe3eadf72b71f6b45d132a
5622
5621
2017-05-31T09:57:53Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:Text-x-generic.svg.png|16px]] {{{1}}} ''({{{size|Unknown number of}}} bytes)'' <sup>{{{hash|}}}</sup><noinclude><!-- Also getting an optional {{{hash}}} --></noinclude>
0d64a69a1f76683b342a2133f741ff120b57d4b2
Xbox Hard Drive Locking Mechanism
0
3780
5599
2017-05-31T08:54:23Z
Espes
2484
Created page with "Retrieved from [https://web.archive.org/web/20100617023052/http://www.xbox-linux.org/wiki/Xbox_Hard_Drive_Locking_Mechanism] by ''SpeedBump'' (original version: 13 August 2..."
wikitext
text/x-wiki
Retrieved from [https://web.archive.org/web/20100617023052/http://www.xbox-linux.org/wiki/Xbox_Hard_Drive_Locking_Mechanism]
by ''SpeedBump'' (original version: 13 August 2002)
The hard drive in the MS Xbox(tm) is a standard ide drive, which implements a rarely used security feature to restrict access to its data. This document will describe in full the security features, and the algorithms required to access the data on an xbox drive.
==The IDE (ATA) commands==
The ATA spec defines a feature subset which allows for the user to limit access to the drive's data behind a hardware implemented locking mechanism. There are several commands in the SECURITY feature subset, but the command of most interest is the SECURITY_UNLOCK command.
SECURITY_UNLOCK requires that the user provide one of two 32 byte passwords, either a user or master password. The Xbox uses the user password. Details on the data formats and timings for the data to be sent to the ide drive can be found in the ata specs (see [[https://web.archive.org/web/20100617023052/http://www.t13.org/]]).
==The password==
The drive password is generated in two distinct phases. The first phase extracts a key (referred to as the HDKey) from the eeprom data on the Xbox. The HDKey is unique to each Xbox making this first phase dependant only on the Xbox eeprom of the unit. The second phase uses this HDKey to generate a password which is specific to the drive being unlocked (keyed to the model and serial numbers of the drive).
==Drive Data==
During the second phase, the serial and model numbers are needed. These values are available in the response data from the DEVICE_IDENTITY ata command. However, the data needs to be properly reorganized. It is read in big endian words, and needs to be byte swapped first to get the byte ordering correct. Then, starting from the end of the data (serial == 20 bytes, model == 40 bytes) ignore ASCII spaces (byte value of 0x20) at the end of the data. Zeros are *not* trimmed, *only* spaces. Do not be fooled into believing that this data is a string. On some drives this is the case, but on others there are non-ascii values in the fields.
==Basic Security algorithms==
There are two primary crytography routines needed when generating an XBox drive password, SHA1 and RC4.
SHA1 is a hashing algorithm. It's primary purpose is to take an input message and create a (relatively) small signature (called a digest) which is unique to the original message. One of the goals of SHA1 is to make it difficult to alter the input message in such a way as to result in the same output digest.
RC4 is a symmetric cipher. This means that the algorithm for encryption is the same as that for decryption. The purpose is to make one key work in both directions.
There is an algorithm called HMAC which uses a hashing algorithm (in this case SHA1) to generate a cryptographically "strong" signature. I'm sure there is a mathematical basis for this, but I'm not willing to try to understand it :)
==The Password Algorithm==
(some syntax notes, key data is shown entering functions from the side, data is shown entring from above or below, in order of presentation from left to right)
<pre> RC4_key >--(second)-->--,
/|\ |
| |
.-<--|__eeprom_key__|-->-----------> HMAC_SHA1 |
| /|\ |
| | |
| .--->-----------' |
| | |
| eeprom_data = |__data_hash___|__enc_conf__|__enc_data__| |
| | | | |
| | \|/ | |
| | rc4_decrypt <----|---------<|
| | | | |
| \|/ | | |
| (must be equal) | \|/ |
| /|\ | rc4_decrypt <---'
| | | |
| | \|/ \|/
| | |_confounder_|____data____|
| | / / |
| | / / |
| | / / |
| | / / |
| | \|/ / \|/
`--->-----------------> HMAC_SHA1 / |__HDKey__|__|
/|\ / |
\______/ |
|
.-------------------------<--------'
|
| model_number serial_number
| \ /
| \ /
`--->-----------------> HMAC_SHA1
|
\|/
HD_password
</pre>
<br />
This seems to be the easiest way to show the required calculations.
Basically there are several intermediate steps. First, generate the RC4_key from the eeprom_key and the data_hash (first 20 bytes of eeprom_data). Use the RC4_key to decrypt the encrypted confounder (8 bytes 20 bytes into eeprom_data) and the encrypted data (20 bytes 28 bytes into eeprom_data). Now generate an HMAC_SHA1 hash from the eeprom_key and the decrypted confounder and data. Verify that this hash matches the data_hash stored in the eeprom. If they don't match then the eeprom data is not correct. If the hashes match then the first 16 bytes of the decrypted data field is the HDKey.
Once you have the HDKey get the model number and serial number from the ide drive. Generate an HMAC_SHA1 hash from the HDKey, model and serial numbers. The resulting 20 bytes are the HD password. The remaining 12 bytes needed for the password are zeros.
==Remaining Questions==
The algorithm is well known, however it is dependant on the eeprom_key. It would be ideal if this key could be compiled into a driver to perform the generation and the unlocking. However noone appears to be able to answer the question of legality. Is it legal to privide the eeprom key? Either way, the drive can be unlocked. The ability to distribute the key will only help people use the drive outside the xbox (plus make it simpler to unlock the drive in the xbox).
8d88176917174a02ce6d6516eba740b63973c7b8
5626
5599
2017-05-31T10:01:34Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617023052/http://www.xbox-linux.org/wiki/Xbox_Hard_Drive_Locking_Mechanism}}
by ''SpeedBump'' (original version: 13 August 2002)
The hard drive in the MS Xbox(tm) is a standard ide drive, which implements a rarely used security feature to restrict access to its data. This document will describe in full the security features, and the algorithms required to access the data on an xbox drive.
==The IDE (ATA) commands==
The ATA spec defines a feature subset which allows for the user to limit access to the drive's data behind a hardware implemented locking mechanism. There are several commands in the SECURITY feature subset, but the command of most interest is the SECURITY_UNLOCK command.
SECURITY_UNLOCK requires that the user provide one of two 32 byte passwords, either a user or master password. The Xbox uses the user password. Details on the data formats and timings for the data to be sent to the ide drive can be found in the ata specs (see [[https://web.archive.org/web/20100617023052/http://www.t13.org/]]).
==The password==
The drive password is generated in two distinct phases. The first phase extracts a key (referred to as the HDKey) from the eeprom data on the Xbox. The HDKey is unique to each Xbox making this first phase dependant only on the Xbox eeprom of the unit. The second phase uses this HDKey to generate a password which is specific to the drive being unlocked (keyed to the model and serial numbers of the drive).
==Drive Data==
During the second phase, the serial and model numbers are needed. These values are available in the response data from the DEVICE_IDENTITY ata command. However, the data needs to be properly reorganized. It is read in big endian words, and needs to be byte swapped first to get the byte ordering correct. Then, starting from the end of the data (serial == 20 bytes, model == 40 bytes) ignore ASCII spaces (byte value of 0x20) at the end of the data. Zeros are *not* trimmed, *only* spaces. Do not be fooled into believing that this data is a string. On some drives this is the case, but on others there are non-ascii values in the fields.
==Basic Security algorithms==
There are two primary crytography routines needed when generating an XBox drive password, SHA1 and RC4.
SHA1 is a hashing algorithm. It's primary purpose is to take an input message and create a (relatively) small signature (called a digest) which is unique to the original message. One of the goals of SHA1 is to make it difficult to alter the input message in such a way as to result in the same output digest.
RC4 is a symmetric cipher. This means that the algorithm for encryption is the same as that for decryption. The purpose is to make one key work in both directions.
There is an algorithm called HMAC which uses a hashing algorithm (in this case SHA1) to generate a cryptographically "strong" signature. I'm sure there is a mathematical basis for this, but I'm not willing to try to understand it :)
==The Password Algorithm==
(some syntax notes, key data is shown entering functions from the side, data is shown entring from above or below, in order of presentation from left to right)
<pre> RC4_key >--(second)-->--,
/|\ |
| |
.-<--|__eeprom_key__|-->-----------> HMAC_SHA1 |
| /|\ |
| | |
| .--->-----------' |
| | |
| eeprom_data = |__data_hash___|__enc_conf__|__enc_data__| |
| | | | |
| | \|/ | |
| | rc4_decrypt <----|---------<|
| | | | |
| \|/ | | |
| (must be equal) | \|/ |
| /|\ | rc4_decrypt <---'
| | | |
| | \|/ \|/
| | |_confounder_|____data____|
| | / / |
| | / / |
| | / / |
| | / / |
| | \|/ / \|/
`--->-----------------> HMAC_SHA1 / |__HDKey__|__|
/|\ / |
\______/ |
|
.-------------------------<--------'
|
| model_number serial_number
| \ /
| \ /
`--->-----------------> HMAC_SHA1
|
\|/
HD_password
</pre>
<br />
This seems to be the easiest way to show the required calculations.
Basically there are several intermediate steps. First, generate the RC4_key from the eeprom_key and the data_hash (first 20 bytes of eeprom_data). Use the RC4_key to decrypt the encrypted confounder (8 bytes 20 bytes into eeprom_data) and the encrypted data (20 bytes 28 bytes into eeprom_data). Now generate an HMAC_SHA1 hash from the eeprom_key and the decrypted confounder and data. Verify that this hash matches the data_hash stored in the eeprom. If they don't match then the eeprom data is not correct. If the hashes match then the first 16 bytes of the decrypted data field is the HDKey.
Once you have the HDKey get the model number and serial number from the ide drive. Generate an HMAC_SHA1 hash from the HDKey, model and serial numbers. The resulting 20 bytes are the HD password. The remaining 12 bytes needed for the password are zeros.
==Remaining Questions==
The algorithm is well known, however it is dependant on the eeprom_key. It would be ideal if this key could be compiled into a driver to perform the generation and the unlocking. However noone appears to be able to answer the question of legality. Is it legal to privide the eeprom key? Either way, the drive can be unlocked. The ability to distribute the key will only help people use the drive outside the xbox (plus make it simpler to unlock the drive in the xbox).
d29a82aedb52c1ed0af04946c879d5ecb9d510dc
17 Mistakes Microsoft Made in the Xbox Security System
0
3781
5600
2017-05-31T08:57:09Z
Espes
2484
Created page with "Retrieved from [https://web.archive.org/web/20100617003620/http://www.xbox-linux.org/wiki/17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System] by [https://web.archive.or..."
wikitext
text/x-wiki
Retrieved from [https://web.archive.org/web/20100617003620/http://www.xbox-linux.org/wiki/17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System]
by [https://web.archive.org/web/20100617003620/http://www.xbox-linux.org/wiki/User:Michael_Steil Michael Steil]
{| class="wikitable"
|-
|
This [https://web.archive.org/web/20100617003620/http://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf paper], dated 2005-10-25, has been submitted to the [https://web.archive.org/web/20100617003620/http://events.ccc.de/congress/2005/ 22nd Chaos Communication Congress] and has been on [https://web.archive.org/web/20100617003620/http://events.ccc.de/congress/2005/fahrplan/events/559.en.html December 29th 2005, 18:00], at the Berliner Congress Center, Berlin, Germany.
A '''recording''' of the presentation is available here: [https://web.archive.org/web/20100617003620/http://video.google.com/videoplay?docid=-749497642180741726 Google Video: Team Xbox-Linux at 22C3].
'''Another recording''' of a slightly updated talk is available here: [https://web.archive.org/web/20100617003620/http://video.google.com/videoplay?docid=-4356347903120410001 Google Video: Deconstructing The Xbox Security System]
|}
== Introduction ==
The Xbox is a gaming console, which has been introduced by Microsoft Corporation in late 2001 and competed with the Sony Playstation 2 and the Nintendo GameCube. Microsoft wanted to prevent the Xbox from being used with copied games, unofficial applications and alternative operating systems, and therefore designed and implemented a security system for this purpose.
This article is about the security system of the Xbox and the mistakes Microsoft made. It will not explain basic concepts like buffer exploits, and it will not explain how to construct an effective security system, but it will explain how ''not'' to do it: This article is about how easy it is to make terrible mistakes and how easily people seem to overestimate their skills. So this article is also about how to avoid the most common mistakes.
For every security concept, this article will first explain the design from Microsoft's perspective, and then describe the hackers' efforts to break the security. If the reader finds the mistakes in the design, this proves that Microsoft has weak developers. If, on the other hand, the reader doesn't find the mistakes, this proves that constructing a security system is indeed hard.
=== The Xbox Hardware ===
Because Microsoft had a very tight time frame for the development of the Xbox, they used off-the-shelf PC hardware and their Windows and DirectX technologies as the basis of the console. The Xbox consists of a Pentium III Celeron mobile 733 MHz CPU, 64 MB of RAM, a GeForce 3 MX with TV out, a 10 GB IDE hard disk, an IDE DVD drive, Fast Ethernet, as well as USB for the gamepads. It runs a simplified Windows 2000 kernel, and the games include adapted versions of Win32, libc and DirectX statically linked to them.
Although this sounds a lot more like a PC than, for example, a GameCube with its PowerPC processor, custom optical drive and custom gamepad connectors, it is important to point out that, from a hardware point of view, the Xbox shares ''all'' properties of a PC: It has LPC, PCI and AGP busses, it has IDE drives, it has a Northbridge and a Southbridge, and it includes all the legacy PC features such as the "PIC" interrupt controller, the "PIT" timer and the A20 gate. nVidia sold a slightly modified Southbridge and a Northbridge with another graphics core embedded for the PC market as the "nForce" chipset between 2001 and 2002.
=== Motivation for the Security System ===
The Xbox being a PC, it should be trivial to install Linux on it in order to have a cheap and, for that time, powerful PC. Even today, a small and silent 733 MHz PC with TV connectivity for 149 USD/EUR is still attractive. But this is not the only thing Microsoft wanted to prevent. There are three uses that should not have been possible:
* '''Linux''': The hardware is subsidized and money is gained with the games, therefore people should not be able to buy an Xbox without the intent to buy any games. Microsoft apparently feels that allowing the Xbox to be used as a (Linux) computer would be too expensive for them.
* '''Homebrew/Unlicensed''': Microsoft wants the software monopoly on the Xbox platform. Nobody should be able to publish unlicensed software, because Microsoft wants to gain money with the games to amortize the hardware losses, and because they do not want anyone to release non-Internet Explorer browsers and non-Windows Media Player multimedia software.
* '''Copies''': Obviously it is important to Microsoft that it is not possible to run copied games on the Xbox.
Microsoft decided to design a single security system that was supposed to make Linux, homebrew/unlicensed software and copies impossible. The idea to accomplish this was by simply locking out all software that is either not on the intended (original) medium or not by Microsoft.
On the one hand, this idea makes the security system easier and there are less possible points off attack. But on the other hand, 3 times more attackers have a single security system to hack: Although Open Source and Linux people, homebrew developers, game companies as well as crackers have little common interests, they could unite in this case and jointly hack the Xbox security system.
Of the three consoles of its generation, Xbox, Playstation 2 and GameCube, the Xbox is the one whose security system has been compromised first, the one that is now easiest to modify for a hobbyist, the one with the most security system workarounds, and the one with the most powerful hacks. This may be, because the Xbox security is the weakest one of the three, but also because Open Source people, homebrew people and crackers attacked the Xbox, while the Open Source people did not attack the Playstation 2, as Linux had been officially supported by Sony, so the total number of hackers was lower, buying them time.
=== Idea of the Security System ===
In order to allow only licensed and authentic code to run, it is necessary to build a TCPA/Palladium-like chain of trust, which reaches from system boot to the actual execution of the game. The first link is from the CPU to the code in ROM, which includes the Windows kernel, and the second link is from the kernel to the game.
There are several reasons that the operating system is contained in ROM (256 KB) instead of being stored on hard disk, like on a PC. First, it allows a faster startup, as the kernel can initialize while the hard disk is spinning up, furthermore, there is one link less in the chain of trust, and in case verification of the kernel gets compromised, it is harder to overwrite a ROM chip than modify data on a hard disk.
== Startup Security ==
When turned on, x86-compatible CPUs start at the address 0xFFFFFFF0 in the address space, which is usually flash memory. For the Xbox, this is obviously no good idea, as flash memory can be
* replaced, by removing the chip, fitting a socket and inserting a replacement chip.
* overridden, by adding another flash memory chip to the LPC bus. This override functionality is necessary, because during manufacturing, an empty flash memory chip gets soldered onto the board, an override LPC ROM chip gets connected to the board and the system boots from the external ROM, which then programs the internal flash memory. This procedure is significantly cheaper than preprogramming the flash memory chips.
* reprogrammed, because flash memory can be written to many times. It would be possible to use ROM instead of flash memory, but ROM is more expensive than flash memory.
Thus, the machine must not start from flash memory.
=== Microsoft's Perspective ===
It would be possible to make two of the attacks impossible, by using ROM chips instead of flash. There would be no way to reprogram them, and it would be possible to disable the LPC override functionality in the chipset, because it is not needed for the manufacturing process any more.
==== The Hidden ROM ====
There is a solution between flash memory and ROM that combines advantages of both these approaches. This trick is rather old and had already been used in previous gaming consoles like the Nintendo 64: Use a tiny non-replaceable startup ROM, and put the bulk of the firmware data (i.e. the Windows kernel) into flash memory. The "internal" ROM checks whether the contents of the flash memory are authentic, and if yes, it passes execution to it.
This way, there will be another link in the chain of trust, but the ROM code can be trusted (if it is non-replaceable), and if, in addition, it is non-accessible, an attacker may not even have a clue how verification works.
==== Location of the ROM ====
But where can this ROM be put? It cannot be a separate chip, as it would be replaceable. It would have to be included into another chip. The CPU would be ideal, as the ROM contents would not travel over any visible bus, but then it would be impossible to use cheap off-the-shelf Celerons. Including it in any other chip would make it non-replaceable, but data would travel over a bus. It seems to be a good compromise to store the ROM data in the Southbridge ("MCPX"), as it is connected via the ''very'' fast HyperTransport bus, so it is very hard to sniff. A former Microsoft employee confirmed that the developers tought that nobody was able to sniff HyperTransport.
==== Verification Algorithm ====
This secret ROM stored in the Southbridge must verify the Windows kernel in the external flash memory before executing it. One idea would be to checksum (hash) the flash contents using an algorithm like MD5 or SHA-1, but this would mean that the hash of the kernel has to be stored in the secret ROM as well, which would make it imposible to ship updated versions of the kernel in future Xboxes without also updating the ROM contents - which would be very expensive.
A digital signature algorithm like RSA would be better: It would be possible to update the kernel without changing the ROM, but an RSA implementation takes up a lot of space, and embedded ROM in the Southbridge is expensive. It would be ideal if the algorithm fit in only 512 bytes, which is impossible for RSA.
==== Second Bootloader ("2bl") ====
A solution for this problem is again to introduce another link in the chain of trust: The ROM only hashes a small loader ("2bl", "second bootloader") in flash memory, which can never be changed. It is then the job of this loader to verify the rest of flash, and as the second loader can be any size, there are no restrictions.
So the final chain of trust looks like this: The CPU boots from the secret ROM embedded into the Southbridge, which cannot be changed. The secret ROM verifies the second bootloader in flash memory using a hash algorithm, and if it is authentic, runs it. The second bootloader checks the kernel, and if authentic, runs it.
Now the second bootloader and the Windows kernel would be stored in flash memory in plain text, which is a bad idea: An attacker can immediately see how the second bootloader verifies the integrity of the kernel, and even analyze the complex kernel for possible exploits. Encrypting all the flash contents will not solve possible vulnerability problems, but it will buy us time until the decryption of the flash contents is understood by hackers.
The decryption key would have to be stored in the secret ROM, and the 2bl verification code would also have to decrypt the flash contents into RAM while reading it.
==== RAM Initialization ====
Decrypting flash memory contents into RAM is a challenge if we are living inside the first few hundred bytes of code after the machine has started up: At this point, RAM might not be stable yet. The reason for this is that Microsoft bought cheap RAM chips; they just took everything Samsung could give them to lower the price, even faulty ones, i.e. chips that will be unstable when clocked at the highest frequencies specified.
The Xbox is supposed to find out the highest clock speed the RAM chips can go and run them at this frequency - this is the reason why some games don't run as smoothly on some Xboxes as on others. So the startup code in the secret ROM has to do a memory test, and if it fails, clock down the RAM, do another memory test, and if it fails again, clock down again, and so on, until the test succeeds or the RAM cannot be clocked down any further.
The problem now is that it is impossible to do complex RAM initialization, data decryption and hashing in 512 bytes. This code would need at least 2 KB, which would be significantly more expensive, if embedded into the Southbridge.
We could put the RAM initialization code, which is the biggest part of what the startup code needs to do, into flash memory, and call it from the secret ROM, but this would kill security, as an attacker could easily see the unencrypted code in flash, modify it and have the control of the machine right at the startup.
The developers at Microsoft had a brilliant idea how to solve this problem: They designed an interpreter for a virtual machine that can read and write memory, access the PCI config space, do "AND" and "OR" calculations, jump conditionally etc. The instruction code has one byte instructions and two 32 bit operands, it can use immediate values as well as an accumulator.
The interpreter for the virtual machine is stored in the secret ROM, and its code ("xcodes") is stored in flash memory. This code does the memory initialization (plus extra hardware initialization, which would not be necessary). This program cannot be encrypted, as there is again no space for it in the secret ROM, but as the virtual machine is unknown to the hacker, encryption should not be that important. It also cannot be hashed, as this would make it impossible to change the xcodes for later revisions of the Xbox hardware. Therefore we have to make sure that, if the hacker knows how the virtual machine works, it is impossible to do anything malicious with the xcodes.
==== The Virtual Machine ====
There are several ways an attacker could exploit the xcodes, which are by definition untrusted, because they reside in "external" flash memory. Microsoft included some code to make sure there were no possible exploits.
===== Read the Secret ROM =====
The xcodes can read memory and access I/O ports. This way an attacker could place xcodes into flash memory that dump the secret ROM, which must be mapped into the address space somewhere, to a slow bus, like the LPC or the I2C bus, or write it into CMOS or the EEPROM, so that we can read it later.
The xcode interpreter has to make sure that the xcodes cannot read the secret ROM, which is located at the upper 512 bytes of the address space. The simplest way to accomplish this is to mask the address when reading from memory:
<pre> and ebx, 0FFFFFFFh ; clear upper 4 bits
mov edi, [ebx] ; read from memory location op1 into di
jmp next_instruction
</pre>
This way, the xcodes can only ready from the lower 256 MB, which is no problem, as there are only 64 MB of RAM, and memory mapped I/O can be mapped into this region using PCI config cycles.
===== Turn off the Secret ROM =====
The xcodes may also not turn off the secret ROM, or else the CPU, while executing the xcode interpreter, would "fall down" from the secret ROM into the underlying flash ROM, which is also mapped to the top end of the address space. The turn off functionality is important: As soon as the second bootloader takes over, the secret ROM has to be turned off, or else an attack against a game, which makes it possible to run arbitrary code, could dump the secret ROM, making additional attacks against it possible.
The secret ROM can be turned off by writing a value with bit #1 set to the PCI config space of device 0:1:0, register 0x80. So the xcode interpreter always clears this bit in case there is a write to this PCI config space register:
<pre> cmp ebx, 80000880h ; ISA Bridge, MCPX disable?
jnz short not_mcpx_disable ; no
and ecx, not 2 ; clear bit 1
not_mcpx_disable:
mov eax, ebx
mov dx, 0CF8h
out dx, eax ; PCI configuration address
add dl, 4
mov eax, ecx
out dx, eax ; PCI configuration data
jmp short next_instruction
</pre>
==== Encryption and Hashing ====
For the decryption of the second bootloader, Microsoft chose the RC4 algorithm, which is pretty small, as it fits into 150 bytes. It uses a 16 bytes key, which is also stored in the secret ROM. Microsoft's engineers also chose to use RC4 as a hash, so that no additional algorithm had to be implemented for this. Differential decryption algorithms feed the decrypted data into the generator of the decryption key stream, so if the encrypted code is changed at one byte, all the following bytes will decrypted incorrectly, up to the last bytes. This way, it is possible to only test the last few bytes. If they have been decrypted correctly, then the encrypted code has been authentic. (If you are getting suspicious now - read on!)
In practice, the secret ROM in the Xbox compares the last decrypted 32 bit value with the constant of 0x7854794A. If it is incorrect, the Xbox has to panic.
==== Panic Code ====
So far, the code in the secret ROM does this:
* Enter protected mode, and set up segment descriptors, so that we have access to the complete flat 32 bit address space.
* Interpret the xcodes.
* Decrypt and hash the second bootloader, store it in RAM
* If the hash is correct, jump to the decrypted second bootloader in RAM, else panic.
There is another possible attack here: A hacker could deliberately make the hash fail. If the Xbox then halts and flashes its lights to indicate an error, the attacker can attach a device to dump the secret ROM after the CPU has shut down and the bus is idle. Although HyperTransport is fast, it would be a lot easier to attach a device that actively requests the data from the Southbridge than sniffing it when the CPU requests it.
One solution would be not to halt but to shut down the Xbox in case of a problem. The support chips have this functionality. But incorrect flash memory does not necessarily mean that there has been an attack, it could also be a malfunction, and the machine should use the LED to blink an error code.
So we should leave the Xbox running, but just turn off the secret ROM, so that it cannot be read any more. But there is a problem: We have to do this inside the secret ROM. So if we disable the ROM, we cannot have the "hlt" instruction after that, because the CPU will "fall down" into flash memory - where an attacker could put code. On the other hand, if we halt the CPU, we cannot turn off the secret ROM afterwards.
We cannot put the disable and halt code into RAM and jump there, because RAM might not be stable, and might even have been tampered with by an attacker (e.g. by turning off the memory controller using the xcodes) so that the secret ROM does not get turned off. We cannot put the disable and halt code into flash either, as again, an attacker could simply put arbitrary code to circumvent the complete system there.
The Microsoft engineers used yet another brilliant trick: They jump to the very end of the address space (which is covered by the secret ROM) and turn off the secret ROM in the very last instruction inside the address space. This is a simplified version of the idea:
<pre>FFFFFFF1 mov eax, 80000880h
FFFFFFF6 mov dx, 0CF8h
FFFFFFF9 out dx, eax
FFFFFFFB add dl, 4
FFFFFFFC mov al, 2
FFFFFFFE out dx, al
</pre>
After the last instruction, the program counter (EIP) will overflow to 00000000, which, according to the CPU documentation, causes an exception, and as there is no exception handler set up, it causes a double fault, which will effectively halt the machine.
=== The Hacker Perspective ===
So much for the theory. The design looked pretty good, although the trade off between cost and security as it has been decided, might give some people headaches. Let us now have a look at the Xbox from the hackers' point of view.
It has been well known that the Xbox chipset is a modified version of nVidia's nForce chipset, so we knew that it was standard IDE, USB, there was an internal PCI bus and so on. Two hackers from Great Britain, Luke and Andy, checked the hard disk and found out that it uses a custom partitioning scheme, a FAT-like filesystem, that there is no kernel on the hard disk, but there is the Xbox Dashboard on the fourth partition, the main program that gets executed if there is no game in the DVD drive, which allows changing settings, playing audio CDs and managing savegames.
==== Extracting the Secret ROM ====
Andrew "bunnie" Huang, then a PhD student at the MIT, disassembled his Xbox, saw the flash memory, de-soldered it, extracted the contents, put it on his website and got a phone call from one of Microsoft's lawyers.
The flash memory image was obviously encrypted, but there was x86 binary code in the upper 512 bytes! Obviously, there should be no code in the upper 512 bytes, as this gets overridden by the secret ROM, which contains the actual machine setup and flash decryption code.
Bunnie found out that this code was an interpreter for tables in flash memory, plus a decryption function that looked like RC4. He rewrote the crypto code in C and tried it on the data - but the resulting data was random, obviously something was wrong. The interpreter didn't make much sense either. The code used opcodes that were unknown to the interpreter.
In order to find out what was wrong, bunnie rewrote the top of flash with his own code, and later even completely erased the upper 512 bytes, but the Xbox still booted! So it was obvious to him that this region gets overridden by some internal code. As it turned out later, the code in the upper 512 bytes of the flash image was a very old version of the secret ROM code, which had been unintentionally linked to the image by the build tools. It seems like nobody had looked at the resulting image at the end, before they shipped the consoles. This mistake was very close to a fatal one, and Microsoft was lucky that they didn't link the actual version of the secret ROM.
But it didn't make that much of a difference, as bunnie sniffed the busses, and eventually dumped the complete secret ROM, including the RC4 key from HyperTransport, using a custom built sniffer - after all, he was working on his PhD degree about high performance computing, and he could use the excellent resources of the MIT hardware lab.
When he published his findings, other people found out quite quickly that the validity check did nothing at all: The combination of decryption and hash with a cypher that feeds back the decrypted data into the key stream is a good idea, but unfortunately, RC4 is no such cypher. It decrypts bytes independently, so if one byte is wrong, all the following bytes will still be decrypted correctly. So checking the last four bytes has no effect: There is no hash.
It turned out that the cypher used in the old version of the secret ROM as found in flash memory used the RC5 cypher. In contrast to RC4, RC5 does feed the decrypted stream back into the key stream. So they seem to have replaced RC5 with RC4 without understanding that RC4 cannot be used as a hash. Bunnie's theory why they abandoned RC5 is that RC5 was still a work in progress, and that Microsoft wasn't supposed to have it, so they went for the closest relative - RC4.
==== Modchips ====
Now that the encryption key was known and there was effectively no hash over the second bootloader, it was possible to patch this code: People added code to the second bootloader to patch the kernel after decryption (and decompression) to accept executables even if on the wrong media (DVD-R instead of original) or if the RSA signature of the executables was broken (i.e. unsigned homebrew software).
Modchips appeared: Some of them had a complete replacement flash memory chip on them, others only patches a few bytes and passed most reads down to the original flash chip. All these modchips had to be soldered in parallel to the original flash chip, using 31 wires.
Now other people found out that, if the flash chip is completely missing, the Xbox wants to read from a (non-existant) ROM chip connected to the (serial) LPC bus. This is of course because of the manufacturing process: As it has been explained before, the flash chip gets programmed in-system, the first time they are turned on, using an external LPC ROM chip. Modchip makers soon developed chips that only needed 9 wires and connected to the LPC bus. It was enough to ground the data line D0 to make the Xbox think that flash memory is empty.
Lots of these "cheapermods" appeared, as they only consisted of a single serial flash memory chip. They could be installed within minutes, especially after some companies started shipping chips that used pogo pins, so that no soldering was required.
Some groups wrote applications like boot menus that made it possible to copy games to hard disk and run them from there. Patched Xbox kernels appeared that supported bigger hard disks. Making the Xbox run copies from DVD-R or hard disk as well as homebrew applications written with the official Xbox SDK was now easy.
==== Backdoors ====
The Xbox Linux Project was working on two ways to start Linux: Either run the Linux kernel from a CD/DVD as if it was a game, or run it directly from flash memory, or from HD/DVD using a Linux bootloader in flash memory, so that the Xbox behaved like a PC. For the latter, Xbox Linux was working on a replacement firmware.
It would have been no problem to write a replacement firmware that took over execution instead of the second bootloader, as it was possible to completely replace this second bootloader, as well as encrypt it, using the well-known key from the secret ROM. But the firmware developers felt very uncomfortable with the idea of using this secret key in their GPL code. Other hackers felt the same, and thus were looking for bugs and backdoors in the secret ROM code, in order to find a way to be able to implement a replacement firmware without having to deal with encryption.
===== The Visor Backdoor =====
A hacker named visor, who never revealed his real name, wondered whether the rollover to 00000000 in case of an incorrect 2bl "hash" really caused a double fault and halted the CPU. He used the xcodes to write the assembly instruction for "jmp 0xFFFF0000" to the memory location 00000000 in RAM and changed the last four bytes in 2bl, in order to make the secret ROM run the panic code. The Xbox happily continued executing code at 00000000 and took the jump into flash.
When appending these instructions to the existing xcodes, he could make sure that RAM had been properly initialized and was thus stable. So there was no need to encrypt the Xbox Linux bootloader firmware with the secret key any more. It was enough to add the memory write instruction to the end of the xcodes and make sure that 2bl decryption fails - which will automatically happen, if the firmware replacement does not contain the 2bl code.
Now why is there no double fault? Hackers from the Xbox Linux team checked with AMD employees and they explained that AMD CPUs ''do'' throw an exception in case of EIP overflows, but Intel CPUs don't.
The reason that Intel CPUs don't is because of... 1970s stuff. Execution on x86 CPUs starts at the top of the address space (minus 16 bytes), but some computer makers wanted to have their ROM at the bottom of the address space, i.e. at 0, so Intel implemented the instruction with the encoding 0xFFFF, which is what you get when reading from addresses not connected to any chip, as a No-Operation ("nop") and made the CPU throw no exception in case of the address space wraparound. This way, the CPU would "nop" its way up to the top, and finally execute the code at 0.
AMD did not implement this behavior, as it had not been necessary any more by the time AMD entered the x86 market with it own designs, and because they felt that this behavior was a security risk and fixing it would not mean a significant incompatibility.
But why did Microsoft do it wrong? This can be explained with the history of the Xbox: AMD offered to design and manufacture both the CPU and the motherboard (including the chipset), and nVidia was contracted to contribute the graphics hardware. The first developer systems, even outside of Microsoft, were Athlon-based, but then Intel came in and offered their chips for less money, as well as the complementary redesign of the existing AMD chipset to work with their CPU. Consequently, nVidia licensed the AMD chipset so that the AMD name vanished. This also means, that nVidia nForce chipset is essentially AMD technology, closely related to the AMD-760 chipset.
So when Microsoft switched from AMD to Intel, they apparently forgot to test their security code again with the new hardware, or to read the Intel datasheets.
===== The MIST Hack =====
Soon after the visor hack, another vulnerability was found in the secret ROM code, attacking the code that checks whether an xcode wants to disable the secret ROM. Let us look at this code again:
<pre> cmp ebx, 80000880h ; ISA Bridge, MCPX disable?
jnz short not_mcpx_disable ; no
and ecx, not 2 ; clear bit 1
not_mcpx_disable:
mov eax, ebx
mov dx, 0CF8h
out dx, eax ; PCI configuration address
add dl, 4
mov eax, ecx
out dx, eax ; PCI configuration data
jmp short next_instruction
</pre>
The PCI config address is stored in the EBX register in the beginning. This address has to be sent to I/O port 0x0CF8, and the 32 bit data has to be sent to I/O port 0x0CFC. The address is encoded like this:
<pre>0-7 reg
8-10 func
11-15 device
16-23 bus
24-30 reserved
31 always 1
</pre>
The attack is pretty obvoius: there are seven reserved bits in the address, and the code tests for a single exact value. What happens if we write to an alias of the same address, by using an address with only some of the bits 24 to 30 changed? While the instruction
<pre>POKEPCI(80000880h, 2)
</pre>
will be caught, the instruction
<pre>POKEPCI(C0000880h, 2)
</pre>
will not be caught - and works just as well, because the PCI bus controller just ignores the unused bits.
This instruction disables the secret ROM, that is, the interpreter disables itself when sending the value to port 0x0CFC, and the CPU falls down to flash memory. We can put a "landing zone" into flash, by filling all of the top 512 bytes with "nop" instructions, and putting a jump to the beginning of flash into the last instruction, so that we do not have to care where exactly the CPU lands after falling down, and we are independent of possibly hard to reproduce caching effects.
It is hard to find a good reason for this bug other than carelessness. It might be attributed to not reading the documentation closely enough, as well as not looking at it from the perspective of a hacker well enough. After all, this code had been written with a specific attack in mind - but the code made hacking easier, by giving hackers a hint how to attack.
===== Another PCI Config Space Attack =====
There is a second sequence of xcode instructions that can disable the secret ROM just as well, which are not caught by the interpreter: The interpreter supports writing bytes to I/O ports, so it is possible to put together the code to disable the secret ROM using 8 bit I/O writes:
<pre>OUTB(0xcf8), 0x80
OUTB(0xcf9), 0x08
OUTB(0xcfa), 0x00
OUTB(0xcfb), 0x80
OUTB(0xcfc), 0x02
</pre>
This hack has been unreleased until now. It has been found not long after the MIST hack, but kept secret, in case Microsoft fixed the MIST bug. In the meantime, they have implemented a fix that makes all hacks impossible that are based on turning off the secret ROM. This will be described in detail later.
===== More Ideas =====
There have been more ideas, but few of them have been pursued, as long as other existing backdoor existed. One possible idea is to base a hack on caching...
== Startup Security, Take Two ==
When bunnie hacked the secret ROM, Microsoft reacted by updating the ROM. Thousands of already manufactured Southbridges were trashed, new ones made. The hacker community called these Xboxes "version 1.1" machines.
=== Microsoft's Perspective ===
Microsoft had now understood that RC4 cannot be used as a hash, so they implemented an additional hash algorithm, which was to be executed after decryption. As there were only few bytes left, the hash algorithm had to be tiny - so the "Tiny Encryption Algorithm" ("TEA") was used. Every encryption algorithm can be changed to be used as a hash, and TEA seemed to be a good choice, as it is really small. While they were at it, they also changed the RC4 key in the secret ROM, so that hackers would not be able to decrypt 2bl and the kernel without dumping the new secret ROM.
=== The Hacker Perspective ===
The extraction of the secret ROM was done by members of the Xbox Linux Project this time, only days after they got their hands on the new 1.1 boxes, and only two weeks after they first appeared.
==== The A20 Hack ====
To date, Microsoft does not know how the Xbox Linux Project did it. But since there will most probably be no future revisions of the Xbox, as the Xbox 360 has already taken over, we can release this now.
Let us start with some PC history. The 8086/8088, the first CPU in the x86 line, was supposed to be as closely compatible to the 8080, which was very successful on the CP/M market. The memory model therefore was similar to the 8080, which could access only 64 KB, by dividing memory into 64 KB blocks. Intel decided that the 8086/8088 could have a maximum of 1 MB of RAM, which would have meant 16 "segments" of 64 KB each. But instead of doing it this way, they decided to let the 64 KB segments overlap, and have 65536 of these segments, starting every 16 bytes.
An address was therefore specified by a segment and an offset. The segment would be multiplied by 16, and the offset would be added, to result in the effective address. As an example, 0x0040:0x006C would be 0x40*0x10+0x6C=0x46C. An interesting side effect of this method is that it is possible to have addresses above 1 MB: The segment 0xFFFF starts at the effective address 0xFFFF0, so it should only contain 16 bytes instead of 64 KB. So the address 0xFFFF:0x0010 would be at 1 MB, and 0xFFFF:0xFFFF would be at 1 MB plus roughly 64 KB.
The 8086/8088 could not address more than 1 MB, because it only had 20 address lines, so addresses above 0xFFFF:0x000F were wrapped around to the lower 64 KB. But this behavior was different on the 286, which had 24 address lines: It was actually possible to access roughly 64 KB more using this trick, which was later abused by MS-DOS as "high memory".
Unfortunately there were some 8086/8088 application that broke, because they required the wraparound for some reason. It wasn't Intel who found that out, but IBM, when they designed the IBM AT, and it was too late to modify the behavior of the 286, so they fixed it themselves, by introducing the A20 Gate ("A20#"). An unused I/O pin in the keyboard controller was attached to the 20th address line, so that software could pull down address line 20 to 0, thus emulating the 8086/8088 behaviour.
This feature was later moved into the CPUs, and all Pentiums and Athlons have it - and so does the Xbox. If A20# is triggered, bit 20 of all addresses will be 0. So, for example, an address of 1 MB will be 0 MB, and if the CPU wants to access the top of RAM, it will actually access memory that is 1 MB lower than the top.
Keeping this in mind, the attack on the Xbox is pretty straightforward: If we connect the CPU's A20# pin to GND, the Xbox will not start from FFFFFFF0, but from FFEFFFF0 - this is not covered by the secret ROM, but is ordinary flash memory, because flash is mirrored over the upper 16 MB. So by only connecting a single pin, the secret ROM is completely bypassed.
What is cool about this, is that the secret ROM is still turned on. So we could easily dump the secret ROM trough one of the low speed busses (we used the I2C bus), by placing a small dump application into flash memory.
==== The TEA Hash ====
After reading Bruce Schneier's book on crypto, we learned that TEA was a really bad choice as a hash. The book says that TEA must never be used as a hash, because it is insecure if used this way. If you flip both bit 16 and 31 of a 32 bit word, the hash will be the same. We could easily patch a jump in the second bootloader so that it would not be recognized. This modified jump lead us directly into flash memory.
But why did they make this mistake? Obviously the designers knew nothing about crypto - again! - and just added code without understanding it and without even reading the most basic books on the topic. A possible explanation why they chose TEA would be that they might have searched the internet for a "tiny" encryption algorithm - and got TEA.
==== Visor Backdoor and MIST Hack ====
The Visor Backdoor was still present, so again, for the replacement Linux firmware, the Xbox Linux developers did not have to exploit the crypto code, but could simply use this backdoor. Microsoft obviously released the updated secret ROM much too quickly, just after bunnie dumped it and people saw that RC4 was no hash, but before the visor backdoor had been discovered.
The MIST hack had been discovered after the visor bug - but it no longer worked on the Xbox 1.1. Not because they fixed the comparison - they didn't -, but because they changed the address logic: If you accessed the upper 512 bytes of the address space, and the secret ROM was turned off, the Xbox would just crash, thus making all "fall down" hacks impossible. This way they closed both possible attacks, writing to an alias, and using 5 OUTB instructions.
Microsoft obviously discovered the turnoff vulnerability themselves, closing at least one backdoor, but keeping another one open, and not really closing a second one. It was too expensive to trash the 1.1 Southbridge chips again for yet another update, so Microsoft still uses these chips in today's Xboxes.
=== Today ===
In later revisions of the Xbox, Microsoft removed some pins of the LPC bus, making modchip design harder, but they could not remove the LPC bus altogether, because they needed it during the manufacturing process.
In the latest revision of the Xbox hardware (v1.6), they finally switched from flash memory to real ROM - and even integrated the ROM with the video encoder. The LPC bus is not needed for manufacturing any more, as the ROM chips are already preprogrammed. So now it is impossible to replace or to overwrite the kernel image, and because of the missing LPC bus, it also seems impossible to attach a ROM override.
But modchips are still possible. The obvious LPC pins are gone now, but the bus is still there. If you find the LPC pins on the board, you can attach a ROM override just as before, the modchips are only a bit harder to install. This is because the Southbridge still has the LPC override functionality, since they did not make a new revision of it - as so often, obviously for monetary reasons.
== Xbox Kernel Security ==
Let us have a look at the chain of trust again:
* The CPU starts execution of code stored in the secret ROM.
* The secret ROM decrypts and verifies the second bootloader.
* The second bootloader decrypts and verifies the Windows kernel.
* The Windows kernel checks the allowed media bits and the RSA signature of the game.
This last link is a complete software thing, so all the attacks have been pretty much standard. Some people tried to brute force the RSA key used for the game signature - no joke! But what is more likely, successfully brute forcing RSA 2048, or finding a bug in Microsoft's security code? After the experience with the first links of the chain of trust, the Xbox Linux Project focused on finding bugs in the software.
We found no bug in the RSA implementation. It is taken straight out of Windows 2000 and looks pretty good. But there are always implicit additional links in the chain of trust: All code reads data, and data can cause security risks if handled incorrectly.
=== Game Exploits ===
What data do games load? Graphics data, audio data, video data... - but we cannot alter them, because it is not easily possible to create authentic Xbox DVDs, and the Xbox won't boot originals from DVD-R etc.
But most games can load savegames, and these can easily be changed: The Xbox memory units are more or less standard USB storage devices ("USB sticks"), so it is possible to use most USB sticks with the Xbox, and just store hacked savegames on them.
Plenty of Xbox games had buffer vulnerabilities in their savegame handlers. It was often as easy as extending the length of strings like the name of the player, and the game would overwrite its stack with our data and eventually jump to the code we embedded in the savegame.
The procedure for the user was then to simply copy a hacked savegame from a USB stick onto the Xbox hard disk, run the game and load the savegame. But after a buffer exploit, we would normally only be in user mode - not on the Xbox, as all Xbox games run in kernel mode. The reason for this is probably a slight speed advantage, or, less likely, a simpler environment for the game, but Microsoft tried to make the environment as similar to the Windows/DirectX environment as possible, so user mode would have actually made the environment "simpler" for many Windows/DirectX developers.
Now that we have full control of the machine, we can overwrite the flash memory chip. It is write protected by default, but disabling the write protection is as easy as soldering a single bridge on the motherboard. After all, this bridge has to be closed temporarily during manufacturing when programming flash memory for the first time. Using this hack, it is possible, only with a USB stick, one of several games (007 Agent Under Fire, MechAssault, Splinter Cell, ...) and a soldering iron, to permanently modify the Xbox, just as if a modchip was installed. Because early Xboxes had a 1 MB flash chip, although only 256 KB had been used, it was even possible to install several ROM images in flash and attach a switch.
But the Xbox Linux Project did not blindly release this hack. The first savegame proof of concept exploit had been finished in January 2003. After that, a lot of energy was invested in finding out a way to free the Xbox for homebrew development and Linux, but not allowing game copies. Microsoft was contacted, but without any success. They just ignored the problem.
Finally in July, the hack was released, with heavy obfuscation, and lockout code for non-Linux use. It was obvious that this would only slow down the "hacking of the hack", so eventually, people would be able to use this vulnerability for copied games, but since Microsoft showed no interest in finding a solution, there was no other option than full disclosure. The suggestion of the Xbox Linux Project would have been to work together with Microsoft to silently close the security holes and, in return, work on a method to let homebrew and Linux run on the Xbox.
=== Dashboard Exploits ===
The problem with the savegame hack was that, if you didn't want to overwrite the flash memory chip, you had to insert the game and load the savegame every time you wanted to run unsigned code. But having full control of the machine using the savegame exploit also meant we could access the hard disk without opening the Xbox. This way, it became interesting to closely examine the hard disk contents for vulnerabilities.
The Dashboard is the main program on hard disk, executed every time the Xbox is started without a game in the DVD drive. The dashboard may even be the very reason the Xbox ships with a hard disk: While the settings menu and savegame management on the Nintendo GameCube fit well into 2 MB of ROM, the Xbox Dashboard, which is roughly comparable in its functionality, occupies more than 100 MB. So the original idea why to include a hard disk might have been initiated by the inability to compress the Dashboard into typical ROM sizes - and they might have decided to make the best out of it, and find additional uses for the hard disk.
The dashboard loads its data files, like audio and graphics, from hard disk. With the savegame exploit, we can now alter the hard disk contents, even without opening the Xbox. Of course the dashboard executable is signed and can therefore not be altered, and all data files are hashed, with the hashes stored inside the dashboard executable. Well, all files, except for two: the font files.
Consequently, there was an integer vulnerability in the font handling routines, so that we could run our own code by replacing the font files. Combined with the savegame exploit, it was as easy as transferring the savegame and loading it, which would run a script that modifies the fonts.
Now every time the Xbox is turned on, the Dashboard crashes because of the faulty fonts and runs our code embedded in these files. Our code reloads the Dashboard with the original fonts, hacks it, and runs it. Hacking the Dashboard meant two things: Modifying one menu entry to read "XBOX LINUX" instead of "XBOX LIVE" and running the Linux bootloader instead of the Xbox Live setup executable, and modifying the kernel to accept both applications signed with Microsoft's RSA key as well as those signed with our RSA key, from hard disk and from CD/DVD. We called this "MechInstaller", as it was based on the "MechAssault" savegame exploit.
Only accepting code either signed by the original key or by our key, keeping our key secret, and using heavy obfuscation again, meant that nobody could easily abuse this solution for copied games.
This hack shows several things: Hackers have phantasy, the combination of flaws can lead to fully compromising the security system, powerful privileged code should be bug-free and security code should really catch ''all'' cases.
Oh, and there is another vulnerability, an integer vulnerability in the audio player code. The attack was developed independently of the font attack, but was inferior because it would have required the user to enter the audio player every time to run Linux.
==== Microsoft's Fixes ====
The history of Microsoft's reactions to the font vulnerability is the perfect lesson of how to do it wrong.
# After MechInstaller had been released, Microsoft fixed the buffer vulnerability in the Dashboard and distributed this new version over the Xbox Live network and shipped it with new Xboxes.
# For the hackers, this was no major problem: It was possible to downgrade the Dashboard of a new Xbox to the vulnerable version. Just run Linux using a savegame exploit, and "dd" the old image. Some people felt downgrading on new Xboxes was not piracy, because after all, Microsoft upgraded Xbox Live users' hard disks to the new version without asking.
# As the next step, Microsoft blacklisted the old Dashboard in the new kernel. It was impossible to just "dd" an old Dashboard image onto newer Xboxes.
# Still no major problem for hackers: The second executable on the hard disk, "xonlinedash", which is used for Xbox Live configuration, had the same bug, so it was possible to copy the old "xonlinedash" and to rename it to "xboxdash" to make it crash because of the faulty fonts.
# Microsoft consequently blacklisted the vulnerable version of "xonlinedash".
# Again, no major problem for hackers: All Xbox Live games come with the "dashupdate" application, which adds Xbox Live functionality to the Dashboard for the first Xboxes which came without it. This update application has the same font bug, and it can be run from hard disk. So it is possible to copy the file from any Xbox Live game DVD, rename it to "xboxdash" and let it crash.
# Microsoft could not blacklist this one. Xbox Live enabled games run the update application every time they start, making sure the Xbox has the Xbox Live functionality. Blacklisting "dashupdate" would break these games.
We won.
== The Mistakes that Have Been Made ==
Microsoft obviously made a lot of mistakes. But it would be too easy to just attribute all these to stupid engineers. There have been good (and different) reasons for most of these mistakes, and one can learn a lot from them.
There are 17 kinds of mistakes they made, several of which have been made more than once. I will group the 17 mistake types into three categories: Design mistakes, implementation mistakes and bad policy decisions.
=== Design ===
==== #1: Security vs. Money ====
Be very careful with tradeoffs between security and money. There are rarely sensible compromises. Keep in mind that the very reason for the security system is to make more money, or to prevent money losses. Security systems cannot be "a little better" or "a little worse". Either they are effective - or they are not. By saving money on the security system, you may easily make it not effective at all, not only wasting the money spent on the security system, but also making losses because it is not effective.
Microsoft made many compromises.
* In-system programming of flash memory is cheaper than preprogramming, but an attacker can also override the firmware with an LPC ROM.
* Buying all of Samsung's RAM chips is cheaper than only buying those within the specs, but it made RAM initialization more complex, using up space that could otherwise be used for better security code.
* They chose to put the secret ROM into the Southbridge instead of the CPU, because the Southbridge was a custom component anyway and having a custom CPU would have been a lot more expensive, but keys travel over a visible bus if the secret ROM is outside the CPU.
* They saved money choosing not to update the Southbridge a second time, which would have fixed the TEA hash and removed the visor backdoor. This would have made modchips virtually impossible.
==== #2: Security vs. Speed ====
Don't trade security for speed. Although it may be true that the product in question must be as fast as possible in order to be able to compete with similar products on the market, remember that in IT, computers aren't slower or faster by some percentage - but by factors! Besides, you might lose more money because of a security system that does not work than because of a product that is 10 percent slower than it could be.
Most probably for added speed (one address space, no TLB misses), Microsoft chose to run all code in kernel mode, even games that interacted with untrusted data that came from the outside. This made it possible to have complete control of the machine once a game crashed because of a prepared savegame, including complete control of the hard disk and the possibility of booting another operating system.
==== #3: Combinations of Weaknesses ====
Be aware of the fact that a combination of security flaws can lead to a successful attack. Don't think that a possible security hole (or "only" a security risk) cannot be exploited because there are so many barriers in front of it. Attackers might break all the other barriers that block the vulnerability, and fixing that one hole would have stopped them.
MechInstaller is a great example for that. It was only possible because of the combination of several security weaknesses:
* The boot process was vulnerable, so we could use a modified kernel to analyze games.
* Some games are not careful enough with savegames, so that we can run our own code.
* Games run in kernel mode, so we have full control of the hardware.
* The Dashboard does not verify the integrity of the font files.
* The Dashboard has a vulnerability in the font code.
If any of these weaknesses had not been there, then MechInstaller would not have been possible. Also note that hackers have enough fantasy to find out these combinations.
==== #4: Hackers' Resources ====
Understand that hackers may have excellent resources. Hobbyists may use resources from work or from university, and professional attackers can also be very well-equipped. It is a big mistake to underestimate them. So never think you are safe because it would be too much work or too expensive to exploit a weakness. If it is a weakness, it will eventually be exploited. Also understand that hackers may have excellent human resources. Not only in number, but also in qualifications.
Microsoft put the secret ROM into the Southbridge instead of the CPU, which meant that the secret key would travel over a visible bus. This is the very fast HyperTransport bus, which, at that time, could not be sniffed using logic analyzers any mortal could afford. But with help of the resources of the MIT and using all of his expertise, bunnie could build his own hardware that could sniff the bus.
==== #5: Barriers and Obstacles ====
Don't make anything "harder for hackers". Instead make it "impossible for hackers", or, if it cannot be made impossible, don't care about it. Because of the potential great number and excellent qualifications of hackers, no obstacle will have any effect or slow down hacking significantly. But instead, in security design, you might make mistake #3, because you think you are safe as there are so many obstacles in the hackers' way. Use the resources you would invest into building obstacles into building or strengthening barriers instead - possibly at a different location.
Microsoft built obstacles into the system at many different locations.
* Savegames will only be accepted if they are signed, but the private key is of course stored inside the game, so this is no barrier. Instead, they should have made sure the games contain no buffer vulnerabilities in their savegame handlers.
* The hard disk is secured with an ATA password, different for every Xbox and stored on an EEPROM inside the Xbox, but an attacker can just "hotswap" an unlocked hard disk from a running Xbox to a running PC. Instead, they should have put that energy into verifying whether the Dashboard really hashes all data it reads from the hard disk.
* The 512 bytes of security startup code were embedded in a custom chip to make it hard to sniff. Instead, they should have made sure that there are no bugs in that security code.
==== #6: Hacker Groups ====
Don't use one security system for different purposes, or else attackers with very different goals will jointly attack it, being a lot more effective. Instead, try to find out who your enemies really are and what they want, and design your security system so that every group gets as much of what they want so that it does not hurt you.
There were three possible goals for Xbox hackers: Run Linux and use it as a computer, run homebrew software like media players and emulators, and run copies. Although there were some overlaps between Linux and homebrew people, as well as between homebrew people and people interested in copies, these were essentially three very different groups. Because they were all locked out by the same protection, they worked together, either explicitly, or implicitly, by using the results of each other. No Linux hackers ever attacked the Playstation. When you are fair, people don't fight you.
==== #7: Security by Obscurity ====
Security by obscurity does not work. Well-proven algorithms like SHA-1 and RSA work (of course given your implementation is well-proven as well).
Microsoft hid the secret ROM, the Windows kernel, the game DVD contents (no way to read them on a standard DVD drive) and the hard disk contents using different methods. None had any effect. Also see #5.
==== #8: Fixes ====
When your security system has been broken, don't release quick fixes, for two reasons: Your fixes may be flawed and may not actually correct the problem, and even worse holes may be found not much later, which you must fix again - and ship yet another version. Instead, every time a security vulnerability is found, audit your complete security system and search for similar bugs, as well as other bugs in the same part of the system, based on the knowledge you gained from the successful hack.
Microsoft failed to correct the hash problem in the second version of the secret ROM, and didn't fix the visor vulnerability, which was found just weeks later. After trashing thousands of already manufactured v1.0 Southbridge chips, which was very expensive, they decided not to update the Southbridge a second time. Another example is the dashboard odyssey: Instead of blacklisting the vulnerable executables at a time, they released three updates, none of which was effective.
=== Implementation ===
==== #9: Data Sheets ====
Know everything about the components you use. Do read data sheets. Be very careful with components that have legacy functionality.
Microsoft did not notice the A20# legacy functionality as a security risk. It seems that they did not completely analyze the functionality of the Pentium III Celeron, or else they should have noticed. They also apparently did not read the Pentium programmers' manual, or else they would have noticed that Intel CPUs do not panic on a FFFFFFFF/00000000 wraparound.
==== #10: Literature ====
Read (at least!) standard literature. If you are dealing with cryptography, this means you have to read at last Schneier's "Applied Cryptography".
Microsoft's engineers did not know that TEA must not be used as a hash, and that RC4 does not feed the decrypted stream back into the key stream.
==== #11: Pros ====
Get experienced professionals to work on your security system, both on the design and the implementation. If it's a money issue, see #1.
Looking at mistakes #9 and #10, it seems very probable that at least some of Microsoft's engineers had no prior experience with cryptography or the design of a security system. We also know that people on an internship were working on Xbox security.
==== #12: Completeness ====
Check whether your security code catches all cases. If it does not, you did not only waste time implementing all of it, but you may also give hints to hackers: If there are many checks at one point of the code, it looks a lot like code that is relevant for security and an attacker can check whether all cases are caught.
Microsoft made this mistake twice: The xcode interpreter tests for the secret ROM turnoff code, and doesn't catch all cases. And the Dashboard hashes all files it is going to read, except for two. This gave us the ideas where to attack.
==== #13: Leftovers ====
Look at the final product from the perspective of a hacker. Hexdump and disassemble your final builds. There could be leftovers!
The Xbox flash memory image contained an old version of the secret ROM, giving us not only hints about the contents of the actual secret ROM, but also an insight into what Microsoft planned and why some mistakes have been made.
==== #14: Final Test ====
Test your security system when you have the final parts and with the final software components in place. Changing something may very well open holes somewhere else. When you change something, rethink the complete system, and check all assumptions that you made.
The visor hack was only possible because Microsoft failed to adapt their security system, designed for the AMD CPU, to the Intel CPU. The "hash" in the secret ROM had no effect because they changed RC5 to RC4 without thinking about the implications.
=== Policies ===
==== #15: Source ====
Keep your source safe. Find engineers you can trust.
The complete Xbox source code has leaked, including the kernel and libraries source. Groups interested in copies could easily modify it to support running games from hard disk, support for hard disks bigger than 137 GB, custom boot logos etc. This had been previously done by patching the binary.
==== #16: Many People ====
Have many good people have a look at both your design and your implementation. Keeping your source code safe means having engineers you can trust, and not letting none of your engineers see the source code. As stated at #7, your system should not rely on the source code being safe. Unless you did #7 completely wrong, a bug in the security system is typically a lot worse than a leak of the source code.
It seems a lot like very few people have actually seen the Xbox security code.
==== #17: Talk ====
Know your enemy - and talk to them. They are not terrorists that you are not supposed to negotiate with. Their intent is not to harm you but to reach their goals. Working on their goals on their own might harm you indirectly, because the hackers may not care about the same things as you do. Seek the contact to hackers, know what they are doing and have them inform you about a vulnerability before publishing it. Make them know your position and why they should respect it, but also respect their position. Offer them to loosen the security system for what they want in exchange for the non-disclosure of their findings.
Microsoft refused to talk about the savegame and font vulnerabilities. If we had been bad hackers, we could have released both of them as-is, immediately making it possible to run copies on Xboxes without the use of a modchip. Instead, we sought contact to Microsoft: We would have preferred to see a backdoor for Linux in the Xbox security system, instead of a solution based on our findings that would allow running copies. But as they refused to talk, we were forced to release the exploits, and they were lucky we heavily obfuscated our solutions so in order to slow down people interested in using it for copies.
== Conclusion ==
The security system of the Xbox has been a complete failure.
48c8b6323ae269a9d81980db711518670da1bc38
5625
5600
2017-05-31T10:01:08Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617003620/http://www.xbox-linux.org/wiki/17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System}}
by [https://web.archive.org/web/20100617003620/http://www.xbox-linux.org/wiki/User:Michael_Steil Michael Steil]
{| class="wikitable"
|-
|
This [https://web.archive.org/web/20100617003620/http://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf paper], dated 2005-10-25, has been submitted to the [https://web.archive.org/web/20100617003620/http://events.ccc.de/congress/2005/ 22nd Chaos Communication Congress] and has been on [https://web.archive.org/web/20100617003620/http://events.ccc.de/congress/2005/fahrplan/events/559.en.html December 29th 2005, 18:00], at the Berliner Congress Center, Berlin, Germany.
A '''recording''' of the presentation is available here: [https://web.archive.org/web/20100617003620/http://video.google.com/videoplay?docid=-749497642180741726 Google Video: Team Xbox-Linux at 22C3].
'''Another recording''' of a slightly updated talk is available here: [https://web.archive.org/web/20100617003620/http://video.google.com/videoplay?docid=-4356347903120410001 Google Video: Deconstructing The Xbox Security System]
|}
== Introduction ==
The Xbox is a gaming console, which has been introduced by Microsoft Corporation in late 2001 and competed with the Sony Playstation 2 and the Nintendo GameCube. Microsoft wanted to prevent the Xbox from being used with copied games, unofficial applications and alternative operating systems, and therefore designed and implemented a security system for this purpose.
This article is about the security system of the Xbox and the mistakes Microsoft made. It will not explain basic concepts like buffer exploits, and it will not explain how to construct an effective security system, but it will explain how ''not'' to do it: This article is about how easy it is to make terrible mistakes and how easily people seem to overestimate their skills. So this article is also about how to avoid the most common mistakes.
For every security concept, this article will first explain the design from Microsoft's perspective, and then describe the hackers' efforts to break the security. If the reader finds the mistakes in the design, this proves that Microsoft has weak developers. If, on the other hand, the reader doesn't find the mistakes, this proves that constructing a security system is indeed hard.
=== The Xbox Hardware ===
Because Microsoft had a very tight time frame for the development of the Xbox, they used off-the-shelf PC hardware and their Windows and DirectX technologies as the basis of the console. The Xbox consists of a Pentium III Celeron mobile 733 MHz CPU, 64 MB of RAM, a GeForce 3 MX with TV out, a 10 GB IDE hard disk, an IDE DVD drive, Fast Ethernet, as well as USB for the gamepads. It runs a simplified Windows 2000 kernel, and the games include adapted versions of Win32, libc and DirectX statically linked to them.
Although this sounds a lot more like a PC than, for example, a GameCube with its PowerPC processor, custom optical drive and custom gamepad connectors, it is important to point out that, from a hardware point of view, the Xbox shares ''all'' properties of a PC: It has LPC, PCI and AGP busses, it has IDE drives, it has a Northbridge and a Southbridge, and it includes all the legacy PC features such as the "PIC" interrupt controller, the "PIT" timer and the A20 gate. nVidia sold a slightly modified Southbridge and a Northbridge with another graphics core embedded for the PC market as the "nForce" chipset between 2001 and 2002.
=== Motivation for the Security System ===
The Xbox being a PC, it should be trivial to install Linux on it in order to have a cheap and, for that time, powerful PC. Even today, a small and silent 733 MHz PC with TV connectivity for 149 USD/EUR is still attractive. But this is not the only thing Microsoft wanted to prevent. There are three uses that should not have been possible:
* '''Linux''': The hardware is subsidized and money is gained with the games, therefore people should not be able to buy an Xbox without the intent to buy any games. Microsoft apparently feels that allowing the Xbox to be used as a (Linux) computer would be too expensive for them.
* '''Homebrew/Unlicensed''': Microsoft wants the software monopoly on the Xbox platform. Nobody should be able to publish unlicensed software, because Microsoft wants to gain money with the games to amortize the hardware losses, and because they do not want anyone to release non-Internet Explorer browsers and non-Windows Media Player multimedia software.
* '''Copies''': Obviously it is important to Microsoft that it is not possible to run copied games on the Xbox.
Microsoft decided to design a single security system that was supposed to make Linux, homebrew/unlicensed software and copies impossible. The idea to accomplish this was by simply locking out all software that is either not on the intended (original) medium or not by Microsoft.
On the one hand, this idea makes the security system easier and there are less possible points off attack. But on the other hand, 3 times more attackers have a single security system to hack: Although Open Source and Linux people, homebrew developers, game companies as well as crackers have little common interests, they could unite in this case and jointly hack the Xbox security system.
Of the three consoles of its generation, Xbox, Playstation 2 and GameCube, the Xbox is the one whose security system has been compromised first, the one that is now easiest to modify for a hobbyist, the one with the most security system workarounds, and the one with the most powerful hacks. This may be, because the Xbox security is the weakest one of the three, but also because Open Source people, homebrew people and crackers attacked the Xbox, while the Open Source people did not attack the Playstation 2, as Linux had been officially supported by Sony, so the total number of hackers was lower, buying them time.
=== Idea of the Security System ===
In order to allow only licensed and authentic code to run, it is necessary to build a TCPA/Palladium-like chain of trust, which reaches from system boot to the actual execution of the game. The first link is from the CPU to the code in ROM, which includes the Windows kernel, and the second link is from the kernel to the game.
There are several reasons that the operating system is contained in ROM (256 KB) instead of being stored on hard disk, like on a PC. First, it allows a faster startup, as the kernel can initialize while the hard disk is spinning up, furthermore, there is one link less in the chain of trust, and in case verification of the kernel gets compromised, it is harder to overwrite a ROM chip than modify data on a hard disk.
== Startup Security ==
When turned on, x86-compatible CPUs start at the address 0xFFFFFFF0 in the address space, which is usually flash memory. For the Xbox, this is obviously no good idea, as flash memory can be
* replaced, by removing the chip, fitting a socket and inserting a replacement chip.
* overridden, by adding another flash memory chip to the LPC bus. This override functionality is necessary, because during manufacturing, an empty flash memory chip gets soldered onto the board, an override LPC ROM chip gets connected to the board and the system boots from the external ROM, which then programs the internal flash memory. This procedure is significantly cheaper than preprogramming the flash memory chips.
* reprogrammed, because flash memory can be written to many times. It would be possible to use ROM instead of flash memory, but ROM is more expensive than flash memory.
Thus, the machine must not start from flash memory.
=== Microsoft's Perspective ===
It would be possible to make two of the attacks impossible, by using ROM chips instead of flash. There would be no way to reprogram them, and it would be possible to disable the LPC override functionality in the chipset, because it is not needed for the manufacturing process any more.
==== The Hidden ROM ====
There is a solution between flash memory and ROM that combines advantages of both these approaches. This trick is rather old and had already been used in previous gaming consoles like the Nintendo 64: Use a tiny non-replaceable startup ROM, and put the bulk of the firmware data (i.e. the Windows kernel) into flash memory. The "internal" ROM checks whether the contents of the flash memory are authentic, and if yes, it passes execution to it.
This way, there will be another link in the chain of trust, but the ROM code can be trusted (if it is non-replaceable), and if, in addition, it is non-accessible, an attacker may not even have a clue how verification works.
==== Location of the ROM ====
But where can this ROM be put? It cannot be a separate chip, as it would be replaceable. It would have to be included into another chip. The CPU would be ideal, as the ROM contents would not travel over any visible bus, but then it would be impossible to use cheap off-the-shelf Celerons. Including it in any other chip would make it non-replaceable, but data would travel over a bus. It seems to be a good compromise to store the ROM data in the Southbridge ("MCPX"), as it is connected via the ''very'' fast HyperTransport bus, so it is very hard to sniff. A former Microsoft employee confirmed that the developers tought that nobody was able to sniff HyperTransport.
==== Verification Algorithm ====
This secret ROM stored in the Southbridge must verify the Windows kernel in the external flash memory before executing it. One idea would be to checksum (hash) the flash contents using an algorithm like MD5 or SHA-1, but this would mean that the hash of the kernel has to be stored in the secret ROM as well, which would make it imposible to ship updated versions of the kernel in future Xboxes without also updating the ROM contents - which would be very expensive.
A digital signature algorithm like RSA would be better: It would be possible to update the kernel without changing the ROM, but an RSA implementation takes up a lot of space, and embedded ROM in the Southbridge is expensive. It would be ideal if the algorithm fit in only 512 bytes, which is impossible for RSA.
==== Second Bootloader ("2bl") ====
A solution for this problem is again to introduce another link in the chain of trust: The ROM only hashes a small loader ("2bl", "second bootloader") in flash memory, which can never be changed. It is then the job of this loader to verify the rest of flash, and as the second loader can be any size, there are no restrictions.
So the final chain of trust looks like this: The CPU boots from the secret ROM embedded into the Southbridge, which cannot be changed. The secret ROM verifies the second bootloader in flash memory using a hash algorithm, and if it is authentic, runs it. The second bootloader checks the kernel, and if authentic, runs it.
Now the second bootloader and the Windows kernel would be stored in flash memory in plain text, which is a bad idea: An attacker can immediately see how the second bootloader verifies the integrity of the kernel, and even analyze the complex kernel for possible exploits. Encrypting all the flash contents will not solve possible vulnerability problems, but it will buy us time until the decryption of the flash contents is understood by hackers.
The decryption key would have to be stored in the secret ROM, and the 2bl verification code would also have to decrypt the flash contents into RAM while reading it.
==== RAM Initialization ====
Decrypting flash memory contents into RAM is a challenge if we are living inside the first few hundred bytes of code after the machine has started up: At this point, RAM might not be stable yet. The reason for this is that Microsoft bought cheap RAM chips; they just took everything Samsung could give them to lower the price, even faulty ones, i.e. chips that will be unstable when clocked at the highest frequencies specified.
The Xbox is supposed to find out the highest clock speed the RAM chips can go and run them at this frequency - this is the reason why some games don't run as smoothly on some Xboxes as on others. So the startup code in the secret ROM has to do a memory test, and if it fails, clock down the RAM, do another memory test, and if it fails again, clock down again, and so on, until the test succeeds or the RAM cannot be clocked down any further.
The problem now is that it is impossible to do complex RAM initialization, data decryption and hashing in 512 bytes. This code would need at least 2 KB, which would be significantly more expensive, if embedded into the Southbridge.
We could put the RAM initialization code, which is the biggest part of what the startup code needs to do, into flash memory, and call it from the secret ROM, but this would kill security, as an attacker could easily see the unencrypted code in flash, modify it and have the control of the machine right at the startup.
The developers at Microsoft had a brilliant idea how to solve this problem: They designed an interpreter for a virtual machine that can read and write memory, access the PCI config space, do "AND" and "OR" calculations, jump conditionally etc. The instruction code has one byte instructions and two 32 bit operands, it can use immediate values as well as an accumulator.
The interpreter for the virtual machine is stored in the secret ROM, and its code ("xcodes") is stored in flash memory. This code does the memory initialization (plus extra hardware initialization, which would not be necessary). This program cannot be encrypted, as there is again no space for it in the secret ROM, but as the virtual machine is unknown to the hacker, encryption should not be that important. It also cannot be hashed, as this would make it impossible to change the xcodes for later revisions of the Xbox hardware. Therefore we have to make sure that, if the hacker knows how the virtual machine works, it is impossible to do anything malicious with the xcodes.
==== The Virtual Machine ====
There are several ways an attacker could exploit the xcodes, which are by definition untrusted, because they reside in "external" flash memory. Microsoft included some code to make sure there were no possible exploits.
===== Read the Secret ROM =====
The xcodes can read memory and access I/O ports. This way an attacker could place xcodes into flash memory that dump the secret ROM, which must be mapped into the address space somewhere, to a slow bus, like the LPC or the I2C bus, or write it into CMOS or the EEPROM, so that we can read it later.
The xcode interpreter has to make sure that the xcodes cannot read the secret ROM, which is located at the upper 512 bytes of the address space. The simplest way to accomplish this is to mask the address when reading from memory:
<pre> and ebx, 0FFFFFFFh ; clear upper 4 bits
mov edi, [ebx] ; read from memory location op1 into di
jmp next_instruction
</pre>
This way, the xcodes can only ready from the lower 256 MB, which is no problem, as there are only 64 MB of RAM, and memory mapped I/O can be mapped into this region using PCI config cycles.
===== Turn off the Secret ROM =====
The xcodes may also not turn off the secret ROM, or else the CPU, while executing the xcode interpreter, would "fall down" from the secret ROM into the underlying flash ROM, which is also mapped to the top end of the address space. The turn off functionality is important: As soon as the second bootloader takes over, the secret ROM has to be turned off, or else an attack against a game, which makes it possible to run arbitrary code, could dump the secret ROM, making additional attacks against it possible.
The secret ROM can be turned off by writing a value with bit #1 set to the PCI config space of device 0:1:0, register 0x80. So the xcode interpreter always clears this bit in case there is a write to this PCI config space register:
<pre> cmp ebx, 80000880h ; ISA Bridge, MCPX disable?
jnz short not_mcpx_disable ; no
and ecx, not 2 ; clear bit 1
not_mcpx_disable:
mov eax, ebx
mov dx, 0CF8h
out dx, eax ; PCI configuration address
add dl, 4
mov eax, ecx
out dx, eax ; PCI configuration data
jmp short next_instruction
</pre>
==== Encryption and Hashing ====
For the decryption of the second bootloader, Microsoft chose the RC4 algorithm, which is pretty small, as it fits into 150 bytes. It uses a 16 bytes key, which is also stored in the secret ROM. Microsoft's engineers also chose to use RC4 as a hash, so that no additional algorithm had to be implemented for this. Differential decryption algorithms feed the decrypted data into the generator of the decryption key stream, so if the encrypted code is changed at one byte, all the following bytes will decrypted incorrectly, up to the last bytes. This way, it is possible to only test the last few bytes. If they have been decrypted correctly, then the encrypted code has been authentic. (If you are getting suspicious now - read on!)
In practice, the secret ROM in the Xbox compares the last decrypted 32 bit value with the constant of 0x7854794A. If it is incorrect, the Xbox has to panic.
==== Panic Code ====
So far, the code in the secret ROM does this:
* Enter protected mode, and set up segment descriptors, so that we have access to the complete flat 32 bit address space.
* Interpret the xcodes.
* Decrypt and hash the second bootloader, store it in RAM
* If the hash is correct, jump to the decrypted second bootloader in RAM, else panic.
There is another possible attack here: A hacker could deliberately make the hash fail. If the Xbox then halts and flashes its lights to indicate an error, the attacker can attach a device to dump the secret ROM after the CPU has shut down and the bus is idle. Although HyperTransport is fast, it would be a lot easier to attach a device that actively requests the data from the Southbridge than sniffing it when the CPU requests it.
One solution would be not to halt but to shut down the Xbox in case of a problem. The support chips have this functionality. But incorrect flash memory does not necessarily mean that there has been an attack, it could also be a malfunction, and the machine should use the LED to blink an error code.
So we should leave the Xbox running, but just turn off the secret ROM, so that it cannot be read any more. But there is a problem: We have to do this inside the secret ROM. So if we disable the ROM, we cannot have the "hlt" instruction after that, because the CPU will "fall down" into flash memory - where an attacker could put code. On the other hand, if we halt the CPU, we cannot turn off the secret ROM afterwards.
We cannot put the disable and halt code into RAM and jump there, because RAM might not be stable, and might even have been tampered with by an attacker (e.g. by turning off the memory controller using the xcodes) so that the secret ROM does not get turned off. We cannot put the disable and halt code into flash either, as again, an attacker could simply put arbitrary code to circumvent the complete system there.
The Microsoft engineers used yet another brilliant trick: They jump to the very end of the address space (which is covered by the secret ROM) and turn off the secret ROM in the very last instruction inside the address space. This is a simplified version of the idea:
<pre>FFFFFFF1 mov eax, 80000880h
FFFFFFF6 mov dx, 0CF8h
FFFFFFF9 out dx, eax
FFFFFFFB add dl, 4
FFFFFFFC mov al, 2
FFFFFFFE out dx, al
</pre>
After the last instruction, the program counter (EIP) will overflow to 00000000, which, according to the CPU documentation, causes an exception, and as there is no exception handler set up, it causes a double fault, which will effectively halt the machine.
=== The Hacker Perspective ===
So much for the theory. The design looked pretty good, although the trade off between cost and security as it has been decided, might give some people headaches. Let us now have a look at the Xbox from the hackers' point of view.
It has been well known that the Xbox chipset is a modified version of nVidia's nForce chipset, so we knew that it was standard IDE, USB, there was an internal PCI bus and so on. Two hackers from Great Britain, Luke and Andy, checked the hard disk and found out that it uses a custom partitioning scheme, a FAT-like filesystem, that there is no kernel on the hard disk, but there is the Xbox Dashboard on the fourth partition, the main program that gets executed if there is no game in the DVD drive, which allows changing settings, playing audio CDs and managing savegames.
==== Extracting the Secret ROM ====
Andrew "bunnie" Huang, then a PhD student at the MIT, disassembled his Xbox, saw the flash memory, de-soldered it, extracted the contents, put it on his website and got a phone call from one of Microsoft's lawyers.
The flash memory image was obviously encrypted, but there was x86 binary code in the upper 512 bytes! Obviously, there should be no code in the upper 512 bytes, as this gets overridden by the secret ROM, which contains the actual machine setup and flash decryption code.
Bunnie found out that this code was an interpreter for tables in flash memory, plus a decryption function that looked like RC4. He rewrote the crypto code in C and tried it on the data - but the resulting data was random, obviously something was wrong. The interpreter didn't make much sense either. The code used opcodes that were unknown to the interpreter.
In order to find out what was wrong, bunnie rewrote the top of flash with his own code, and later even completely erased the upper 512 bytes, but the Xbox still booted! So it was obvious to him that this region gets overridden by some internal code. As it turned out later, the code in the upper 512 bytes of the flash image was a very old version of the secret ROM code, which had been unintentionally linked to the image by the build tools. It seems like nobody had looked at the resulting image at the end, before they shipped the consoles. This mistake was very close to a fatal one, and Microsoft was lucky that they didn't link the actual version of the secret ROM.
But it didn't make that much of a difference, as bunnie sniffed the busses, and eventually dumped the complete secret ROM, including the RC4 key from HyperTransport, using a custom built sniffer - after all, he was working on his PhD degree about high performance computing, and he could use the excellent resources of the MIT hardware lab.
When he published his findings, other people found out quite quickly that the validity check did nothing at all: The combination of decryption and hash with a cypher that feeds back the decrypted data into the key stream is a good idea, but unfortunately, RC4 is no such cypher. It decrypts bytes independently, so if one byte is wrong, all the following bytes will still be decrypted correctly. So checking the last four bytes has no effect: There is no hash.
It turned out that the cypher used in the old version of the secret ROM as found in flash memory used the RC5 cypher. In contrast to RC4, RC5 does feed the decrypted stream back into the key stream. So they seem to have replaced RC5 with RC4 without understanding that RC4 cannot be used as a hash. Bunnie's theory why they abandoned RC5 is that RC5 was still a work in progress, and that Microsoft wasn't supposed to have it, so they went for the closest relative - RC4.
==== Modchips ====
Now that the encryption key was known and there was effectively no hash over the second bootloader, it was possible to patch this code: People added code to the second bootloader to patch the kernel after decryption (and decompression) to accept executables even if on the wrong media (DVD-R instead of original) or if the RSA signature of the executables was broken (i.e. unsigned homebrew software).
Modchips appeared: Some of them had a complete replacement flash memory chip on them, others only patches a few bytes and passed most reads down to the original flash chip. All these modchips had to be soldered in parallel to the original flash chip, using 31 wires.
Now other people found out that, if the flash chip is completely missing, the Xbox wants to read from a (non-existant) ROM chip connected to the (serial) LPC bus. This is of course because of the manufacturing process: As it has been explained before, the flash chip gets programmed in-system, the first time they are turned on, using an external LPC ROM chip. Modchip makers soon developed chips that only needed 9 wires and connected to the LPC bus. It was enough to ground the data line D0 to make the Xbox think that flash memory is empty.
Lots of these "cheapermods" appeared, as they only consisted of a single serial flash memory chip. They could be installed within minutes, especially after some companies started shipping chips that used pogo pins, so that no soldering was required.
Some groups wrote applications like boot menus that made it possible to copy games to hard disk and run them from there. Patched Xbox kernels appeared that supported bigger hard disks. Making the Xbox run copies from DVD-R or hard disk as well as homebrew applications written with the official Xbox SDK was now easy.
==== Backdoors ====
The Xbox Linux Project was working on two ways to start Linux: Either run the Linux kernel from a CD/DVD as if it was a game, or run it directly from flash memory, or from HD/DVD using a Linux bootloader in flash memory, so that the Xbox behaved like a PC. For the latter, Xbox Linux was working on a replacement firmware.
It would have been no problem to write a replacement firmware that took over execution instead of the second bootloader, as it was possible to completely replace this second bootloader, as well as encrypt it, using the well-known key from the secret ROM. But the firmware developers felt very uncomfortable with the idea of using this secret key in their GPL code. Other hackers felt the same, and thus were looking for bugs and backdoors in the secret ROM code, in order to find a way to be able to implement a replacement firmware without having to deal with encryption.
===== The Visor Backdoor =====
A hacker named visor, who never revealed his real name, wondered whether the rollover to 00000000 in case of an incorrect 2bl "hash" really caused a double fault and halted the CPU. He used the xcodes to write the assembly instruction for "jmp 0xFFFF0000" to the memory location 00000000 in RAM and changed the last four bytes in 2bl, in order to make the secret ROM run the panic code. The Xbox happily continued executing code at 00000000 and took the jump into flash.
When appending these instructions to the existing xcodes, he could make sure that RAM had been properly initialized and was thus stable. So there was no need to encrypt the Xbox Linux bootloader firmware with the secret key any more. It was enough to add the memory write instruction to the end of the xcodes and make sure that 2bl decryption fails - which will automatically happen, if the firmware replacement does not contain the 2bl code.
Now why is there no double fault? Hackers from the Xbox Linux team checked with AMD employees and they explained that AMD CPUs ''do'' throw an exception in case of EIP overflows, but Intel CPUs don't.
The reason that Intel CPUs don't is because of... 1970s stuff. Execution on x86 CPUs starts at the top of the address space (minus 16 bytes), but some computer makers wanted to have their ROM at the bottom of the address space, i.e. at 0, so Intel implemented the instruction with the encoding 0xFFFF, which is what you get when reading from addresses not connected to any chip, as a No-Operation ("nop") and made the CPU throw no exception in case of the address space wraparound. This way, the CPU would "nop" its way up to the top, and finally execute the code at 0.
AMD did not implement this behavior, as it had not been necessary any more by the time AMD entered the x86 market with it own designs, and because they felt that this behavior was a security risk and fixing it would not mean a significant incompatibility.
But why did Microsoft do it wrong? This can be explained with the history of the Xbox: AMD offered to design and manufacture both the CPU and the motherboard (including the chipset), and nVidia was contracted to contribute the graphics hardware. The first developer systems, even outside of Microsoft, were Athlon-based, but then Intel came in and offered their chips for less money, as well as the complementary redesign of the existing AMD chipset to work with their CPU. Consequently, nVidia licensed the AMD chipset so that the AMD name vanished. This also means, that nVidia nForce chipset is essentially AMD technology, closely related to the AMD-760 chipset.
So when Microsoft switched from AMD to Intel, they apparently forgot to test their security code again with the new hardware, or to read the Intel datasheets.
===== The MIST Hack =====
Soon after the visor hack, another vulnerability was found in the secret ROM code, attacking the code that checks whether an xcode wants to disable the secret ROM. Let us look at this code again:
<pre> cmp ebx, 80000880h ; ISA Bridge, MCPX disable?
jnz short not_mcpx_disable ; no
and ecx, not 2 ; clear bit 1
not_mcpx_disable:
mov eax, ebx
mov dx, 0CF8h
out dx, eax ; PCI configuration address
add dl, 4
mov eax, ecx
out dx, eax ; PCI configuration data
jmp short next_instruction
</pre>
The PCI config address is stored in the EBX register in the beginning. This address has to be sent to I/O port 0x0CF8, and the 32 bit data has to be sent to I/O port 0x0CFC. The address is encoded like this:
<pre>0-7 reg
8-10 func
11-15 device
16-23 bus
24-30 reserved
31 always 1
</pre>
The attack is pretty obvoius: there are seven reserved bits in the address, and the code tests for a single exact value. What happens if we write to an alias of the same address, by using an address with only some of the bits 24 to 30 changed? While the instruction
<pre>POKEPCI(80000880h, 2)
</pre>
will be caught, the instruction
<pre>POKEPCI(C0000880h, 2)
</pre>
will not be caught - and works just as well, because the PCI bus controller just ignores the unused bits.
This instruction disables the secret ROM, that is, the interpreter disables itself when sending the value to port 0x0CFC, and the CPU falls down to flash memory. We can put a "landing zone" into flash, by filling all of the top 512 bytes with "nop" instructions, and putting a jump to the beginning of flash into the last instruction, so that we do not have to care where exactly the CPU lands after falling down, and we are independent of possibly hard to reproduce caching effects.
It is hard to find a good reason for this bug other than carelessness. It might be attributed to not reading the documentation closely enough, as well as not looking at it from the perspective of a hacker well enough. After all, this code had been written with a specific attack in mind - but the code made hacking easier, by giving hackers a hint how to attack.
===== Another PCI Config Space Attack =====
There is a second sequence of xcode instructions that can disable the secret ROM just as well, which are not caught by the interpreter: The interpreter supports writing bytes to I/O ports, so it is possible to put together the code to disable the secret ROM using 8 bit I/O writes:
<pre>OUTB(0xcf8), 0x80
OUTB(0xcf9), 0x08
OUTB(0xcfa), 0x00
OUTB(0xcfb), 0x80
OUTB(0xcfc), 0x02
</pre>
This hack has been unreleased until now. It has been found not long after the MIST hack, but kept secret, in case Microsoft fixed the MIST bug. In the meantime, they have implemented a fix that makes all hacks impossible that are based on turning off the secret ROM. This will be described in detail later.
===== More Ideas =====
There have been more ideas, but few of them have been pursued, as long as other existing backdoor existed. One possible idea is to base a hack on caching...
== Startup Security, Take Two ==
When bunnie hacked the secret ROM, Microsoft reacted by updating the ROM. Thousands of already manufactured Southbridges were trashed, new ones made. The hacker community called these Xboxes "version 1.1" machines.
=== Microsoft's Perspective ===
Microsoft had now understood that RC4 cannot be used as a hash, so they implemented an additional hash algorithm, which was to be executed after decryption. As there were only few bytes left, the hash algorithm had to be tiny - so the "Tiny Encryption Algorithm" ("TEA") was used. Every encryption algorithm can be changed to be used as a hash, and TEA seemed to be a good choice, as it is really small. While they were at it, they also changed the RC4 key in the secret ROM, so that hackers would not be able to decrypt 2bl and the kernel without dumping the new secret ROM.
=== The Hacker Perspective ===
The extraction of the secret ROM was done by members of the Xbox Linux Project this time, only days after they got their hands on the new 1.1 boxes, and only two weeks after they first appeared.
==== The A20 Hack ====
To date, Microsoft does not know how the Xbox Linux Project did it. But since there will most probably be no future revisions of the Xbox, as the Xbox 360 has already taken over, we can release this now.
Let us start with some PC history. The 8086/8088, the first CPU in the x86 line, was supposed to be as closely compatible to the 8080, which was very successful on the CP/M market. The memory model therefore was similar to the 8080, which could access only 64 KB, by dividing memory into 64 KB blocks. Intel decided that the 8086/8088 could have a maximum of 1 MB of RAM, which would have meant 16 "segments" of 64 KB each. But instead of doing it this way, they decided to let the 64 KB segments overlap, and have 65536 of these segments, starting every 16 bytes.
An address was therefore specified by a segment and an offset. The segment would be multiplied by 16, and the offset would be added, to result in the effective address. As an example, 0x0040:0x006C would be 0x40*0x10+0x6C=0x46C. An interesting side effect of this method is that it is possible to have addresses above 1 MB: The segment 0xFFFF starts at the effective address 0xFFFF0, so it should only contain 16 bytes instead of 64 KB. So the address 0xFFFF:0x0010 would be at 1 MB, and 0xFFFF:0xFFFF would be at 1 MB plus roughly 64 KB.
The 8086/8088 could not address more than 1 MB, because it only had 20 address lines, so addresses above 0xFFFF:0x000F were wrapped around to the lower 64 KB. But this behavior was different on the 286, which had 24 address lines: It was actually possible to access roughly 64 KB more using this trick, which was later abused by MS-DOS as "high memory".
Unfortunately there were some 8086/8088 application that broke, because they required the wraparound for some reason. It wasn't Intel who found that out, but IBM, when they designed the IBM AT, and it was too late to modify the behavior of the 286, so they fixed it themselves, by introducing the A20 Gate ("A20#"). An unused I/O pin in the keyboard controller was attached to the 20th address line, so that software could pull down address line 20 to 0, thus emulating the 8086/8088 behaviour.
This feature was later moved into the CPUs, and all Pentiums and Athlons have it - and so does the Xbox. If A20# is triggered, bit 20 of all addresses will be 0. So, for example, an address of 1 MB will be 0 MB, and if the CPU wants to access the top of RAM, it will actually access memory that is 1 MB lower than the top.
Keeping this in mind, the attack on the Xbox is pretty straightforward: If we connect the CPU's A20# pin to GND, the Xbox will not start from FFFFFFF0, but from FFEFFFF0 - this is not covered by the secret ROM, but is ordinary flash memory, because flash is mirrored over the upper 16 MB. So by only connecting a single pin, the secret ROM is completely bypassed.
What is cool about this, is that the secret ROM is still turned on. So we could easily dump the secret ROM trough one of the low speed busses (we used the I2C bus), by placing a small dump application into flash memory.
==== The TEA Hash ====
After reading Bruce Schneier's book on crypto, we learned that TEA was a really bad choice as a hash. The book says that TEA must never be used as a hash, because it is insecure if used this way. If you flip both bit 16 and 31 of a 32 bit word, the hash will be the same. We could easily patch a jump in the second bootloader so that it would not be recognized. This modified jump lead us directly into flash memory.
But why did they make this mistake? Obviously the designers knew nothing about crypto - again! - and just added code without understanding it and without even reading the most basic books on the topic. A possible explanation why they chose TEA would be that they might have searched the internet for a "tiny" encryption algorithm - and got TEA.
==== Visor Backdoor and MIST Hack ====
The Visor Backdoor was still present, so again, for the replacement Linux firmware, the Xbox Linux developers did not have to exploit the crypto code, but could simply use this backdoor. Microsoft obviously released the updated secret ROM much too quickly, just after bunnie dumped it and people saw that RC4 was no hash, but before the visor backdoor had been discovered.
The MIST hack had been discovered after the visor bug - but it no longer worked on the Xbox 1.1. Not because they fixed the comparison - they didn't -, but because they changed the address logic: If you accessed the upper 512 bytes of the address space, and the secret ROM was turned off, the Xbox would just crash, thus making all "fall down" hacks impossible. This way they closed both possible attacks, writing to an alias, and using 5 OUTB instructions.
Microsoft obviously discovered the turnoff vulnerability themselves, closing at least one backdoor, but keeping another one open, and not really closing a second one. It was too expensive to trash the 1.1 Southbridge chips again for yet another update, so Microsoft still uses these chips in today's Xboxes.
=== Today ===
In later revisions of the Xbox, Microsoft removed some pins of the LPC bus, making modchip design harder, but they could not remove the LPC bus altogether, because they needed it during the manufacturing process.
In the latest revision of the Xbox hardware (v1.6), they finally switched from flash memory to real ROM - and even integrated the ROM with the video encoder. The LPC bus is not needed for manufacturing any more, as the ROM chips are already preprogrammed. So now it is impossible to replace or to overwrite the kernel image, and because of the missing LPC bus, it also seems impossible to attach a ROM override.
But modchips are still possible. The obvious LPC pins are gone now, but the bus is still there. If you find the LPC pins on the board, you can attach a ROM override just as before, the modchips are only a bit harder to install. This is because the Southbridge still has the LPC override functionality, since they did not make a new revision of it - as so often, obviously for monetary reasons.
== Xbox Kernel Security ==
Let us have a look at the chain of trust again:
* The CPU starts execution of code stored in the secret ROM.
* The secret ROM decrypts and verifies the second bootloader.
* The second bootloader decrypts and verifies the Windows kernel.
* The Windows kernel checks the allowed media bits and the RSA signature of the game.
This last link is a complete software thing, so all the attacks have been pretty much standard. Some people tried to brute force the RSA key used for the game signature - no joke! But what is more likely, successfully brute forcing RSA 2048, or finding a bug in Microsoft's security code? After the experience with the first links of the chain of trust, the Xbox Linux Project focused on finding bugs in the software.
We found no bug in the RSA implementation. It is taken straight out of Windows 2000 and looks pretty good. But there are always implicit additional links in the chain of trust: All code reads data, and data can cause security risks if handled incorrectly.
=== Game Exploits ===
What data do games load? Graphics data, audio data, video data... - but we cannot alter them, because it is not easily possible to create authentic Xbox DVDs, and the Xbox won't boot originals from DVD-R etc.
But most games can load savegames, and these can easily be changed: The Xbox memory units are more or less standard USB storage devices ("USB sticks"), so it is possible to use most USB sticks with the Xbox, and just store hacked savegames on them.
Plenty of Xbox games had buffer vulnerabilities in their savegame handlers. It was often as easy as extending the length of strings like the name of the player, and the game would overwrite its stack with our data and eventually jump to the code we embedded in the savegame.
The procedure for the user was then to simply copy a hacked savegame from a USB stick onto the Xbox hard disk, run the game and load the savegame. But after a buffer exploit, we would normally only be in user mode - not on the Xbox, as all Xbox games run in kernel mode. The reason for this is probably a slight speed advantage, or, less likely, a simpler environment for the game, but Microsoft tried to make the environment as similar to the Windows/DirectX environment as possible, so user mode would have actually made the environment "simpler" for many Windows/DirectX developers.
Now that we have full control of the machine, we can overwrite the flash memory chip. It is write protected by default, but disabling the write protection is as easy as soldering a single bridge on the motherboard. After all, this bridge has to be closed temporarily during manufacturing when programming flash memory for the first time. Using this hack, it is possible, only with a USB stick, one of several games (007 Agent Under Fire, MechAssault, Splinter Cell, ...) and a soldering iron, to permanently modify the Xbox, just as if a modchip was installed. Because early Xboxes had a 1 MB flash chip, although only 256 KB had been used, it was even possible to install several ROM images in flash and attach a switch.
But the Xbox Linux Project did not blindly release this hack. The first savegame proof of concept exploit had been finished in January 2003. After that, a lot of energy was invested in finding out a way to free the Xbox for homebrew development and Linux, but not allowing game copies. Microsoft was contacted, but without any success. They just ignored the problem.
Finally in July, the hack was released, with heavy obfuscation, and lockout code for non-Linux use. It was obvious that this would only slow down the "hacking of the hack", so eventually, people would be able to use this vulnerability for copied games, but since Microsoft showed no interest in finding a solution, there was no other option than full disclosure. The suggestion of the Xbox Linux Project would have been to work together with Microsoft to silently close the security holes and, in return, work on a method to let homebrew and Linux run on the Xbox.
=== Dashboard Exploits ===
The problem with the savegame hack was that, if you didn't want to overwrite the flash memory chip, you had to insert the game and load the savegame every time you wanted to run unsigned code. But having full control of the machine using the savegame exploit also meant we could access the hard disk without opening the Xbox. This way, it became interesting to closely examine the hard disk contents for vulnerabilities.
The Dashboard is the main program on hard disk, executed every time the Xbox is started without a game in the DVD drive. The dashboard may even be the very reason the Xbox ships with a hard disk: While the settings menu and savegame management on the Nintendo GameCube fit well into 2 MB of ROM, the Xbox Dashboard, which is roughly comparable in its functionality, occupies more than 100 MB. So the original idea why to include a hard disk might have been initiated by the inability to compress the Dashboard into typical ROM sizes - and they might have decided to make the best out of it, and find additional uses for the hard disk.
The dashboard loads its data files, like audio and graphics, from hard disk. With the savegame exploit, we can now alter the hard disk contents, even without opening the Xbox. Of course the dashboard executable is signed and can therefore not be altered, and all data files are hashed, with the hashes stored inside the dashboard executable. Well, all files, except for two: the font files.
Consequently, there was an integer vulnerability in the font handling routines, so that we could run our own code by replacing the font files. Combined with the savegame exploit, it was as easy as transferring the savegame and loading it, which would run a script that modifies the fonts.
Now every time the Xbox is turned on, the Dashboard crashes because of the faulty fonts and runs our code embedded in these files. Our code reloads the Dashboard with the original fonts, hacks it, and runs it. Hacking the Dashboard meant two things: Modifying one menu entry to read "XBOX LINUX" instead of "XBOX LIVE" and running the Linux bootloader instead of the Xbox Live setup executable, and modifying the kernel to accept both applications signed with Microsoft's RSA key as well as those signed with our RSA key, from hard disk and from CD/DVD. We called this "MechInstaller", as it was based on the "MechAssault" savegame exploit.
Only accepting code either signed by the original key or by our key, keeping our key secret, and using heavy obfuscation again, meant that nobody could easily abuse this solution for copied games.
This hack shows several things: Hackers have phantasy, the combination of flaws can lead to fully compromising the security system, powerful privileged code should be bug-free and security code should really catch ''all'' cases.
Oh, and there is another vulnerability, an integer vulnerability in the audio player code. The attack was developed independently of the font attack, but was inferior because it would have required the user to enter the audio player every time to run Linux.
==== Microsoft's Fixes ====
The history of Microsoft's reactions to the font vulnerability is the perfect lesson of how to do it wrong.
# After MechInstaller had been released, Microsoft fixed the buffer vulnerability in the Dashboard and distributed this new version over the Xbox Live network and shipped it with new Xboxes.
# For the hackers, this was no major problem: It was possible to downgrade the Dashboard of a new Xbox to the vulnerable version. Just run Linux using a savegame exploit, and "dd" the old image. Some people felt downgrading on new Xboxes was not piracy, because after all, Microsoft upgraded Xbox Live users' hard disks to the new version without asking.
# As the next step, Microsoft blacklisted the old Dashboard in the new kernel. It was impossible to just "dd" an old Dashboard image onto newer Xboxes.
# Still no major problem for hackers: The second executable on the hard disk, "xonlinedash", which is used for Xbox Live configuration, had the same bug, so it was possible to copy the old "xonlinedash" and to rename it to "xboxdash" to make it crash because of the faulty fonts.
# Microsoft consequently blacklisted the vulnerable version of "xonlinedash".
# Again, no major problem for hackers: All Xbox Live games come with the "dashupdate" application, which adds Xbox Live functionality to the Dashboard for the first Xboxes which came without it. This update application has the same font bug, and it can be run from hard disk. So it is possible to copy the file from any Xbox Live game DVD, rename it to "xboxdash" and let it crash.
# Microsoft could not blacklist this one. Xbox Live enabled games run the update application every time they start, making sure the Xbox has the Xbox Live functionality. Blacklisting "dashupdate" would break these games.
We won.
== The Mistakes that Have Been Made ==
Microsoft obviously made a lot of mistakes. But it would be too easy to just attribute all these to stupid engineers. There have been good (and different) reasons for most of these mistakes, and one can learn a lot from them.
There are 17 kinds of mistakes they made, several of which have been made more than once. I will group the 17 mistake types into three categories: Design mistakes, implementation mistakes and bad policy decisions.
=== Design ===
==== #1: Security vs. Money ====
Be very careful with tradeoffs between security and money. There are rarely sensible compromises. Keep in mind that the very reason for the security system is to make more money, or to prevent money losses. Security systems cannot be "a little better" or "a little worse". Either they are effective - or they are not. By saving money on the security system, you may easily make it not effective at all, not only wasting the money spent on the security system, but also making losses because it is not effective.
Microsoft made many compromises.
* In-system programming of flash memory is cheaper than preprogramming, but an attacker can also override the firmware with an LPC ROM.
* Buying all of Samsung's RAM chips is cheaper than only buying those within the specs, but it made RAM initialization more complex, using up space that could otherwise be used for better security code.
* They chose to put the secret ROM into the Southbridge instead of the CPU, because the Southbridge was a custom component anyway and having a custom CPU would have been a lot more expensive, but keys travel over a visible bus if the secret ROM is outside the CPU.
* They saved money choosing not to update the Southbridge a second time, which would have fixed the TEA hash and removed the visor backdoor. This would have made modchips virtually impossible.
==== #2: Security vs. Speed ====
Don't trade security for speed. Although it may be true that the product in question must be as fast as possible in order to be able to compete with similar products on the market, remember that in IT, computers aren't slower or faster by some percentage - but by factors! Besides, you might lose more money because of a security system that does not work than because of a product that is 10 percent slower than it could be.
Most probably for added speed (one address space, no TLB misses), Microsoft chose to run all code in kernel mode, even games that interacted with untrusted data that came from the outside. This made it possible to have complete control of the machine once a game crashed because of a prepared savegame, including complete control of the hard disk and the possibility of booting another operating system.
==== #3: Combinations of Weaknesses ====
Be aware of the fact that a combination of security flaws can lead to a successful attack. Don't think that a possible security hole (or "only" a security risk) cannot be exploited because there are so many barriers in front of it. Attackers might break all the other barriers that block the vulnerability, and fixing that one hole would have stopped them.
MechInstaller is a great example for that. It was only possible because of the combination of several security weaknesses:
* The boot process was vulnerable, so we could use a modified kernel to analyze games.
* Some games are not careful enough with savegames, so that we can run our own code.
* Games run in kernel mode, so we have full control of the hardware.
* The Dashboard does not verify the integrity of the font files.
* The Dashboard has a vulnerability in the font code.
If any of these weaknesses had not been there, then MechInstaller would not have been possible. Also note that hackers have enough fantasy to find out these combinations.
==== #4: Hackers' Resources ====
Understand that hackers may have excellent resources. Hobbyists may use resources from work or from university, and professional attackers can also be very well-equipped. It is a big mistake to underestimate them. So never think you are safe because it would be too much work or too expensive to exploit a weakness. If it is a weakness, it will eventually be exploited. Also understand that hackers may have excellent human resources. Not only in number, but also in qualifications.
Microsoft put the secret ROM into the Southbridge instead of the CPU, which meant that the secret key would travel over a visible bus. This is the very fast HyperTransport bus, which, at that time, could not be sniffed using logic analyzers any mortal could afford. But with help of the resources of the MIT and using all of his expertise, bunnie could build his own hardware that could sniff the bus.
==== #5: Barriers and Obstacles ====
Don't make anything "harder for hackers". Instead make it "impossible for hackers", or, if it cannot be made impossible, don't care about it. Because of the potential great number and excellent qualifications of hackers, no obstacle will have any effect or slow down hacking significantly. But instead, in security design, you might make mistake #3, because you think you are safe as there are so many obstacles in the hackers' way. Use the resources you would invest into building obstacles into building or strengthening barriers instead - possibly at a different location.
Microsoft built obstacles into the system at many different locations.
* Savegames will only be accepted if they are signed, but the private key is of course stored inside the game, so this is no barrier. Instead, they should have made sure the games contain no buffer vulnerabilities in their savegame handlers.
* The hard disk is secured with an ATA password, different for every Xbox and stored on an EEPROM inside the Xbox, but an attacker can just "hotswap" an unlocked hard disk from a running Xbox to a running PC. Instead, they should have put that energy into verifying whether the Dashboard really hashes all data it reads from the hard disk.
* The 512 bytes of security startup code were embedded in a custom chip to make it hard to sniff. Instead, they should have made sure that there are no bugs in that security code.
==== #6: Hacker Groups ====
Don't use one security system for different purposes, or else attackers with very different goals will jointly attack it, being a lot more effective. Instead, try to find out who your enemies really are and what they want, and design your security system so that every group gets as much of what they want so that it does not hurt you.
There were three possible goals for Xbox hackers: Run Linux and use it as a computer, run homebrew software like media players and emulators, and run copies. Although there were some overlaps between Linux and homebrew people, as well as between homebrew people and people interested in copies, these were essentially three very different groups. Because they were all locked out by the same protection, they worked together, either explicitly, or implicitly, by using the results of each other. No Linux hackers ever attacked the Playstation. When you are fair, people don't fight you.
==== #7: Security by Obscurity ====
Security by obscurity does not work. Well-proven algorithms like SHA-1 and RSA work (of course given your implementation is well-proven as well).
Microsoft hid the secret ROM, the Windows kernel, the game DVD contents (no way to read them on a standard DVD drive) and the hard disk contents using different methods. None had any effect. Also see #5.
==== #8: Fixes ====
When your security system has been broken, don't release quick fixes, for two reasons: Your fixes may be flawed and may not actually correct the problem, and even worse holes may be found not much later, which you must fix again - and ship yet another version. Instead, every time a security vulnerability is found, audit your complete security system and search for similar bugs, as well as other bugs in the same part of the system, based on the knowledge you gained from the successful hack.
Microsoft failed to correct the hash problem in the second version of the secret ROM, and didn't fix the visor vulnerability, which was found just weeks later. After trashing thousands of already manufactured v1.0 Southbridge chips, which was very expensive, they decided not to update the Southbridge a second time. Another example is the dashboard odyssey: Instead of blacklisting the vulnerable executables at a time, they released three updates, none of which was effective.
=== Implementation ===
==== #9: Data Sheets ====
Know everything about the components you use. Do read data sheets. Be very careful with components that have legacy functionality.
Microsoft did not notice the A20# legacy functionality as a security risk. It seems that they did not completely analyze the functionality of the Pentium III Celeron, or else they should have noticed. They also apparently did not read the Pentium programmers' manual, or else they would have noticed that Intel CPUs do not panic on a FFFFFFFF/00000000 wraparound.
==== #10: Literature ====
Read (at least!) standard literature. If you are dealing with cryptography, this means you have to read at last Schneier's "Applied Cryptography".
Microsoft's engineers did not know that TEA must not be used as a hash, and that RC4 does not feed the decrypted stream back into the key stream.
==== #11: Pros ====
Get experienced professionals to work on your security system, both on the design and the implementation. If it's a money issue, see #1.
Looking at mistakes #9 and #10, it seems very probable that at least some of Microsoft's engineers had no prior experience with cryptography or the design of a security system. We also know that people on an internship were working on Xbox security.
==== #12: Completeness ====
Check whether your security code catches all cases. If it does not, you did not only waste time implementing all of it, but you may also give hints to hackers: If there are many checks at one point of the code, it looks a lot like code that is relevant for security and an attacker can check whether all cases are caught.
Microsoft made this mistake twice: The xcode interpreter tests for the secret ROM turnoff code, and doesn't catch all cases. And the Dashboard hashes all files it is going to read, except for two. This gave us the ideas where to attack.
==== #13: Leftovers ====
Look at the final product from the perspective of a hacker. Hexdump and disassemble your final builds. There could be leftovers!
The Xbox flash memory image contained an old version of the secret ROM, giving us not only hints about the contents of the actual secret ROM, but also an insight into what Microsoft planned and why some mistakes have been made.
==== #14: Final Test ====
Test your security system when you have the final parts and with the final software components in place. Changing something may very well open holes somewhere else. When you change something, rethink the complete system, and check all assumptions that you made.
The visor hack was only possible because Microsoft failed to adapt their security system, designed for the AMD CPU, to the Intel CPU. The "hash" in the secret ROM had no effect because they changed RC5 to RC4 without thinking about the implications.
=== Policies ===
==== #15: Source ====
Keep your source safe. Find engineers you can trust.
The complete Xbox source code has leaked, including the kernel and libraries source. Groups interested in copies could easily modify it to support running games from hard disk, support for hard disks bigger than 137 GB, custom boot logos etc. This had been previously done by patching the binary.
==== #16: Many People ====
Have many good people have a look at both your design and your implementation. Keeping your source code safe means having engineers you can trust, and not letting none of your engineers see the source code. As stated at #7, your system should not rely on the source code being safe. Unless you did #7 completely wrong, a bug in the security system is typically a lot worse than a leak of the source code.
It seems a lot like very few people have actually seen the Xbox security code.
==== #17: Talk ====
Know your enemy - and talk to them. They are not terrorists that you are not supposed to negotiate with. Their intent is not to harm you but to reach their goals. Working on their goals on their own might harm you indirectly, because the hackers may not care about the same things as you do. Seek the contact to hackers, know what they are doing and have them inform you about a vulnerability before publishing it. Make them know your position and why they should respect it, but also respect their position. Offer them to loosen the security system for what they want in exchange for the non-disclosure of their findings.
Microsoft refused to talk about the savegame and font vulnerabilities. If we had been bad hackers, we could have released both of them as-is, immediately making it possible to run copies on Xboxes without the use of a modchip. Instead, we sought contact to Microsoft: We would have preferred to see a backdoor for Linux in the Xbox security system, instead of a solution based on our findings that would allow running copies. But as they refused to talk, we were forced to release the exploits, and they were lucky we heavily obfuscated our solutions so in order to slow down people interested in using it for copies.
== Conclusion ==
The security system of the Xbox has been a complete failure.
624069b4b333aaa8708fa8c7c00b4973853b4a33
Xbox Hard Disk Partitioning
0
3782
5601
2017-05-31T09:07:12Z
Espes
2484
Created page with "Retrieved from [https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Hard_Disk_Partitioning] by ''Michael Steil'' (original version: 8 May 2002) T..."
wikitext
text/x-wiki
Retrieved from [https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Hard_Disk_Partitioning]
by ''Michael Steil'' (original version: 8 May 2002)
The Xbox uses a hard disk partitioning scheme that is hardwired into the kernel. The hard disk consists of a header, 3 game cache partitions, a system partition and a data partition:
{| class="wikitable"
|-
! Offset
! Size
! Description
|-
| 0 MB<br /><code>0x00000000</code>
| 0.5 MB
| '''Disk Config Area''' <br />This partition contains no filesystem. Various configuration data is stored on fixed offsets.<br />Linux device: <code>none</code>
|-
| 0.5 MB<br /><code>0x00000400</code>
| 750 MB
| '''Game Cache A''' (Drive X:)<br />FATX volume containing temporary data of a game for faster access.<br />Linux device: <code>/dev/hda52</code>
|-
| 750.5 MB<br /><code>0x00177400</code>
| 750 MB
| '''Game Cache B''' (Drive Y:)<br />Linux device: <code>/dev/hda53</code>
|-
| 1500.5 MB<br /><code>0x002EE400</code>
| 750 MB
| '''Game Cache C''' (Drive Z:)<br />Linux device: <code>/dev/hda54</code>
|-
| 2250.5 MB<br /><code>0x00465400</code>
| 500 MB
| '''System Files''' (Drive C:)<br />FATX volume containing menu code, graphics, sound, DVD player, music import, ...<br />Linux device: <code>/dev/hda51</code>
|-
| 2750.5 MB<br /><code>0x0055F400</code>
| 4895 MB
| '''Data''' (Drive E:)<br />FATX volume containing saved games and imported CD audio tracks.<br />Linux device: <code>/dev/hda50</code>
|-
!
!
! '''Non-Standard partitions on disks >8GB'''
|-
| 7645.5 MB<br /><code>0x00EE8AB0</code>
| 1896 MB<br />- 130 GB
| '''Unused/Additional''' (Drive F:)<br />The first xboxes had a 8GB disk, later versions came with a 10GB disk. This the space difference between the two and not used. Some tools allow it to be used as additional FATX filesystem<br />Linux device: <code>/dev/hda55</code> (only present if signature of formatted FATX found)<br />Linux assumes that all remaining space on the disk belongs to this partition unless another FATX filesystem is detected at the LBA28 boundary. See below.
|-
| 137 GB<br /><code>0x0FFFFFFF</code>
| remaining space
| '''LBA28''' (Drive G:)<br />If you install a very big disk some tools are limited by the LBA24 boundary. The drive G allows this space to be used in a separate drive, only accessible to LBA48 capable tools and BIOS'es.<br />Linux device: <code>/dev/hda56</code> (only present if signature of formatted FATX found at LBA24 boundary)<br />Linux assumes that all remaining space on the disk belongs to this partition.
|}
This table has been completed by Markus Baertschi with lots of stuff. There might be errors and misconceptions, caveat emptor !
{| class="wikitable"
|-
! '''Missing image'''<br />''Icon-admonition-tip.png'' <br />Tip<br /><br /> | For a more detailed description of the format and contents of the partitions see [https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Partitioning_and_Filesystem_Details Xbox Partitioning and Filesystem Details].|}
6880700ca09084ad41fdc5b839aa97bf9405ed8f
5624
5601
2017-05-31T10:00:43Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Hard_Disk_Partitioning}}
by ''Michael Steil'' (original version: 8 May 2002)
The Xbox uses a hard disk partitioning scheme that is hardwired into the kernel. The hard disk consists of a header, 3 game cache partitions, a system partition and a data partition:
{| class="wikitable"
|-
! Offset
! Size
! Description
|-
| 0 MB<br /><code>0x00000000</code>
| 0.5 MB
| '''Disk Config Area''' <br />This partition contains no filesystem. Various configuration data is stored on fixed offsets.<br />Linux device: <code>none</code>
|-
| 0.5 MB<br /><code>0x00000400</code>
| 750 MB
| '''Game Cache A''' (Drive X:)<br />FATX volume containing temporary data of a game for faster access.<br />Linux device: <code>/dev/hda52</code>
|-
| 750.5 MB<br /><code>0x00177400</code>
| 750 MB
| '''Game Cache B''' (Drive Y:)<br />Linux device: <code>/dev/hda53</code>
|-
| 1500.5 MB<br /><code>0x002EE400</code>
| 750 MB
| '''Game Cache C''' (Drive Z:)<br />Linux device: <code>/dev/hda54</code>
|-
| 2250.5 MB<br /><code>0x00465400</code>
| 500 MB
| '''System Files''' (Drive C:)<br />FATX volume containing menu code, graphics, sound, DVD player, music import, ...<br />Linux device: <code>/dev/hda51</code>
|-
| 2750.5 MB<br /><code>0x0055F400</code>
| 4895 MB
| '''Data''' (Drive E:)<br />FATX volume containing saved games and imported CD audio tracks.<br />Linux device: <code>/dev/hda50</code>
|-
!
!
! '''Non-Standard partitions on disks >8GB'''
|-
| 7645.5 MB<br /><code>0x00EE8AB0</code>
| 1896 MB<br />- 130 GB
| '''Unused/Additional''' (Drive F:)<br />The first xboxes had a 8GB disk, later versions came with a 10GB disk. This the space difference between the two and not used. Some tools allow it to be used as additional FATX filesystem<br />Linux device: <code>/dev/hda55</code> (only present if signature of formatted FATX found)<br />Linux assumes that all remaining space on the disk belongs to this partition unless another FATX filesystem is detected at the LBA28 boundary. See below.
|-
| 137 GB<br /><code>0x0FFFFFFF</code>
| remaining space
| '''LBA28''' (Drive G:)<br />If you install a very big disk some tools are limited by the LBA24 boundary. The drive G allows this space to be used in a separate drive, only accessible to LBA48 capable tools and BIOS'es.<br />Linux device: <code>/dev/hda56</code> (only present if signature of formatted FATX found at LBA24 boundary)<br />Linux assumes that all remaining space on the disk belongs to this partition.
|}
This table has been completed by Markus Baertschi with lots of stuff. There might be errors and misconceptions, caveat emptor !
{| class="wikitable"
|-
! '''Missing image'''<br />''Icon-admonition-tip.png'' <br />Tip<br /><br /> | For a more detailed description of the format and contents of the partitions see [https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Partitioning_and_Filesystem_Details Xbox Partitioning and Filesystem Details].|}
fcede4beee473dfe575bf9718a4c5844e199ea52
File:Folder.svg.png
6
3783
5602
2017-05-31T09:09:43Z
JayFoxRox
2
From Tango, CC0
wikitext
text/x-wiki
From Tango, CC0
db8a784ad710325c2d825bafdee0a0f1fb193a24
File:Media-cdrom.svg.png
6
3784
5603
2017-05-31T09:09:59Z
JayFoxRox
2
From Tango, CC0
wikitext
text/x-wiki
From Tango, CC0
db8a784ad710325c2d825bafdee0a0f1fb193a24
File:Text-x-generic.svg.png
6
3785
5604
2017-05-31T09:10:11Z
JayFoxRox
2
From Tango, CC0
wikitext
text/x-wiki
From Tango, CC0
db8a784ad710325c2d825bafdee0a0f1fb193a24
File:Drive-harddisk.svg.png
6
3786
5605
2017-05-31T09:10:24Z
JayFoxRox
2
From Tango, CC0
wikitext
text/x-wiki
From Tango, CC0
db8a784ad710325c2d825bafdee0a0f1fb193a24
PIC
0
3787
5606
2017-05-31T09:12:12Z
Espes
2484
Created page with "Retrieved from [https://web.archive.org/web/20100617022549/http://www.xbox-linux.org/wiki/PIC] by ''Georg Lukas, Michael Steil, Jeff Mears'', 26 June 2002 Little is known ab..."
wikitext
text/x-wiki
Retrieved from [https://web.archive.org/web/20100617022549/http://www.xbox-linux.org/wiki/PIC]
by ''Georg Lukas, Michael Steil, Jeff Mears'', 26 June 2002
Little is known about how to program the PIC. Basically, the PIC is an independent 16 bit microprocessor with its own RAM and I/O lines, connected to the CPU through the SMBus. Its own firmware makes it possible for the PIC to be talked to on a very high level. Flashing of the LED, for instance, is completely controlled by the PIC.
==Command overview==
{| class="wikitable"
|-
| '''Command'''
| '''Description'''
|-
| 0x01
| PIC version string
|-
| 0x03
| tray state
|-
| 0x04
| A/V Pack state
|-
| 0x09
| CPU temperature (C)
|-
| 0x0A
| board temperature (C)
|-
| 0x0F
| reads scratch register written with 0x0E
|-
| 0x10
| current fan speed (0~50)
|-
| 0x11
| interrupt reason
|-
| 0x18
| reading this reg locks up xbox in "overheated" state
|-
| 0x1B
| scratch register for the original kernel
|-
| 0x1C
| random number for boot challenge
|-
| 0x1D
| random number for boot challenge
|-
| 0x1E
| random number for boot challenge
|-
| 0x1F
| random number for boot challenge
|}
<br />
<br />
'''Writing:'''
<br />
{| class="wikitable"
|-
| '''Command'''
| '''Description'''
|-
| 0x01
| PIC version string counter reset
|-
| 0x02
| reset and power off control
|-
| 0x05
| power fan mode (0 = automatic; 1 = custom speed from reg
0x06)
|-
| 0x06
| power fan speed (0..~50)
|-
| 0x07
| LED mode (0 = automatic; 1 = custom sequence from reg 0x08)
|-
| 0x08
| LED flashing sequence
|-
| 0x0C
| tray eject (0 = eject; 1 = load)
|-
| 0x0E
| another scratch register? seems like an error code.
|-
| 0x19
| reset on eject (0 = enable; 1 = disable)
|-
| 0x1A
| interrupt enable (write 0x01 to enable; can't disable once
enabled)
|-
| 0x1B
| scratch register for the original kernel
|-
| 0x20
| response to PIC challenge (written first)
|-
| 0x21
| response to PIC challenge (written second)
|}
==PIC version string==
The PIC version can be read from register 0x01 as a 3-character ASCII string. Each time you read that register, the next of the 3 characters is returned. It repeats after the third read. Also, the counter can be reset to the first letter by writing 0x00 to this register. Some Xboxes have the letters "SMC P01" physically etched into the top of the PIC, and some have it on a sticker. The P01 is the version number. The following table shows known PIC versions:
<br />
{| class="wikitable"
|-
| '''Version'''
| '''Hex'''
| '''Description'''
|-
| P01
| 50 30 31
| retail xbox 1.0
|-
| P05
| 50 30 35
| retail xbox 1.1
|-
| DXB
| 44 58 42
| debug kit
|}
==Reset and Power Off==
The PIC controls the power system of the Xbox. To reset or power off the system, you write a request to register 0x02. Since the PIC takes some time to respond, you should do a cli/hlt loop after writing to the PIC. These are the values you can use (this is NOT a bitfield):
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| 0x01
| resets the system and all hardware
|-
| 0x40
| power cycle: powers off then on (also clears scratch register)
|-
| 0x80
| power off
|}
==The AV Pack==
The A/V connector on the xbox rear contains several pins to detect the kind of attached cable. In the PIC there is a register (0x04), where this information can be read out by software. The following values are known:
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| 0x00
| SCART
|-
| 0x01
| HDTV
|-
| 0x02
| VGA
|-
| 0x03
| RFU
|-
| 0x04
| S-Video
|-
| 0x05
| undefined
|-
| 0x06
| standard
|-
| 0x07
| missing/disconnected
|}
==The LED==
The PIC has its own timer to flash the LEDs: The LED color goes through four phases, 0 to 3. In each phase, the color of the LED can be different. The LED can be off, red, green, or, by turning on both red and green, orange. All the CPU has to do to make the PIC control the LED in a specified way is to transmit a byte containing the color sequence to it.
The PIC, by default, manages the LEDs itself. While the system is on, the LED normally is solid green. But when you hit eject, the PIC causes the LED to flash green. To override this, and control the LEDs as desired, you must write 0x01 to register 0x07 after writing your color sequence to 0x08.
Each phase consists of two bits, one for red and one for green, so four phases fit into a byte. Thus, the control byte looks as follows:
{| class="wikitable"
|-
| '''Bit #'''
| '''Description'''
|-
| 7
| Red (Phase 0)
|-
| 6
| Red (Phase 1)
|-
| 5
| Red (Phase 2)
|-
| 4
| Red (Phase 3)
|-
| 3
| Green (Phase 0)
|-
| 2
| Green (Phase 1)
|-
| 1
| Green (Phase 2)
|-
| 0
| Green (Phase 3)
|}
To set an LED code, the command code 0x08 and the LED code as data must to be sent to I2C device 0x20, followed by the command code 0x07 with a 0x01 as data, both in byte mode.
<pre> SMBusWriteCommand(0x20, 8, false, states);
SMBusWriteCommand(0x20, 7, false, 1);
</pre>
<br />
These are some example settings:
{| class="wikitable"
|-
| '''Code'''
| '''Binary'''
| '''Description'''
|-
| 0x00
| 00000000
| Off
|-
| 0xF0
| 11110000
| Solid red
|-
| 0x0F
| 00001111
| Solid green
|-
| 0xFF
| 11111111
| Solid orange
|-
| 0xC0
| 11000000
| Slow red flashing
|-
| 0xA0
| 10100000
| Fast red flashing
|-
| 0x63
| 01100011
| Off - red - orange - green flashing
|}
You can use the blink tool available from CVS as a frontend for this:
# blink ABCD
<br />
ABCD are the LED states for the four phases, possible values for every state are:
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| r
| red
|-
| g
| green
|-
| o
| orange (red+green)
|-
| x
| off
|}
If you want to make it slowly switch red/green, run blink rrgg, fast orange blinking can be achieved with blink oxox.
==Interrupt reasons==
The PIC sets the interrupt reason register (0x11) with a bitmask of the following values to indicate to the operating system why the interrupt occurred:
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| 0x01
| power button pressed
|-
| 0x10
| A/V Pack removed
|-
| 0x20
| eject button pressed
|}
==Scratch register values==
The original kernel uses this register (0x1B) to "remember" some information across a reboot, and interprets its contents after rebooting. The PIC itself probably makes no interpretation of this register. The register is a bitmask with the following values:
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| 0x01
| eject after boot
|-
| 0x02
| display error message after boot
|-
| 0x04
| skip boot animation
|-
| 0x08
| run dashboard no matter what
|}
==PIC Challenge (regs 0x1C~0x21)==
To try to thwart any attempt to hijack the entire boot process by bypassing the MCPX, the PIC does a security check on the booting ROM. After reset, the PIC gives the CPU about 250 ms to respond to a cryptographic challenge before the system is reset. The PIC generates four random(?) bytes, read from registers 0x1C~0x1F. To disable the countdown, you hash these four bytes and write the result to 0x20 and 0x21. Details of this process are given [https://web.archive.org/web/20100617022549/http://www.xbox-linux.org/docs/pichandshake.html here] .
On a "Debug Kit" (PIC version "DXB"), registers 0x1C~0x1F all return a value of 0x00. It is unknown whether the challenge system is active at all on these machines.
<hr />
(original version: [https://web.archive.org/web/20100617022549/http://www.xbox-linux.org/docs/smc.html])
c117f1bcd368bc49e41dd5e1a3a2a07b1b12ad80
5623
5606
2017-05-31T10:00:10Z
JayFoxRox
2
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617022549/http://www.xbox-linux.org/wiki/PIC|ours=SMC}}
by ''Georg Lukas, Michael Steil, Jeff Mears'', 26 June 2002
Little is known about how to program the PIC. Basically, the PIC is an independent 16 bit microprocessor with its own RAM and I/O lines, connected to the CPU through the SMBus. Its own firmware makes it possible for the PIC to be talked to on a very high level. Flashing of the LED, for instance, is completely controlled by the PIC.
==Command overview==
{| class="wikitable"
|-
| '''Command'''
| '''Description'''
|-
| 0x01
| PIC version string
|-
| 0x03
| tray state
|-
| 0x04
| A/V Pack state
|-
| 0x09
| CPU temperature (C)
|-
| 0x0A
| board temperature (C)
|-
| 0x0F
| reads scratch register written with 0x0E
|-
| 0x10
| current fan speed (0~50)
|-
| 0x11
| interrupt reason
|-
| 0x18
| reading this reg locks up xbox in "overheated" state
|-
| 0x1B
| scratch register for the original kernel
|-
| 0x1C
| random number for boot challenge
|-
| 0x1D
| random number for boot challenge
|-
| 0x1E
| random number for boot challenge
|-
| 0x1F
| random number for boot challenge
|}
<br />
<br />
'''Writing:'''
<br />
{| class="wikitable"
|-
| '''Command'''
| '''Description'''
|-
| 0x01
| PIC version string counter reset
|-
| 0x02
| reset and power off control
|-
| 0x05
| power fan mode (0 = automatic; 1 = custom speed from reg
0x06)
|-
| 0x06
| power fan speed (0..~50)
|-
| 0x07
| LED mode (0 = automatic; 1 = custom sequence from reg 0x08)
|-
| 0x08
| LED flashing sequence
|-
| 0x0C
| tray eject (0 = eject; 1 = load)
|-
| 0x0E
| another scratch register? seems like an error code.
|-
| 0x19
| reset on eject (0 = enable; 1 = disable)
|-
| 0x1A
| interrupt enable (write 0x01 to enable; can't disable once
enabled)
|-
| 0x1B
| scratch register for the original kernel
|-
| 0x20
| response to PIC challenge (written first)
|-
| 0x21
| response to PIC challenge (written second)
|}
==PIC version string==
The PIC version can be read from register 0x01 as a 3-character ASCII string. Each time you read that register, the next of the 3 characters is returned. It repeats after the third read. Also, the counter can be reset to the first letter by writing 0x00 to this register. Some Xboxes have the letters "SMC P01" physically etched into the top of the PIC, and some have it on a sticker. The P01 is the version number. The following table shows known PIC versions:
<br />
{| class="wikitable"
|-
| '''Version'''
| '''Hex'''
| '''Description'''
|-
| P01
| 50 30 31
| retail xbox 1.0
|-
| P05
| 50 30 35
| retail xbox 1.1
|-
| DXB
| 44 58 42
| debug kit
|}
==Reset and Power Off==
The PIC controls the power system of the Xbox. To reset or power off the system, you write a request to register 0x02. Since the PIC takes some time to respond, you should do a cli/hlt loop after writing to the PIC. These are the values you can use (this is NOT a bitfield):
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| 0x01
| resets the system and all hardware
|-
| 0x40
| power cycle: powers off then on (also clears scratch register)
|-
| 0x80
| power off
|}
==The AV Pack==
The A/V connector on the xbox rear contains several pins to detect the kind of attached cable. In the PIC there is a register (0x04), where this information can be read out by software. The following values are known:
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| 0x00
| SCART
|-
| 0x01
| HDTV
|-
| 0x02
| VGA
|-
| 0x03
| RFU
|-
| 0x04
| S-Video
|-
| 0x05
| undefined
|-
| 0x06
| standard
|-
| 0x07
| missing/disconnected
|}
==The LED==
The PIC has its own timer to flash the LEDs: The LED color goes through four phases, 0 to 3. In each phase, the color of the LED can be different. The LED can be off, red, green, or, by turning on both red and green, orange. All the CPU has to do to make the PIC control the LED in a specified way is to transmit a byte containing the color sequence to it.
The PIC, by default, manages the LEDs itself. While the system is on, the LED normally is solid green. But when you hit eject, the PIC causes the LED to flash green. To override this, and control the LEDs as desired, you must write 0x01 to register 0x07 after writing your color sequence to 0x08.
Each phase consists of two bits, one for red and one for green, so four phases fit into a byte. Thus, the control byte looks as follows:
{| class="wikitable"
|-
| '''Bit #'''
| '''Description'''
|-
| 7
| Red (Phase 0)
|-
| 6
| Red (Phase 1)
|-
| 5
| Red (Phase 2)
|-
| 4
| Red (Phase 3)
|-
| 3
| Green (Phase 0)
|-
| 2
| Green (Phase 1)
|-
| 1
| Green (Phase 2)
|-
| 0
| Green (Phase 3)
|}
To set an LED code, the command code 0x08 and the LED code as data must to be sent to I2C device 0x20, followed by the command code 0x07 with a 0x01 as data, both in byte mode.
<pre> SMBusWriteCommand(0x20, 8, false, states);
SMBusWriteCommand(0x20, 7, false, 1);
</pre>
<br />
These are some example settings:
{| class="wikitable"
|-
| '''Code'''
| '''Binary'''
| '''Description'''
|-
| 0x00
| 00000000
| Off
|-
| 0xF0
| 11110000
| Solid red
|-
| 0x0F
| 00001111
| Solid green
|-
| 0xFF
| 11111111
| Solid orange
|-
| 0xC0
| 11000000
| Slow red flashing
|-
| 0xA0
| 10100000
| Fast red flashing
|-
| 0x63
| 01100011
| Off - red - orange - green flashing
|}
You can use the blink tool available from CVS as a frontend for this:
# blink ABCD
<br />
ABCD are the LED states for the four phases, possible values for every state are:
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| r
| red
|-
| g
| green
|-
| o
| orange (red+green)
|-
| x
| off
|}
If you want to make it slowly switch red/green, run blink rrgg, fast orange blinking can be achieved with blink oxox.
==Interrupt reasons==
The PIC sets the interrupt reason register (0x11) with a bitmask of the following values to indicate to the operating system why the interrupt occurred:
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| 0x01
| power button pressed
|-
| 0x10
| A/V Pack removed
|-
| 0x20
| eject button pressed
|}
==Scratch register values==
The original kernel uses this register (0x1B) to "remember" some information across a reboot, and interprets its contents after rebooting. The PIC itself probably makes no interpretation of this register. The register is a bitmask with the following values:
{| class="wikitable"
|-
| '''Value'''
| '''Description'''
|-
| 0x01
| eject after boot
|-
| 0x02
| display error message after boot
|-
| 0x04
| skip boot animation
|-
| 0x08
| run dashboard no matter what
|}
==PIC Challenge (regs 0x1C~0x21)==
To try to thwart any attempt to hijack the entire boot process by bypassing the MCPX, the PIC does a security check on the booting ROM. After reset, the PIC gives the CPU about 250 ms to respond to a cryptographic challenge before the system is reset. The PIC generates four random(?) bytes, read from registers 0x1C~0x1F. To disable the countdown, you hash these four bytes and write the result to 0x20 and 0x21. Details of this process are given [https://web.archive.org/web/20100617022549/http://www.xbox-linux.org/docs/pichandshake.html here] .
On a "Debug Kit" (PIC version "DXB"), registers 0x1C~0x1F all return a value of 0x00. It is unknown whether the challenge system is active at all on these machines.
<hr />
(original version: [https://web.archive.org/web/20100617022549/http://www.xbox-linux.org/docs/smc.html])
20866a3e8ce7c34fc29c73736c4f19f581ae70de
Template:Fs-optical
10
3788
5610
2017-05-31T09:14:13Z
JayFoxRox
2
Created page with "[[File:Media-cdrom.svg.png|16px]] {{{1}}}"
wikitext
text/x-wiki
[[File:Media-cdrom.svg.png|16px]] {{{1}}}
91f27c232c1a04450c6e95677a850cfb71056cdb
Hard Drive Files
0
3679
5612
5024
2017-05-31T09:17:57Z
JayFoxRox
2
/* 185a6100 */
wikitext
text/x-wiki
The files on the Xbox look something like this (file sizes and MD5 checksums included):
<pre>
C
Audio
AmbientAudio
AMB_05_ENGINEROOM_LR.wav 5562348 565b84c327ef10b4854db6d3c943078e
AMB_06_COMMUNICATION_LR.wav 5412228 767c124d7260a8c0072ed21fb2d46915
AMB_12_HYDROTHUNDER_LR.wav 6447588 8fe6214758f24524ea7af2f3a30258a0
AMB_EC_Pinger1.wav 1259412 076eb4b27b9ff381a8e188898975fb4d
AMB_EC_Steam1.wav 656484 43ac56a62ed8459239b97a39e665af2f
AMB_EC_Steam2.wav 943836 337bc7e89097d2b3ddcdb0eab0a92e13
AMB_EC_Steam3.wav 516156 88537eaeed16c6a4475d3b3738623aab
AMB_EC_Steam4.wav 746556 b0916cc4d6668a9771afd01496f4e9d7
AMB_EC_Steam5.wav 737340 552e8c32ea1a04f69e98859e56077f1b
AMB_EC_Steam6.wav 534588 f4cbc9d9a4f32adf2844ab97df798c76
AMB_EC_Steam7.wav 1021884 f041eb53748e5d47410a188c6e280b15
AMB_EC_Voices1.wav 307932 741c2d6d63ba0b3b464ea5b6b318cdbc
AMB_EC_Voices10.wav 525372 28a17555fa442249cbd7861e80bcf5ac
AMB_EC_Voices11.wav 313404 1b97f1b14fcab2201da745ed4f44e491
AMB_EC_Voices12.wav 672828 80c65f6b627b259796927adc6dde86f6
AMB_EC_Voices13.wav 362580 026576c28474118b04cc4a09fb6b5480
AMB_EC_Voices2.wav 307644 b3de08af73e56f93c10147e0b7f3bc57
AMB_EC_Voices3.wav 695292 ce594325ac41b2d95bea4a1a2a0449b4
AMB_EC_Voices4.wav 521916 b368c2a8995b000c340d3e1408e0fdc5
AMB_EC_Voices5.wav 292092 bf018e7ad6d6d4531753ef7ea0a1d16e
AMB_EC_Voices6.wav 709692 be2f2d7447cb69309595e115f72e5500
AMB_EC_Voices7.wav 502332 1fb09252f8ac69036351661f653da142
AMB_EC_Voices8.wav 313404 aa2849ce3b7df30ffc894322f83a7497
AMB_EC_Voices9.wav 691260 4ff4887384d0d5697df491ea9ce6b51b
comm static 1.wav 39012 4820878be0a0c67e2e2bfd1a82e9af60
comm static 2.wav 71052 6db8cae9fd2a8a7cf8fa9d3abe53ea1d
comm static 3.wav 104172 2abe2439e393432e6ae4d596c283690c
comm static 4.wav 93948 5e00320ced41a87a79aedc7ceaf5d57c
comm voice 1.wav 189636 0b208c6775907edc63a65054fc807af5
comm voice 2.wav 196116 7af4f6576c1714391f1aa4a8b0100ca5
comm voice 3.wav 241044 08781a9e45eac3df26142d8478eb684d
comm voice 4.wav 69036 948c41545db45969e71c0a5e7614a22f
comm voice 5.wav 116484 d67a914b933f85f513f4d8e44d09980a
comm voice 6.wav 83796 1f595aeaef1bdfb501a91de7638fe28f
comm voice 7.wav 81852 b2b9fa426e3237ddeb79f0536869eca2
comm voice 8.wav 178620 df652e1d62a8b33af6a47acffb4fcadb
comm voice 9.wav 110076 39b0f0a3d6d5ec10055b68e602b8675c
Control Room Loop ver2.wav 543732 093c1519cb6bd6d6d3930d3f774b3485
Control Room Loop.wav 541860 0f23001b0319a568ac862ec7a1f5ee6f
MainAudio
Global A Button Select.wav 18708 895b82ec5a33bc8a786e2a690a734de3
Global B Button Back.wav 18708 45e2b8b11534d2da41900fa5ef5418f4
Global Completion Beep.wav 12012 2aa770f713594310639ec15ebf2695af
Global Delete_Destroy.wav 41820 cdefc6e08f772d2c4ab77a564dc50183
Global Error Message B.wav 14964 dade2d5ecb0b754ec69d4bb4e887d42e
Global Keyboard Stroke 1.wav 7044 e7662531b5b05431966732cb76a6fffa
Global Keyboard Stroke 2.wav 11220 b516137d9257d3b975f6d9ad82b75750
Global Main MenuBack3ver2.wav 32892 b825773a71e8d3655bd8998cbbb424f4
Global Main MenuFwd3ver2.wav 24108 e5035e8fb6d1d16c16c1fda2a3339153
Global Progress Bar.wav 235356 d9820e39524a3b37e982fa77004655be
Global Scroll Beep.wav 1572 67bc6aba697a1eb2714d8eda84da0405
MemoryAudio
Memory Controller Select.wav 15828 54e676b7ff4dcdd295fabf1dfb9290e5
Memory Games Select.wav 45348 9e95263f0767a62119aa38e668248957
Memory Memory Slot Select.wav 12084 bb86674f7a85e0bf6d9dfb569cfcead4
MusicAudio
Games Info Screen In MSurr.wav 63348 17a245d749339571cdc0fb9524a0ba20
Games Info Screen In.wav 63348 b02a19fcbbbe8f394c79c560e67fbeb6
Games Info Screen Out MSurr.wav 71052 c8a81e0046acbc0ce5712f7621422b5b
Games Info Screen Out.wav 5964 2080b7f318e72e06c8e3c8a03656d03c
Music CD Select.wav 30300 1104afb43a6aec2b678cda13befa811e
SettingsAudio
Settings Lang SubMenu Sel.wav 161340 73a89aab381849b9a51bf097293e9449
Settings Parent SubMenu Sel.wav 21372 74a51e1d0634f2a25585389c77b3dd63
TransitionAudio
Games Main Menu In_LR.wav 72132 4ebfcf1125ace7e7417e513cf55faf84
Games Main Menu Out_LR.wav 75444 9f1e83b02961528a8920693ba2654a24
Games Sub Menu In_LR.wav 74220 8be59cc1ea9dd4c1349e446554a9e50c
Games Sub Menu Out_LR.wav 83148 0d2b3642ed00c68ff26fea337bb21d17
Music Main Menu In_LR.wav 53484 cd9b4b30a8829689be34e10648b89257
Music Main Menu Out_LR.wav 51036 5dcceccf08ae7d4c537a1ad03d1b4d64
Music Select Track In_LR.wav 68388 80af0c1585d8f6fbfd02623182bc8155
Music Select Track Out_LR.wav 68100 e3aa18fd82b3d34df22e34b4fe3d49ed
Settings Main Menu In_LR.wav 188844 7553686ac2ab1f1f9c9e16929ffce5ab
Settings Main Menu Out_LR.wav 159252 4bc9fbffabb006fcc6d321ee4ba127ee
Settings Sub Menu In_LR.wav 97908 2b6b47c092d70ae2ef926ff521b9d3d1
Settings Sub Menu Out_LR.wav 60468 1439f81e8dfab007d9dda12e3b8d34df
fonts
XBox Book.xtf 14440996 8f5b7cee650f389f1c5c7bb5f70386bb
Xbox.xtf 19124720 de4a26c39de8001b95c749f8d3d22128
xboxdashdata.<see versions>
AccountSelection.xip 1322518 497f17cc0941611e438093e5af73feb9
default.xip 1619954 c5f0ac7c917ff431739be68528562990
dvd.xip 167045 64feb8f1e5844fc3d4c4a4269677b8a3
jkeyboard.xip 732966 e2d462cd3df9f57a0d572f3229a87b51
Keyboard.xip 658238 c1b2b05a0a47a521d1f7d05ecb566432
LiveToday.xip 1226668 5f33f99506bb687bad95a735c6a9ea80
mainmenu5.xip 2300516 f2e318a54e2a7326c5b42c6def7d64d4
memory_files2.xip 2708134 295fcaec6ad66b14cf51c94d0ac1b999
Memory2.xip 2218462 4c7fcc324216117b8d54a273eb581c29
Message.xip 801609 abd85ff52590e61e0b7081f650175bae
music_copy3.xip 1618605 2f7257186e5093b09a1fe5d96716b0c6
Music_PlayEdit2.xip 2593642 628a0c8ce9ee64a6fd3bc339fbb28913
music2.xip 2007578 4979f2dbcf721c1702cde15ed7961800
PasscodeVerify.xip 2813123 f25f5447def27c67d5842bfc0474b28f
settings_adoc.xip 4208200 a73817afb22f622fc4c25bbd291db66a
Settings_Clock.xip 1684098 c49e21dacb92d81ed18380e4354904e1
settings_language.xip 1429750 cf45a77a9bf6dc972344c6cee48adacc
settings_list.xip 2928635 123a550fafb5c08b7a0c4437f7989820
settings_panel.xip 2813123 f25f5447def27c67d5842bfc0474b28f
settings_parental.xip 1008362 1ae35811db2ecf5af08695ae8b681e6d
settings_timezone.xip 1371154 b148d86596529ae3abaec6bb3185d13b
settings_video.xip 1978178 a91d26866b85bf80005a7fc1ba59b442
settings3.xip 2966303 8d6076c0ee3a22646c0764c34296c8b8
WaitCursor.xip 33641 6ccd2d7f083ef995f3f67ce747e289a9
xodash
audio
LiveNowAudio
Friend Offline.wav 54092 41b7a8fe061a1ff2552c9bf1188736f5
Friend Online.wav 54060 81ccfe1005276370c5cbb3e708807b62
Friend Request.wav 52436 d7c8b57e754b761d1b3101b3e709b3dd
Game Invite.wav 29396 cd580938613a5407eb8bcaffe2688667
VoiceChatAudio
Voice Chat Join.wav 26156 7fb1fe01240795fcbf564dabfad01b21
Voice Chat Leave.wav 37028 8021bcf17888d2803c0e419cffa7dbb5
media
Content
Japanese
coc_jpn.txt 2347 f2feb7aa376a74240926d158dd74d65d
ximejpm.dic 250528 b1a7b55b9694ed6a47a2b901415e6fc5
ximejps.dic 188288 83f581a5d8023013de26eb65b1467486
SavedGame
SaveImage.xbx 18432 f378f3f8f19f3f679ee6a3a7497e104d
TitleImage.xbx 67584 6327fec35dd1abe0c3f33ac5cde11c10
TitleMeta.xbx 800 630de678413ed09e15ae45aa231c1af6
TChinese
twroc.dic 55226 48d0d50142126651f6090ec99e00b8c5
Xbg
3_doublebutton.xbg 207993 42b0b013d2c2e5817a3e4c8ab04bffb4
act_accountpin.xbg 653118 fe632805e6d6729e7e442fc96771a7d9
act_activation.xbg 59625 a7db0e486f391ad9101ee7d9a6abe7ca
act_admin_policy.xbg 71938 135c297799488b118e93deb8ba6ea44e
act_alt_names.xbg 84324 158225c13adae3057c062fb8f6730be7
act_billing.xbg 226372 fb04f93f5afed327400f6dae41a3f4e8
act_congrats.xbg 145440 4f773200049c715436c27cad462d3725
act_copy_delete.xbg 888221 66321645c2e21dc97221946871ad8894
act_country.xbg 184789 11ef5a0db7ff1c4e57c372f5ca8a474c
act_forced_name.xbg 70512 b47c0cd89ef89019b8d4fb7e9f29078a
act_id.xbg 80213 d7b2f7b2c8444c353a00b61963a37ff0
act_message_server.xbg 241052 6876fb92e1c92afc662562fb99a5abb4
act_new_opt_in.xbg 283121 2997402d4dd252d0746e5790b35abeab
act_online.xbg 77774 dbd09ce5f9fd916724997bbe64aa7e6c
act_overwrite.xbg 578090 c71ca452229dcd95bfee26b7d9424f3a
act_passcode.xbg 722464 81526772f069a1c81b76254399fb8666
act_restrictions.xbg 198867 ecbfd5abe9bde3f28e7e21722c85e47c
act_state.xbg 797805 1f2a1cacb023ac3c754d9548a38e8039
act_sub_3button.xbg 158866 112821cc587d1ad4cc99fa0d0a917273
act_sure.xbg 65137 5c1540d7ccec2c6607c8b0510f8f825a
act_user_options.xbg 185180 e496c0538f2b825186b00e30f5709931
act_users2.xbg 88313 12ce8b2ae9d7d450660b7de5aebcaaf8
addfriend.xbg 1890765 f6bf945bea8ef86d593109b2d1866b89
anim_connecting.xbg 1034604 d414eabc933dc46e64b3703c54b8e574
anim_wait_5.xbg 25575 007a7e8f3f4b262414100cc48d8cbdb0
backbutton.xbg 81349 6b894fe7c6392836808dc6230bd7b0d0
bud_actions.xbg 146828 dbc004a2b3081507ae2c2efed71fb4a3
cellwall.xbg 190846 219a43d501df170e4affcae9e4b35e92
contextual.xbg 1937307 007ac7c3ddedad86a662bc9b115d1f00
feedback.xbg 1929240 d26e11eb96b135eac630dfcee1b7e5fb
friends.xbg 2224276 afae13fb39cc559c24c85262509e888e
gen_dob_tumblers.xbg 1276515 83c24a1a6ed4f405dc0caad816a0a204
gen_exp_tumblers.xbg 1262446 9e4d5fd47c810132f42bf9bc173a1908
gen_large_panel.xbg 210906 814dfbf474a031ab82f6271a4c0648db
gen_mess_panel.xbg 347851 397c04b140e03b293b1a104e540d73fc
j_candidates.xbg 254619 060728bbf7498173420a45be61b7c339
j_keyboard.xbg 737322 88c480d6b5ab9feb95b3e906760e2373
k_keyboard.xbg 426877 6388aede82d338db42b55752aa5b9d06
keyboard.xbg 375657 873fbf9ec6585103346bf0a381f95d93
keypad.xbg 202889 decf2d76e67af781ad34c220be6308f8
nts_dns.xbg 192159 bd54bc1e4246605937a828b3b6278a95
nts_ip.xbg 202623 9e100d8c7029c20cfc9bd7ee0fa6bc65
nts_settings.xbg 216718 512de7f31ef378651a5e783965ea7f24
nts_status.xbg 181806 0a0d4a2ed3c61c86258d6d3ae3fe3837
nts_wireless.xbg 231935 82a12b613465f617c90c7fdce118adef
orb_master.xbg 348747 c259f4d1276582d32044826f6d88cedc
selectbutton.xbg 73523 bf0fcf1cde1d1aa92b7335ab5d8c10a3
t_keyboard.xbg 405161 912e6bd830337868cb9b51d30c8c0121
voicechat.xbg 2327218 dd2e8dcea71fc8fa661daa7d6c9b0f6d
voicemail.xbg 1948139 662585947a38eff1b5e74e871ea4d5be
Xbx
button.xbx 10240 fc14f24784a74a5d48004e48880086cb
cellwall.xbx 67584 ff23d97f5263ee657cdd7d528bb1c95e
darken_opacity.xbx 18432 7f24ebbab4f77fe612d0dd9491001e49
Disabled.xbx 10240 6d8da8de70e262767600d2b84eec43c2
disabled_highlight.xbx 6144 64f4dd2e2f5539ad6a11417abe0ef336
footer.xbx 34816 6a2124d31b374d9c3f426436aec35161
GameHilite_01.xbx 6144 c4fa23bce07f08dd360565d9b267b0b0
highlight.xbx 10240 1e99278554e5d4a0e42b808ebd833385
keyboard_alpha.xbx 18432 65553de7e37186f96942948cbe4639b9
Live_header.xbx 34816 fc46134b8dd7abf183e1d466d5afe6bf
live_highlight_disabled.xbx 10240 5a2da8c4c763cdcf6ab7c23deaa64205
LiveChrome.xbx 67584 f64b49852005cc389d205ea1de8d1048
mess_panel_backing.xbx 18432 24459f91d4de55a521d2c75da81ac7de
Options.xbx 18432 9e442a174906ef3e06c04c5cd43b6ddd
panel1.xbx 18432 7ef04f5b0d0ce60e9ac385d5734d35a3
panel10.xbx 10240 2852c18e0b898a0cd0f74d957d1c4e1f
panel11.xbx 18432 188290082b02fc03a2656ffdc131f309
panel12.xbx 18432 bf234eb3313b4af0f04a7eea816b0819
panel13.xbx 18432 c465aaacf64ff98d7e5c7501f15df4cd
panel14.xbx 18432 5b52636f2ae781df267c27ba4f1fa1f4
panel15.xbx 10240 43ce1530ac07161c65b1ff5d02ddaf07
panel16.xbx 18432 1c35588436ba6d4a437fb1d22e8ed029
panel17.xbx 10240 7b9d574182f87b7c8bb9b1f16d07a234
panel18.xbx 18432 192a162567836159e44355a13b108ec6
panel19.xbx 18432 3d205c154cd434ae46009670b8a5c830
panel2.xbx 18432 4958bbd39d6adc867a323bd14e7fedfb
panel20.xbx 18432 70fcee44a106f94f3d505b8fe36e89bd
panel3.xbx 18432 7ddc37a40c11f91c4f5709275753682c
panel4.xbx 18432 54ca9e18cadcabd704eff52270cf5aef
panel5.xbx 18432 9a92cefceb843e4b634ef4862b2838f0
panel6.xbx 18432 5220d145a2d73f10018f822b746a33f9
panel7.xbx 18432 0fb78b53c5b037f006342a10f13447f5
panel8.xbx 18432 212a8b96d91eaab3788d33ea3f0f99d0
panel9.xbx 18432 25b985d4c995f4898ea1c3344cf0d2f0
Plain_header.xbx 34816 494a987d8bf0000ff972ec0926aa08dd
pulse_3D_64_matte_trans.xbx 4096 7d9b93b859d90f855dbb0a17170821bc
Pulse1.xbx 34816 364898b79abf0110779b849a4df38154
ridges.xbx 34816 caabfdb8e5aa2390d001d60247ff3b72
wireframe.xbx 10240 48468dbefff5fb21d52f8b66418a89f2
xbox2.xbx 264192 e86870b16246b4399a86c592a1f87b3b
xbox4.xbx 67584 67f33ec44e706a322e2550a342340a3c
xboxlogo.xbx 264192 77cf58d065229b28edda8b08709ac31d
xboxlogow.xbx 264192 c4816fb72fe27cd18bb04a109b9facd1
update.xbe 2260992 <see versions>
xonlinedash.xbe 2617344 <see versions>
XBox Book.xtf 17068868 54751950aa215228a4915955f7d2ce0c
Xbox.xtf 15613736 0466dd6c19ec9c1785e8aadfc8c5269e
xboxdash.xbe 1961984 <see versions>
E
TDATA
UDATA
</pre>
I have seen a few differences. I thought all my Xboxs had the same dashboard version, but I have 2 slightly different versions of files:
== 185ead00 ==
Here are the differences for this dashboard
<pre>
C
xboxdashdata.185ead00
xodash
update.xbe 2260992 bc99ef8730158ba1bf3f1c9c84520661
xonlinedash.xbe 2617344 8149654a030d813bcc02a24f39fd3ce9
xboxdash.xbe 1961984 08d3a6f99184679aa13008d6397bacce
</pre>
== 185a6100 ==
Here are the differences for this dashboard
* {{fs-drive|C:}}
** {{fs-folder|xboxdashdata.185a6100}}
** {{fs-folder|xodash}}
*** {{fs-file|update.xbe|size=2260992|hash=78ad0f3f0cb83010728e00457a778121}}
*** {{fs-file|xonlinedash.xbe|size=2617344|hash=01dd6c8aa72b473ba1523c73c6527d86}}
** {{fs-file|xboxdash.xbe|size=1961984|hash=1fa397b44ec78965ef955539fd8f4fbd}}
5ed4dde0cbfc7033c4fcdcc04304941a76cb569a
5613
5612
2017-05-31T09:20:51Z
JayFoxRox
2
/* 185ead00 */
wikitext
text/x-wiki
The files on the Xbox look something like this (file sizes and MD5 checksums included):
<pre>
C
Audio
AmbientAudio
AMB_05_ENGINEROOM_LR.wav 5562348 565b84c327ef10b4854db6d3c943078e
AMB_06_COMMUNICATION_LR.wav 5412228 767c124d7260a8c0072ed21fb2d46915
AMB_12_HYDROTHUNDER_LR.wav 6447588 8fe6214758f24524ea7af2f3a30258a0
AMB_EC_Pinger1.wav 1259412 076eb4b27b9ff381a8e188898975fb4d
AMB_EC_Steam1.wav 656484 43ac56a62ed8459239b97a39e665af2f
AMB_EC_Steam2.wav 943836 337bc7e89097d2b3ddcdb0eab0a92e13
AMB_EC_Steam3.wav 516156 88537eaeed16c6a4475d3b3738623aab
AMB_EC_Steam4.wav 746556 b0916cc4d6668a9771afd01496f4e9d7
AMB_EC_Steam5.wav 737340 552e8c32ea1a04f69e98859e56077f1b
AMB_EC_Steam6.wav 534588 f4cbc9d9a4f32adf2844ab97df798c76
AMB_EC_Steam7.wav 1021884 f041eb53748e5d47410a188c6e280b15
AMB_EC_Voices1.wav 307932 741c2d6d63ba0b3b464ea5b6b318cdbc
AMB_EC_Voices10.wav 525372 28a17555fa442249cbd7861e80bcf5ac
AMB_EC_Voices11.wav 313404 1b97f1b14fcab2201da745ed4f44e491
AMB_EC_Voices12.wav 672828 80c65f6b627b259796927adc6dde86f6
AMB_EC_Voices13.wav 362580 026576c28474118b04cc4a09fb6b5480
AMB_EC_Voices2.wav 307644 b3de08af73e56f93c10147e0b7f3bc57
AMB_EC_Voices3.wav 695292 ce594325ac41b2d95bea4a1a2a0449b4
AMB_EC_Voices4.wav 521916 b368c2a8995b000c340d3e1408e0fdc5
AMB_EC_Voices5.wav 292092 bf018e7ad6d6d4531753ef7ea0a1d16e
AMB_EC_Voices6.wav 709692 be2f2d7447cb69309595e115f72e5500
AMB_EC_Voices7.wav 502332 1fb09252f8ac69036351661f653da142
AMB_EC_Voices8.wav 313404 aa2849ce3b7df30ffc894322f83a7497
AMB_EC_Voices9.wav 691260 4ff4887384d0d5697df491ea9ce6b51b
comm static 1.wav 39012 4820878be0a0c67e2e2bfd1a82e9af60
comm static 2.wav 71052 6db8cae9fd2a8a7cf8fa9d3abe53ea1d
comm static 3.wav 104172 2abe2439e393432e6ae4d596c283690c
comm static 4.wav 93948 5e00320ced41a87a79aedc7ceaf5d57c
comm voice 1.wav 189636 0b208c6775907edc63a65054fc807af5
comm voice 2.wav 196116 7af4f6576c1714391f1aa4a8b0100ca5
comm voice 3.wav 241044 08781a9e45eac3df26142d8478eb684d
comm voice 4.wav 69036 948c41545db45969e71c0a5e7614a22f
comm voice 5.wav 116484 d67a914b933f85f513f4d8e44d09980a
comm voice 6.wav 83796 1f595aeaef1bdfb501a91de7638fe28f
comm voice 7.wav 81852 b2b9fa426e3237ddeb79f0536869eca2
comm voice 8.wav 178620 df652e1d62a8b33af6a47acffb4fcadb
comm voice 9.wav 110076 39b0f0a3d6d5ec10055b68e602b8675c
Control Room Loop ver2.wav 543732 093c1519cb6bd6d6d3930d3f774b3485
Control Room Loop.wav 541860 0f23001b0319a568ac862ec7a1f5ee6f
MainAudio
Global A Button Select.wav 18708 895b82ec5a33bc8a786e2a690a734de3
Global B Button Back.wav 18708 45e2b8b11534d2da41900fa5ef5418f4
Global Completion Beep.wav 12012 2aa770f713594310639ec15ebf2695af
Global Delete_Destroy.wav 41820 cdefc6e08f772d2c4ab77a564dc50183
Global Error Message B.wav 14964 dade2d5ecb0b754ec69d4bb4e887d42e
Global Keyboard Stroke 1.wav 7044 e7662531b5b05431966732cb76a6fffa
Global Keyboard Stroke 2.wav 11220 b516137d9257d3b975f6d9ad82b75750
Global Main MenuBack3ver2.wav 32892 b825773a71e8d3655bd8998cbbb424f4
Global Main MenuFwd3ver2.wav 24108 e5035e8fb6d1d16c16c1fda2a3339153
Global Progress Bar.wav 235356 d9820e39524a3b37e982fa77004655be
Global Scroll Beep.wav 1572 67bc6aba697a1eb2714d8eda84da0405
MemoryAudio
Memory Controller Select.wav 15828 54e676b7ff4dcdd295fabf1dfb9290e5
Memory Games Select.wav 45348 9e95263f0767a62119aa38e668248957
Memory Memory Slot Select.wav 12084 bb86674f7a85e0bf6d9dfb569cfcead4
MusicAudio
Games Info Screen In MSurr.wav 63348 17a245d749339571cdc0fb9524a0ba20
Games Info Screen In.wav 63348 b02a19fcbbbe8f394c79c560e67fbeb6
Games Info Screen Out MSurr.wav 71052 c8a81e0046acbc0ce5712f7621422b5b
Games Info Screen Out.wav 5964 2080b7f318e72e06c8e3c8a03656d03c
Music CD Select.wav 30300 1104afb43a6aec2b678cda13befa811e
SettingsAudio
Settings Lang SubMenu Sel.wav 161340 73a89aab381849b9a51bf097293e9449
Settings Parent SubMenu Sel.wav 21372 74a51e1d0634f2a25585389c77b3dd63
TransitionAudio
Games Main Menu In_LR.wav 72132 4ebfcf1125ace7e7417e513cf55faf84
Games Main Menu Out_LR.wav 75444 9f1e83b02961528a8920693ba2654a24
Games Sub Menu In_LR.wav 74220 8be59cc1ea9dd4c1349e446554a9e50c
Games Sub Menu Out_LR.wav 83148 0d2b3642ed00c68ff26fea337bb21d17
Music Main Menu In_LR.wav 53484 cd9b4b30a8829689be34e10648b89257
Music Main Menu Out_LR.wav 51036 5dcceccf08ae7d4c537a1ad03d1b4d64
Music Select Track In_LR.wav 68388 80af0c1585d8f6fbfd02623182bc8155
Music Select Track Out_LR.wav 68100 e3aa18fd82b3d34df22e34b4fe3d49ed
Settings Main Menu In_LR.wav 188844 7553686ac2ab1f1f9c9e16929ffce5ab
Settings Main Menu Out_LR.wav 159252 4bc9fbffabb006fcc6d321ee4ba127ee
Settings Sub Menu In_LR.wav 97908 2b6b47c092d70ae2ef926ff521b9d3d1
Settings Sub Menu Out_LR.wav 60468 1439f81e8dfab007d9dda12e3b8d34df
fonts
XBox Book.xtf 14440996 8f5b7cee650f389f1c5c7bb5f70386bb
Xbox.xtf 19124720 de4a26c39de8001b95c749f8d3d22128
xboxdashdata.<see versions>
AccountSelection.xip 1322518 497f17cc0941611e438093e5af73feb9
default.xip 1619954 c5f0ac7c917ff431739be68528562990
dvd.xip 167045 64feb8f1e5844fc3d4c4a4269677b8a3
jkeyboard.xip 732966 e2d462cd3df9f57a0d572f3229a87b51
Keyboard.xip 658238 c1b2b05a0a47a521d1f7d05ecb566432
LiveToday.xip 1226668 5f33f99506bb687bad95a735c6a9ea80
mainmenu5.xip 2300516 f2e318a54e2a7326c5b42c6def7d64d4
memory_files2.xip 2708134 295fcaec6ad66b14cf51c94d0ac1b999
Memory2.xip 2218462 4c7fcc324216117b8d54a273eb581c29
Message.xip 801609 abd85ff52590e61e0b7081f650175bae
music_copy3.xip 1618605 2f7257186e5093b09a1fe5d96716b0c6
Music_PlayEdit2.xip 2593642 628a0c8ce9ee64a6fd3bc339fbb28913
music2.xip 2007578 4979f2dbcf721c1702cde15ed7961800
PasscodeVerify.xip 2813123 f25f5447def27c67d5842bfc0474b28f
settings_adoc.xip 4208200 a73817afb22f622fc4c25bbd291db66a
Settings_Clock.xip 1684098 c49e21dacb92d81ed18380e4354904e1
settings_language.xip 1429750 cf45a77a9bf6dc972344c6cee48adacc
settings_list.xip 2928635 123a550fafb5c08b7a0c4437f7989820
settings_panel.xip 2813123 f25f5447def27c67d5842bfc0474b28f
settings_parental.xip 1008362 1ae35811db2ecf5af08695ae8b681e6d
settings_timezone.xip 1371154 b148d86596529ae3abaec6bb3185d13b
settings_video.xip 1978178 a91d26866b85bf80005a7fc1ba59b442
settings3.xip 2966303 8d6076c0ee3a22646c0764c34296c8b8
WaitCursor.xip 33641 6ccd2d7f083ef995f3f67ce747e289a9
xodash
audio
LiveNowAudio
Friend Offline.wav 54092 41b7a8fe061a1ff2552c9bf1188736f5
Friend Online.wav 54060 81ccfe1005276370c5cbb3e708807b62
Friend Request.wav 52436 d7c8b57e754b761d1b3101b3e709b3dd
Game Invite.wav 29396 cd580938613a5407eb8bcaffe2688667
VoiceChatAudio
Voice Chat Join.wav 26156 7fb1fe01240795fcbf564dabfad01b21
Voice Chat Leave.wav 37028 8021bcf17888d2803c0e419cffa7dbb5
media
Content
Japanese
coc_jpn.txt 2347 f2feb7aa376a74240926d158dd74d65d
ximejpm.dic 250528 b1a7b55b9694ed6a47a2b901415e6fc5
ximejps.dic 188288 83f581a5d8023013de26eb65b1467486
SavedGame
SaveImage.xbx 18432 f378f3f8f19f3f679ee6a3a7497e104d
TitleImage.xbx 67584 6327fec35dd1abe0c3f33ac5cde11c10
TitleMeta.xbx 800 630de678413ed09e15ae45aa231c1af6
TChinese
twroc.dic 55226 48d0d50142126651f6090ec99e00b8c5
Xbg
3_doublebutton.xbg 207993 42b0b013d2c2e5817a3e4c8ab04bffb4
act_accountpin.xbg 653118 fe632805e6d6729e7e442fc96771a7d9
act_activation.xbg 59625 a7db0e486f391ad9101ee7d9a6abe7ca
act_admin_policy.xbg 71938 135c297799488b118e93deb8ba6ea44e
act_alt_names.xbg 84324 158225c13adae3057c062fb8f6730be7
act_billing.xbg 226372 fb04f93f5afed327400f6dae41a3f4e8
act_congrats.xbg 145440 4f773200049c715436c27cad462d3725
act_copy_delete.xbg 888221 66321645c2e21dc97221946871ad8894
act_country.xbg 184789 11ef5a0db7ff1c4e57c372f5ca8a474c
act_forced_name.xbg 70512 b47c0cd89ef89019b8d4fb7e9f29078a
act_id.xbg 80213 d7b2f7b2c8444c353a00b61963a37ff0
act_message_server.xbg 241052 6876fb92e1c92afc662562fb99a5abb4
act_new_opt_in.xbg 283121 2997402d4dd252d0746e5790b35abeab
act_online.xbg 77774 dbd09ce5f9fd916724997bbe64aa7e6c
act_overwrite.xbg 578090 c71ca452229dcd95bfee26b7d9424f3a
act_passcode.xbg 722464 81526772f069a1c81b76254399fb8666
act_restrictions.xbg 198867 ecbfd5abe9bde3f28e7e21722c85e47c
act_state.xbg 797805 1f2a1cacb023ac3c754d9548a38e8039
act_sub_3button.xbg 158866 112821cc587d1ad4cc99fa0d0a917273
act_sure.xbg 65137 5c1540d7ccec2c6607c8b0510f8f825a
act_user_options.xbg 185180 e496c0538f2b825186b00e30f5709931
act_users2.xbg 88313 12ce8b2ae9d7d450660b7de5aebcaaf8
addfriend.xbg 1890765 f6bf945bea8ef86d593109b2d1866b89
anim_connecting.xbg 1034604 d414eabc933dc46e64b3703c54b8e574
anim_wait_5.xbg 25575 007a7e8f3f4b262414100cc48d8cbdb0
backbutton.xbg 81349 6b894fe7c6392836808dc6230bd7b0d0
bud_actions.xbg 146828 dbc004a2b3081507ae2c2efed71fb4a3
cellwall.xbg 190846 219a43d501df170e4affcae9e4b35e92
contextual.xbg 1937307 007ac7c3ddedad86a662bc9b115d1f00
feedback.xbg 1929240 d26e11eb96b135eac630dfcee1b7e5fb
friends.xbg 2224276 afae13fb39cc559c24c85262509e888e
gen_dob_tumblers.xbg 1276515 83c24a1a6ed4f405dc0caad816a0a204
gen_exp_tumblers.xbg 1262446 9e4d5fd47c810132f42bf9bc173a1908
gen_large_panel.xbg 210906 814dfbf474a031ab82f6271a4c0648db
gen_mess_panel.xbg 347851 397c04b140e03b293b1a104e540d73fc
j_candidates.xbg 254619 060728bbf7498173420a45be61b7c339
j_keyboard.xbg 737322 88c480d6b5ab9feb95b3e906760e2373
k_keyboard.xbg 426877 6388aede82d338db42b55752aa5b9d06
keyboard.xbg 375657 873fbf9ec6585103346bf0a381f95d93
keypad.xbg 202889 decf2d76e67af781ad34c220be6308f8
nts_dns.xbg 192159 bd54bc1e4246605937a828b3b6278a95
nts_ip.xbg 202623 9e100d8c7029c20cfc9bd7ee0fa6bc65
nts_settings.xbg 216718 512de7f31ef378651a5e783965ea7f24
nts_status.xbg 181806 0a0d4a2ed3c61c86258d6d3ae3fe3837
nts_wireless.xbg 231935 82a12b613465f617c90c7fdce118adef
orb_master.xbg 348747 c259f4d1276582d32044826f6d88cedc
selectbutton.xbg 73523 bf0fcf1cde1d1aa92b7335ab5d8c10a3
t_keyboard.xbg 405161 912e6bd830337868cb9b51d30c8c0121
voicechat.xbg 2327218 dd2e8dcea71fc8fa661daa7d6c9b0f6d
voicemail.xbg 1948139 662585947a38eff1b5e74e871ea4d5be
Xbx
button.xbx 10240 fc14f24784a74a5d48004e48880086cb
cellwall.xbx 67584 ff23d97f5263ee657cdd7d528bb1c95e
darken_opacity.xbx 18432 7f24ebbab4f77fe612d0dd9491001e49
Disabled.xbx 10240 6d8da8de70e262767600d2b84eec43c2
disabled_highlight.xbx 6144 64f4dd2e2f5539ad6a11417abe0ef336
footer.xbx 34816 6a2124d31b374d9c3f426436aec35161
GameHilite_01.xbx 6144 c4fa23bce07f08dd360565d9b267b0b0
highlight.xbx 10240 1e99278554e5d4a0e42b808ebd833385
keyboard_alpha.xbx 18432 65553de7e37186f96942948cbe4639b9
Live_header.xbx 34816 fc46134b8dd7abf183e1d466d5afe6bf
live_highlight_disabled.xbx 10240 5a2da8c4c763cdcf6ab7c23deaa64205
LiveChrome.xbx 67584 f64b49852005cc389d205ea1de8d1048
mess_panel_backing.xbx 18432 24459f91d4de55a521d2c75da81ac7de
Options.xbx 18432 9e442a174906ef3e06c04c5cd43b6ddd
panel1.xbx 18432 7ef04f5b0d0ce60e9ac385d5734d35a3
panel10.xbx 10240 2852c18e0b898a0cd0f74d957d1c4e1f
panel11.xbx 18432 188290082b02fc03a2656ffdc131f309
panel12.xbx 18432 bf234eb3313b4af0f04a7eea816b0819
panel13.xbx 18432 c465aaacf64ff98d7e5c7501f15df4cd
panel14.xbx 18432 5b52636f2ae781df267c27ba4f1fa1f4
panel15.xbx 10240 43ce1530ac07161c65b1ff5d02ddaf07
panel16.xbx 18432 1c35588436ba6d4a437fb1d22e8ed029
panel17.xbx 10240 7b9d574182f87b7c8bb9b1f16d07a234
panel18.xbx 18432 192a162567836159e44355a13b108ec6
panel19.xbx 18432 3d205c154cd434ae46009670b8a5c830
panel2.xbx 18432 4958bbd39d6adc867a323bd14e7fedfb
panel20.xbx 18432 70fcee44a106f94f3d505b8fe36e89bd
panel3.xbx 18432 7ddc37a40c11f91c4f5709275753682c
panel4.xbx 18432 54ca9e18cadcabd704eff52270cf5aef
panel5.xbx 18432 9a92cefceb843e4b634ef4862b2838f0
panel6.xbx 18432 5220d145a2d73f10018f822b746a33f9
panel7.xbx 18432 0fb78b53c5b037f006342a10f13447f5
panel8.xbx 18432 212a8b96d91eaab3788d33ea3f0f99d0
panel9.xbx 18432 25b985d4c995f4898ea1c3344cf0d2f0
Plain_header.xbx 34816 494a987d8bf0000ff972ec0926aa08dd
pulse_3D_64_matte_trans.xbx 4096 7d9b93b859d90f855dbb0a17170821bc
Pulse1.xbx 34816 364898b79abf0110779b849a4df38154
ridges.xbx 34816 caabfdb8e5aa2390d001d60247ff3b72
wireframe.xbx 10240 48468dbefff5fb21d52f8b66418a89f2
xbox2.xbx 264192 e86870b16246b4399a86c592a1f87b3b
xbox4.xbx 67584 67f33ec44e706a322e2550a342340a3c
xboxlogo.xbx 264192 77cf58d065229b28edda8b08709ac31d
xboxlogow.xbx 264192 c4816fb72fe27cd18bb04a109b9facd1
update.xbe 2260992 <see versions>
xonlinedash.xbe 2617344 <see versions>
XBox Book.xtf 17068868 54751950aa215228a4915955f7d2ce0c
Xbox.xtf 15613736 0466dd6c19ec9c1785e8aadfc8c5269e
xboxdash.xbe 1961984 <see versions>
E
TDATA
UDATA
</pre>
I have seen a few differences. I thought all my Xboxs had the same dashboard version, but I have 2 slightly different versions of files:
== 185ead00 ==
Here are the differences for this dashboard
* {{fs-drive|C:}}
** {{fs-folder|xboxdashdata.185ead00}}
** {{fs-folder|xodash}}
*** {{fs-file|update.xbe|size=2260992|hash=bc99ef8730158ba1bf3f1c9c84520661}}
*** {{fs-file|xonlinedash.xbe|size=2617344|hash=8149654a030d813bcc02a24f39fd3ce9}}
** {{fs-file|xboxdash.xbe|size=1961984|hash=08d3a6f99184679aa13008d6397bacce}}
== 185a6100 ==
Here are the differences for this dashboard
* {{fs-drive|C:}}
** {{fs-folder|xboxdashdata.185a6100}}
** {{fs-folder|xodash}}
*** {{fs-file|update.xbe|size=2260992|hash=78ad0f3f0cb83010728e00457a778121}}
*** {{fs-file|xonlinedash.xbe|size=2617344|hash=01dd6c8aa72b473ba1523c73c6527d86}}
** {{fs-file|xboxdash.xbe|size=1961984|hash=1fa397b44ec78965ef955539fd8f4fbd}}
87a2f7377fe3a26e25bbb9b1d11f4a5bdd57ee3c
5619
5613
2017-05-31T09:49:58Z
JayFoxRox
2
wikitext
text/x-wiki
The files on the Xbox look something like this (The checksums are MD5):
* {{fs-drive|C:}}
** {{fs-folder|Audio}}
*** {{fs-folder|AmbientAudio}}
**** {{fs-file|AMB_05_ENGINEROOM_LR.wav|size=5562348|hash=565b84c327ef10b4854db6d3c943078e}}
**** {{fs-file|AMB_06_COMMUNICATION_LR.wav|size=5412228|hash=767c124d7260a8c0072ed21fb2d46915}}
**** {{fs-file|AMB_12_HYDROTHUNDER_LR.wav|size=6447588|hash=8fe6214758f24524ea7af2f3a30258a0}}
**** {{fs-file|AMB_EC_Pinger1.wav|size=1259412|hash=076eb4b27b9ff381a8e188898975fb4d}}
**** {{fs-file|AMB_EC_Steam1.wav|size=656484|hash=43ac56a62ed8459239b97a39e665af2f}}
**** {{fs-file|AMB_EC_Steam2.wav|size=943836|hash=337bc7e89097d2b3ddcdb0eab0a92e13}}
**** {{fs-file|AMB_EC_Steam3.wav|size=516156|hash=88537eaeed16c6a4475d3b3738623aab}}
**** {{fs-file|AMB_EC_Steam4.wav|size=746556|hash=b0916cc4d6668a9771afd01496f4e9d7}}
**** {{fs-file|AMB_EC_Steam5.wav|size=737340|hash=552e8c32ea1a04f69e98859e56077f1b}}
**** {{fs-file|AMB_EC_Steam6.wav|size=534588|hash=f4cbc9d9a4f32adf2844ab97df798c76}}
**** {{fs-file|AMB_EC_Steam7.wav|size=1021884|hash=f041eb53748e5d47410a188c6e280b15}}
**** {{fs-file|AMB_EC_Voices1.wav|size=307932|hash=741c2d6d63ba0b3b464ea5b6b318cdbc}}
**** {{fs-file|AMB_EC_Voices10.wav|size=525372|hash=28a17555fa442249cbd7861e80bcf5ac}}
**** {{fs-file|AMB_EC_Voices11.wav|size=313404|hash=1b97f1b14fcab2201da745ed4f44e491}}
**** {{fs-file|AMB_EC_Voices12.wav|size=672828|hash=80c65f6b627b259796927adc6dde86f6}}
**** {{fs-file|AMB_EC_Voices13.wav|size=362580|hash=026576c28474118b04cc4a09fb6b5480}}
**** {{fs-file|AMB_EC_Voices2.wav|size=307644|hash=b3de08af73e56f93c10147e0b7f3bc57}}
**** {{fs-file|AMB_EC_Voices3.wav|size=695292|hash=ce594325ac41b2d95bea4a1a2a0449b4}}
**** {{fs-file|AMB_EC_Voices4.wav|size=521916|hash=b368c2a8995b000c340d3e1408e0fdc5}}
**** {{fs-file|AMB_EC_Voices5.wav|size=292092|hash=bf018e7ad6d6d4531753ef7ea0a1d16e}}
**** {{fs-file|AMB_EC_Voices6.wav|size=709692|hash=be2f2d7447cb69309595e115f72e5500}}
**** {{fs-file|AMB_EC_Voices7.wav|size=502332|hash=1fb09252f8ac69036351661f653da142}}
**** {{fs-file|AMB_EC_Voices8.wav|size=313404|hash=aa2849ce3b7df30ffc894322f83a7497}}
**** {{fs-file|AMB_EC_Voices9.wav|size=691260|hash=4ff4887384d0d5697df491ea9ce6b51b}}
**** {{fs-file|comm static 1.wav|size=39012|hash=4820878be0a0c67e2e2bfd1a82e9af60}}
**** {{fs-file|comm static 2.wav|size=71052|hash=6db8cae9fd2a8a7cf8fa9d3abe53ea1d}}
**** {{fs-file|comm static 3.wav|size=104172|hash=2abe2439e393432e6ae4d596c283690c}}
**** {{fs-file|comm static 4.wav|size=93948|hash=5e00320ced41a87a79aedc7ceaf5d57c}}
**** {{fs-file|comm voice 1.wav|size=189636|hash=0b208c6775907edc63a65054fc807af5}}
**** {{fs-file|comm voice 2.wav|size=196116|hash=7af4f6576c1714391f1aa4a8b0100ca5}}
**** {{fs-file|comm voice 3.wav|size=241044|hash=08781a9e45eac3df26142d8478eb684d}}
**** {{fs-file|comm voice 4.wav|size=69036|hash=948c41545db45969e71c0a5e7614a22f}}
**** {{fs-file|comm voice 5.wav|size=116484|hash=d67a914b933f85f513f4d8e44d09980a}}
**** {{fs-file|comm voice 6.wav|size=83796|hash=1f595aeaef1bdfb501a91de7638fe28f}}
**** {{fs-file|comm voice 7.wav|size=81852|hash=b2b9fa426e3237ddeb79f0536869eca2}}
**** {{fs-file|comm voice 8.wav|size=178620|hash=df652e1d62a8b33af6a47acffb4fcadb}}
**** {{fs-file|comm voice 9.wav|size=110076|hash=39b0f0a3d6d5ec10055b68e602b8675c}}
**** {{fs-file|Control Room Loop ver2.wav|size=543732|hash=093c1519cb6bd6d6d3930d3f774b3485}}
**** {{fs-file|Control Room Loop.wav|size=541860|hash=0f23001b0319a568ac862ec7a1f5ee6f}}
*** {{fs-folder|MainAudio}}
**** {{fs-file|Global A Button Select.wav|size=18708|hash=895b82ec5a33bc8a786e2a690a734de3}}
**** {{fs-file|Global B Button Back.wav|size=18708|hash=45e2b8b11534d2da41900fa5ef5418f4}}
**** {{fs-file|Global Completion Beep.wav|size=12012|hash=2aa770f713594310639ec15ebf2695af}}
**** {{fs-file|Global Delete_Destroy.wav|size=41820|hash=cdefc6e08f772d2c4ab77a564dc50183}}
**** {{fs-file|Global Error Message B.wav|size=14964|hash=dade2d5ecb0b754ec69d4bb4e887d42e}}
**** {{fs-file|Global Keyboard Stroke 1.wav|size=7044|hash=e7662531b5b05431966732cb76a6fffa}}
**** {{fs-file|Global Keyboard Stroke 2.wav|size=11220|hash=b516137d9257d3b975f6d9ad82b75750}}
**** {{fs-file|Global Main MenuBack3ver2.wav|size=32892|hash=b825773a71e8d3655bd8998cbbb424f4}}
**** {{fs-file|Global Main MenuFwd3ver2.wav|size=24108|hash=e5035e8fb6d1d16c16c1fda2a3339153}}
**** {{fs-file|Global Progress Bar.wav|size=235356|hash=d9820e39524a3b37e982fa77004655be}}
**** {{fs-file|Global Scroll Beep.wav|size=1572|hash=67bc6aba697a1eb2714d8eda84da0405}}
*** {{fs-folder|MemoryAudio}}
**** {{fs-file|Memory Controller Select.wav|size=15828|hash=54e676b7ff4dcdd295fabf1dfb9290e5}}
**** {{fs-file|Memory Games Select.wav|size=45348|hash=9e95263f0767a62119aa38e668248957}}
**** {{fs-file|Memory Memory Slot Select.wav|size=12084|hash=bb86674f7a85e0bf6d9dfb569cfcead4}}
*** {{fs-folder|MusicAudio}}
**** {{fs-file|Games Info Screen In MSurr.wav|size=63348|hash=17a245d749339571cdc0fb9524a0ba20}}
**** {{fs-file|Games Info Screen In.wav|size=63348|hash=b02a19fcbbbe8f394c79c560e67fbeb6}}
**** {{fs-file|Games Info Screen Out MSurr.wav|size=71052|hash=c8a81e0046acbc0ce5712f7621422b5b}}
**** {{fs-file|Games Info Screen Out.wav|size=5964|hash=2080b7f318e72e06c8e3c8a03656d03c}}
**** {{fs-file|Music CD Select.wav|size=30300|hash=1104afb43a6aec2b678cda13befa811e}}
*** {{fs-folder|SettingsAudio}}
**** {{fs-file|Settings Lang SubMenu Sel.wav|size=161340|hash=73a89aab381849b9a51bf097293e9449}}
**** {{fs-file|Settings Parent SubMenu Sel.wav|size=21372|hash=74a51e1d0634f2a25585389c77b3dd63}}
*** {{fs-folder|TransitionAudio}}
**** {{fs-file|Games Main Menu In_LR.wav|size=72132|hash=4ebfcf1125ace7e7417e513cf55faf84}}
**** {{fs-file|Games Main Menu Out_LR.wav|size=75444|hash=9f1e83b02961528a8920693ba2654a24}}
**** {{fs-file|Games Sub Menu In_LR.wav|size=74220|hash=8be59cc1ea9dd4c1349e446554a9e50c}}
**** {{fs-file|Games Sub Menu Out_LR.wav|size=83148|hash=0d2b3642ed00c68ff26fea337bb21d17}}
**** {{fs-file|Music Main Menu In_LR.wav|size=53484|hash=cd9b4b30a8829689be34e10648b89257}}
**** {{fs-file|Music Main Menu Out_LR.wav|size=51036|hash=5dcceccf08ae7d4c537a1ad03d1b4d64}}
**** {{fs-file|Music Select Track In_LR.wav|size=68388|hash=80af0c1585d8f6fbfd02623182bc8155}}
**** {{fs-file|Music Select Track Out_LR.wav|size=68100|hash=e3aa18fd82b3d34df22e34b4fe3d49ed}}
**** {{fs-file|Settings Main Menu In_LR.wav|size=188844|hash=7553686ac2ab1f1f9c9e16929ffce5ab}}
**** {{fs-file|Settings Main Menu Out_LR.wav|size=159252|hash=4bc9fbffabb006fcc6d321ee4ba127ee}}
**** {{fs-file|Settings Sub Menu In_LR.wav|size=97908|hash=2b6b47c092d70ae2ef926ff521b9d3d1}}
**** {{fs-file|Settings Sub Menu Out_LR.wav|size=60468|hash=1439f81e8dfab007d9dda12e3b8d34df}}
** {{fs-folder|fonts}}
*** {{fs-file|XBox Book.xtf|size=14440996|hash=8f5b7cee650f389f1c5c7bb5f70386bb}}
*** {{fs-file|Xbox.xtf|size=19124720|hash=de4a26c39de8001b95c749f8d3d22128}}
** {{fs-folder|xboxdashdata.<see versions>}}
*** {{fs-file|AccountSelection.xip|size=1322518|hash=497f17cc0941611e438093e5af73feb9}}
*** {{fs-file|default.xip|size=1619954|hash=c5f0ac7c917ff431739be68528562990}}
*** {{fs-file|dvd.xip|size=167045|hash=64feb8f1e5844fc3d4c4a4269677b8a3}}
*** {{fs-file|jkeyboard.xip|size=732966|hash=e2d462cd3df9f57a0d572f3229a87b51}}
*** {{fs-file|Keyboard.xip|size=658238|hash=c1b2b05a0a47a521d1f7d05ecb566432}}
*** {{fs-file|LiveToday.xip|size=1226668|hash=5f33f99506bb687bad95a735c6a9ea80}}
*** {{fs-file|mainmenu5.xip|size=2300516|hash=f2e318a54e2a7326c5b42c6def7d64d4}}
*** {{fs-file|memory_files2.xip|size=2708134|hash=295fcaec6ad66b14cf51c94d0ac1b999}}
*** {{fs-file|Memory2.xip|size=2218462|hash=4c7fcc324216117b8d54a273eb581c29}}
*** {{fs-file|Message.xip|size=801609|hash=abd85ff52590e61e0b7081f650175bae}}
*** {{fs-file|music_copy3.xip|size=1618605|hash=2f7257186e5093b09a1fe5d96716b0c6}}
*** {{fs-file|Music_PlayEdit2.xip|size=2593642|hash=628a0c8ce9ee64a6fd3bc339fbb28913}}
*** {{fs-file|music2.xip|size=2007578|hash=4979f2dbcf721c1702cde15ed7961800}}
*** {{fs-file|PasscodeVerify.xip|size=2813123|hash=f25f5447def27c67d5842bfc0474b28f}}
*** {{fs-file|settings_adoc.xip|size=4208200|hash=a73817afb22f622fc4c25bbd291db66a}}
*** {{fs-file|Settings_Clock.xip|size=1684098|hash=c49e21dacb92d81ed18380e4354904e1}}
*** {{fs-file|settings_language.xip|size=1429750|hash=cf45a77a9bf6dc972344c6cee48adacc}}
*** {{fs-file|settings_list.xip|size=2928635|hash=123a550fafb5c08b7a0c4437f7989820}}
*** {{fs-file|settings_panel.xip|size=2813123|hash=f25f5447def27c67d5842bfc0474b28f}}
*** {{fs-file|settings_parental.xip|size=1008362|hash=1ae35811db2ecf5af08695ae8b681e6d}}
*** {{fs-file|settings_timezone.xip|size=1371154|hash=b148d86596529ae3abaec6bb3185d13b}}
*** {{fs-file|settings_video.xip|size=1978178|hash=a91d26866b85bf80005a7fc1ba59b442}}
*** {{fs-file|settings3.xip|size=2966303|hash=8d6076c0ee3a22646c0764c34296c8b8}}
*** {{fs-file|WaitCursor.xip|size=33641|hash=6ccd2d7f083ef995f3f67ce747e289a9}}
** {{fs-folder|xodash}}
*** {{fs-folder|audio}}
**** {{fs-folder|LiveNowAudio}}
***** {{fs-file|Friend Offline.wav|size=54092|hash=41b7a8fe061a1ff2552c9bf1188736f5}}
***** {{fs-file|Friend Online.wav|size=54060|hash=81ccfe1005276370c5cbb3e708807b62}}
***** {{fs-file|Friend Request.wav|size=52436|hash=d7c8b57e754b761d1b3101b3e709b3dd}}
***** {{fs-file|Game Invite.wav|size=29396|hash=cd580938613a5407eb8bcaffe2688667}}
**** {{fs-folder|VoiceChatAudio}}
***** {{fs-file|Voice Chat Join.wav|size=26156|hash=7fb1fe01240795fcbf564dabfad01b21}}
***** {{fs-file|Voice Chat Leave.wav|size=37028|hash=8021bcf17888d2803c0e419cffa7dbb5}}
*** {{fs-folder|media}}
**** {{fs-folder|Content}}
***** {{fs-folder|Japanese}}
****** {{fs-file|coc_jpn.txt|size=2347|hash=f2feb7aa376a74240926d158dd74d65d}}
****** {{fs-file|ximejpm.dic|size=250528|hash=b1a7b55b9694ed6a47a2b901415e6fc5}}
****** {{fs-file|ximejps.dic|size=188288|hash=83f581a5d8023013de26eb65b1467486}}
***** {{fs-folder|SavedGame}}
****** {{fs-file|SaveImage.xbx|size=18432|hash=f378f3f8f19f3f679ee6a3a7497e104d}}
****** {{fs-file|TitleImage.xbx|size=67584|hash=6327fec35dd1abe0c3f33ac5cde11c10}}
****** {{fs-file|TitleMeta.xbx|size=800|hash=630de678413ed09e15ae45aa231c1af6}}
***** {{fs-folder|TChinese}}
****** {{fs-file|twroc.dic|size=55226|hash=48d0d50142126651f6090ec99e00b8c5}}
**** {{fs-folder|Xbg}}
***** {{fs-file|3_doublebutton.xbg|size=207993|hash=42b0b013d2c2e5817a3e4c8ab04bffb4}}
***** {{fs-file|act_accountpin.xbg|size=653118|hash=fe632805e6d6729e7e442fc96771a7d9}}
***** {{fs-file|act_activation.xbg|size=59625|hash=a7db0e486f391ad9101ee7d9a6abe7ca}}
***** {{fs-file|act_admin_policy.xbg|size=71938|hash=135c297799488b118e93deb8ba6ea44e}}
***** {{fs-file|act_alt_names.xbg|size=84324|hash=158225c13adae3057c062fb8f6730be7}}
***** {{fs-file|act_billing.xbg|size=226372|hash=fb04f93f5afed327400f6dae41a3f4e8}}
***** {{fs-file|act_congrats.xbg|size=145440|hash=4f773200049c715436c27cad462d3725}}
***** {{fs-file|act_copy_delete.xbg|size=888221|hash=66321645c2e21dc97221946871ad8894}}
***** {{fs-file|act_country.xbg|size=184789|hash=11ef5a0db7ff1c4e57c372f5ca8a474c}}
***** {{fs-file|act_forced_name.xbg|size=70512|hash=b47c0cd89ef89019b8d4fb7e9f29078a}}
***** {{fs-file|act_id.xbg|size=80213|hash=d7b2f7b2c8444c353a00b61963a37ff0}}
***** {{fs-file|act_message_server.xbg|size=241052|hash=6876fb92e1c92afc662562fb99a5abb4}}
***** {{fs-file|act_new_opt_in.xbg|size=283121|hash=2997402d4dd252d0746e5790b35abeab}}
***** {{fs-file|act_online.xbg|size=77774|hash=dbd09ce5f9fd916724997bbe64aa7e6c}}
***** {{fs-file|act_overwrite.xbg|size=578090|hash=c71ca452229dcd95bfee26b7d9424f3a}}
***** {{fs-file|act_passcode.xbg|size=722464|hash=81526772f069a1c81b76254399fb8666}}
***** {{fs-file|act_restrictions.xbg|size=198867|hash=ecbfd5abe9bde3f28e7e21722c85e47c}}
***** {{fs-file|act_state.xbg|size=797805|hash=1f2a1cacb023ac3c754d9548a38e8039}}
***** {{fs-file|act_sub_3button.xbg|size=158866|hash=112821cc587d1ad4cc99fa0d0a917273}}
***** {{fs-file|act_sure.xbg|size=65137|hash=5c1540d7ccec2c6607c8b0510f8f825a}}
***** {{fs-file|act_user_options.xbg|size=185180|hash=e496c0538f2b825186b00e30f5709931}}
***** {{fs-file|act_users2.xbg|size=88313|hash=12ce8b2ae9d7d450660b7de5aebcaaf8}}
***** {{fs-file|addfriend.xbg|size=1890765|hash=f6bf945bea8ef86d593109b2d1866b89}}
***** {{fs-file|anim_connecting.xbg|size=1034604|hash=d414eabc933dc46e64b3703c54b8e574}}
***** {{fs-file|anim_wait_5.xbg|size=25575|hash=007a7e8f3f4b262414100cc48d8cbdb0}}
***** {{fs-file|backbutton.xbg|size=81349|hash=6b894fe7c6392836808dc6230bd7b0d0}}
***** {{fs-file|bud_actions.xbg|size=146828|hash=dbc004a2b3081507ae2c2efed71fb4a3}}
***** {{fs-file|cellwall.xbg|size=190846|hash=219a43d501df170e4affcae9e4b35e92}}
***** {{fs-file|contextual.xbg|size=1937307|hash=007ac7c3ddedad86a662bc9b115d1f00}}
***** {{fs-file|feedback.xbg|size=1929240|hash=d26e11eb96b135eac630dfcee1b7e5fb}}
***** {{fs-file|friends.xbg|size=2224276|hash=afae13fb39cc559c24c85262509e888e}}
***** {{fs-file|gen_dob_tumblers.xbg|size=1276515|hash=83c24a1a6ed4f405dc0caad816a0a204}}
***** {{fs-file|gen_exp_tumblers.xbg|size=1262446|hash=9e4d5fd47c810132f42bf9bc173a1908}}
***** {{fs-file|gen_large_panel.xbg|size=210906|hash=814dfbf474a031ab82f6271a4c0648db}}
***** {{fs-file|gen_mess_panel.xbg|size=347851|hash=397c04b140e03b293b1a104e540d73fc}}
***** {{fs-file|j_candidates.xbg|size=254619|hash=060728bbf7498173420a45be61b7c339}}
***** {{fs-file|j_keyboard.xbg|size=737322|hash=88c480d6b5ab9feb95b3e906760e2373}}
***** {{fs-file|k_keyboard.xbg|size=426877|hash=6388aede82d338db42b55752aa5b9d06}}
***** {{fs-file|keyboard.xbg|size=375657|hash=873fbf9ec6585103346bf0a381f95d93}}
***** {{fs-file|keypad.xbg|size=202889|hash=decf2d76e67af781ad34c220be6308f8}}
***** {{fs-file|nts_dns.xbg|size=192159|hash=bd54bc1e4246605937a828b3b6278a95}}
***** {{fs-file|nts_ip.xbg|size=202623|hash=9e100d8c7029c20cfc9bd7ee0fa6bc65}}
***** {{fs-file|nts_settings.xbg|size=216718|hash=512de7f31ef378651a5e783965ea7f24}}
***** {{fs-file|nts_status.xbg|size=181806|hash=0a0d4a2ed3c61c86258d6d3ae3fe3837}}
***** {{fs-file|nts_wireless.xbg|size=231935|hash=82a12b613465f617c90c7fdce118adef}}
***** {{fs-file|orb_master.xbg|size=348747|hash=c259f4d1276582d32044826f6d88cedc}}
***** {{fs-file|selectbutton.xbg|size=73523|hash=bf0fcf1cde1d1aa92b7335ab5d8c10a3}}
***** {{fs-file|t_keyboard.xbg|size=405161|hash=912e6bd830337868cb9b51d30c8c0121}}
***** {{fs-file|voicechat.xbg|size=2327218|hash=dd2e8dcea71fc8fa661daa7d6c9b0f6d}}
***** {{fs-file|voicemail.xbg|size=1948139|hash=662585947a38eff1b5e74e871ea4d5be}}
**** {{fs-folder|Xbx}}
***** {{fs-file|button.xbx|size=10240|hash=fc14f24784a74a5d48004e48880086cb}}
***** {{fs-file|cellwall.xbx|size=67584|hash=ff23d97f5263ee657cdd7d528bb1c95e}}
***** {{fs-file|darken_opacity.xbx|size=18432|hash=7f24ebbab4f77fe612d0dd9491001e49}}
***** {{fs-file|Disabled.xbx|size=10240|hash=6d8da8de70e262767600d2b84eec43c2}}
***** {{fs-file|disabled_highlight.xbx|size=6144|hash=64f4dd2e2f5539ad6a11417abe0ef336}}
***** {{fs-file|footer.xbx|size=34816|hash=6a2124d31b374d9c3f426436aec35161}}
***** {{fs-file|GameHilite_01.xbx|size=6144|hash=c4fa23bce07f08dd360565d9b267b0b0}}
***** {{fs-file|highlight.xbx|size=10240|hash=1e99278554e5d4a0e42b808ebd833385}}
***** {{fs-file|keyboard_alpha.xbx|size=18432|hash=65553de7e37186f96942948cbe4639b9}}
***** {{fs-file|Live_header.xbx|size=34816|hash=fc46134b8dd7abf183e1d466d5afe6bf}}
***** {{fs-file|live_highlight_disabled.xbx|size=10240|hash=5a2da8c4c763cdcf6ab7c23deaa64205}}
***** {{fs-file|LiveChrome.xbx|size=67584|hash=f64b49852005cc389d205ea1de8d1048}}
***** {{fs-file|mess_panel_backing.xbx|size=18432|hash=24459f91d4de55a521d2c75da81ac7de}}
***** {{fs-file|Options.xbx|size=18432|hash=9e442a174906ef3e06c04c5cd43b6ddd}}
***** {{fs-file|panel1.xbx|size=18432|hash=7ef04f5b0d0ce60e9ac385d5734d35a3}}
***** {{fs-file|panel10.xbx|size=10240|hash=2852c18e0b898a0cd0f74d957d1c4e1f}}
***** {{fs-file|panel11.xbx|size=18432|hash=188290082b02fc03a2656ffdc131f309}}
***** {{fs-file|panel12.xbx|size=18432|hash=bf234eb3313b4af0f04a7eea816b0819}}
***** {{fs-file|panel13.xbx|size=18432|hash=c465aaacf64ff98d7e5c7501f15df4cd}}
***** {{fs-file|panel14.xbx|size=18432|hash=5b52636f2ae781df267c27ba4f1fa1f4}}
***** {{fs-file|panel15.xbx|size=10240|hash=43ce1530ac07161c65b1ff5d02ddaf07}}
***** {{fs-file|panel16.xbx|size=18432|hash=1c35588436ba6d4a437fb1d22e8ed029}}
***** {{fs-file|panel17.xbx|size=10240|hash=7b9d574182f87b7c8bb9b1f16d07a234}}
***** {{fs-file|panel18.xbx|size=18432|hash=192a162567836159e44355a13b108ec6}}
***** {{fs-file|panel19.xbx|size=18432|hash=3d205c154cd434ae46009670b8a5c830}}
***** {{fs-file|panel2.xbx|size=18432|hash=4958bbd39d6adc867a323bd14e7fedfb}}
***** {{fs-file|panel20.xbx|size=18432|hash=70fcee44a106f94f3d505b8fe36e89bd}}
***** {{fs-file|panel3.xbx|size=18432|hash=7ddc37a40c11f91c4f5709275753682c}}
***** {{fs-file|panel4.xbx|size=18432|hash=54ca9e18cadcabd704eff52270cf5aef}}
***** {{fs-file|panel5.xbx|size=18432|hash=9a92cefceb843e4b634ef4862b2838f0}}
***** {{fs-file|panel6.xbx|size=18432|hash=5220d145a2d73f10018f822b746a33f9}}
***** {{fs-file|panel7.xbx|size=18432|hash=0fb78b53c5b037f006342a10f13447f5}}
***** {{fs-file|panel8.xbx|size=18432|hash=212a8b96d91eaab3788d33ea3f0f99d0}}
***** {{fs-file|panel9.xbx|size=18432|hash=25b985d4c995f4898ea1c3344cf0d2f0}}
***** {{fs-file|Plain_header.xbx|size=34816|hash=494a987d8bf0000ff972ec0926aa08dd}}
***** {{fs-file|pulse_3D_64_matte_trans.xbx|size=4096|hash=7d9b93b859d90f855dbb0a17170821bc}}
***** {{fs-file|Pulse1.xbx|size=34816|hash=364898b79abf0110779b849a4df38154}}
***** {{fs-file|ridges.xbx|size=34816|hash=caabfdb8e5aa2390d001d60247ff3b72}}
***** {{fs-file|wireframe.xbx|size=10240|hash=48468dbefff5fb21d52f8b66418a89f2}}
***** {{fs-file|xbox2.xbx|size=264192|hash=e86870b16246b4399a86c592a1f87b3b}}
***** {{fs-file|xbox4.xbx|size=67584|hash=67f33ec44e706a322e2550a342340a3c}}
***** {{fs-file|xboxlogo.xbx|size=264192|hash=77cf58d065229b28edda8b08709ac31d}}
***** {{fs-file|xboxlogow.xbx|size=264192|hash=c4816fb72fe27cd18bb04a109b9facd1}}
*** {{fs-file|update.xbe|size=2260992}} <see versions>
*** {{fs-file|xonlinedash.xbe|size=2617344}} <see versions>
** {{fs-file|XBox Book.xtf|size=17068868|hash=54751950aa215228a4915955f7d2ce0c}}
** {{fs-file|Xbox.xtf|size=15613736|hash=0466dd6c19ec9c1785e8aadfc8c5269e}}
** {{fs-file|xboxdash.xbe|size=1961984}} <see versions>
* {{fs-drive|E:}}
** {{fs-folder|TDATA}}
** {{fs-folder|UDATA}}
I have seen a few differences. I thought all my Xboxs had the same dashboard version, but I have 2 slightly different versions of files:
== 185ead00 ==
Here are the differences for this dashboard
* {{fs-drive|C:}}
** {{fs-folder|xboxdashdata.185ead00}}
** {{fs-folder|xodash}}
*** {{fs-file|update.xbe|size=2260992|hash=bc99ef8730158ba1bf3f1c9c84520661}}
*** {{fs-file|xonlinedash.xbe|size=2617344|hash=8149654a030d813bcc02a24f39fd3ce9}}
** {{fs-file|xboxdash.xbe|size=1961984|hash=08d3a6f99184679aa13008d6397bacce}}
== 185a6100 ==
Here are the differences for this dashboard
* {{fs-drive|C:}}
** {{fs-folder|xboxdashdata.185a6100}}
** {{fs-folder|xodash}}
*** {{fs-file|update.xbe|size=2260992|hash=78ad0f3f0cb83010728e00457a778121}}
*** {{fs-file|xonlinedash.xbe|size=2617344|hash=01dd6c8aa72b473ba1523c73c6527d86}}
** {{fs-file|xboxdash.xbe|size=1961984|hash=1fa397b44ec78965ef955539fd8f4fbd}}
36916bec0bc67242684abb4f4f8273e8cadbc506
Kernel
0
3678
5627
5569
2017-05-31T10:36:17Z
JayFoxRox
2
/* INIT */
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot process initialization for the kernel, [[http://xboxdevwiki.net/Boot_Process#Initialization|listed here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|stdcall
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|stdcall
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|stdcall
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|stdcall
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|stdcall
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|stdcall
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|stdcall
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|stdcall
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|stdcall
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|stdcall
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|stdcall
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|stdcall
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|stdcall
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|stdcall
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|stdcall
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|stdcall
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|stdcall
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|stdcall
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|stdcall
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|stdcall
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|stdcall
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|stdcall
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|stdcall
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|stdcall
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|stdcall
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|stdcall
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|stdcall
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|stdcall
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|stdcall
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|stdcall
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|stdcall
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|stdcall
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|stdcall
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|stdcall
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
454909f23d60a40154256db43fbc44e0b2498554
5628
5627
2017-05-31T10:36:39Z
JayFoxRox
2
/* INIT */
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot process initialization for the kernel, [[Boot_Process#Initialization|listed here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|stdcall
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|stdcall
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|stdcall
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|stdcall
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|stdcall
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|stdcall
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|stdcall
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|stdcall
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|stdcall
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|stdcall
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|stdcall
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|stdcall
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|stdcall
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|stdcall
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|stdcall
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|stdcall
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|stdcall
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|stdcall
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|stdcall
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|stdcall
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|stdcall
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|stdcall
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|stdcall
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|stdcall
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|stdcall
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|stdcall
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|stdcall
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|stdcall
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|stdcall
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|stdcall
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|stdcall
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|stdcall
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|stdcall
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|stdcall
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
77bb00eed95c728cdaaaff08d0d45dfb0cc1694a
5629
5628
2017-05-31T10:37:11Z
JayFoxRox
2
/* INIT */
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot kernel initialization as described [[Boot_Process#Initialization|here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|stdcall
|Variable?
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|stdcall
|Variable?
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|stdcall
|Variable?
|-
|[[Kernel/ExTimerObjectType]]
|31
|stdcall
|Variable?
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|stdcall
|Variable?
|-
|[[Kernel/HalDiskModelNumber]]
|41
|stdcall
|Variable?
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|stdcall
|Variable?
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|stdcall
|Variable?
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|stdcall
|Variable?
|-
|[[Kernel/IoFileObjectType]]
|71
|stdcall
|Variable?
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|stdcall
|Variable?
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|stdcall
|Variable?
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|stdcall
|Variable?
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|stdcall
|Variable?
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|stdcall
|Variable?
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|stdcall
|Variable?
|-
|[[Kernel/KeTimeIncrement]]
|157
|stdcall
|Variable?
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|stdcall
|Variable?
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|stdcall
|Variable?
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|stdcall
|Variable?
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|stdcall
|Variable?
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|stdcall
|Variable?
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|stdcall
|Variable?
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|stdcall
|Variable?
|-
|[[Kernel/XboxHardwareInfo]]
|322
|stdcall
|Variable?
|-
|[[Kernel/XboxHDKey]]
|323
|stdcall
|Variable?
|-
|[[Kernel/XboxKrnlVersion]]
|324
|stdcall
|Variable?
|-
|[[Kernel/XboxSignatureKey]]
|325
|stdcall
|Variable?
|-
|[[Kernel/XeImageFileName]]
|326
|stdcall
|Variable?
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|stdcall
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|stdcall
|Variable?
|-
|[[Kernel/XePublicKeyData]]
|355
|stdcall
|Variable?
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|stdcall
|Variable?
|-
|[[Kernel/IdexChannelObject]]
|357
|stdcall
|Variable?
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
bd4fd2ee5887e51f848a3858e02f2e443438de54
Resources
0
3
5630
5468
2017-05-31T11:39:20Z
JayFoxRox
2
/* Random resources about Xbox hacking */
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
292f51dd55e17dd66fae72940dc141c76398c317
Dashboard
0
3772
5631
5570
2017-05-31T23:22:36Z
JayFoxRox
2
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
== See Also ==
[[Hard Drive Files]]
7cbbb127e8f332911e957c627bd35e424d7a8bc2
Memory
0
3674
5632
5220
2017-06-01T15:29:19Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively. On Debug Xboxs and Chihiro, only the BIOS is mapped.
{| class="wikitable"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|[[Flash]]
|0xFF000000 - 0xFFFFFFFF
|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MAIN_MEMORY 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MAIN_MEMORY 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define BIOS_SIZE 256 * 1024
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)
uint8_t memory[MAIN_MEMORY] = {0};
uint8_t bios[BIOS_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MAIN_MEMORY) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MEMORY) {
return mcpx[location - MCPX_MEMORY];
}
if (location >= BIOS_MEMORY) {
return bios[(location - BIOS_MEMORY) % BIOS_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
3574f6ffc76cfa183aa50b790c49bc765a8a95fb
5635
5632
2017-06-01T15:38:21Z
JayFoxRox
2
Hopefully improved wording without adding mistakes
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. On Debug Xboxs and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|[[Flash]]
|0xFF000000 - 0xFFFFFFFF
|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
d5137be69c63872f4d24e9e60ed5a2860cecaaff
Talk:BIOS
1
3698
5633
5205
2017-06-01T15:31:23Z
JayFoxRox
2
/* Differentiation: Flash and BIOS */ new section
wikitext
text/x-wiki
== Typo in the know Bios versions ==
@Eighthpence did you mean 3944 instead of 3394 --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:06, 14 May 2017 (PDT)
They are now changed --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:23, 14 May 2017 (PDT)
== Turn lists into a table? ==
This article has various lists / sections which all mention the same list of bioses.
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)
I've added a table. It needs improving but it is a start. --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:40, 14 May 2017 (PDT)
== Differentiation: Flash and BIOS ==
I feel we often speak about BIOS and Flash and mean the opposite thing.
We should move such information to the appropriate articles and refer to each other if necessary.
a18ab64352284e9101f5e570a67e3c3051ed046c
5634
5633
2017-06-01T15:31:38Z
JayFoxRox
2
/* Differentiation: Flash and BIOS */
wikitext
text/x-wiki
== Typo in the know Bios versions ==
@Eighthpence did you mean 3944 instead of 3394 --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:06, 14 May 2017 (PDT)
They are now changed --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:23, 14 May 2017 (PDT)
== Turn lists into a table? ==
This article has various lists / sections which all mention the same list of bioses.
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)
I've added a table. It needs improving but it is a start. --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:40, 14 May 2017 (PDT)
== Differentiation: Flash and BIOS ==
I feel we often speak about BIOS and Flash and mean the opposite thing.
We should move such information to the appropriate articles and refer to each other if necessary.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:31, 1 June 2017 (PDT)
3ce4b40aa3c4a3ceee744a75355e61f2914a1d9b
Flash ROM
0
3762
5636
5508
2017-06-01T15:43:02Z
JayFoxRox
2
wikitext
text/x-wiki
The Flash is a 256 kiB or 1 MiB non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip and connected to the [[MCPX]] via the <abbr title="Low Pin Count">LPC</abbr> bus.
For the content of the Microsoft Flash image see [[BIOS]].
1d0b22f894cd0437e363e1181136f803d5dddb19
Flash ROM
0
3762
5637
5636
2017-06-01T15:43:28Z
JayFoxRox
2
wikitext
text/x-wiki
The Flash is a 256 kiB or 1 MiB non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip and connected to the [[MCPX]] via the <abbr title="Low Pin Count">LPC</abbr> bus.
For the content of the Microsoft flash images see [[BIOS]].
5bc7d0b7671abfb0efbfb672f801a04142c4fb40
Talk:BIOS
1
3698
5638
5634
2017-06-01T15:44:50Z
JayFoxRox
2
/* Differentiation: Flash and BIOS */
wikitext
text/x-wiki
== Typo in the know Bios versions ==
@Eighthpence did you mean 3944 instead of 3394 --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:06, 14 May 2017 (PDT)
They are now changed --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:23, 14 May 2017 (PDT)
== Turn lists into a table? ==
This article has various lists / sections which all mention the same list of bioses.
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)
I've added a table. It needs improving but it is a start. --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:40, 14 May 2017 (PDT)
== Differentiation: Flash and BIOS ==
I feel we often speak about BIOS and Flash and mean the opposite thing.
We should move such information to the appropriate articles and refer to each other if necessary.
I think we should even split this into "2BL" and "Flash", not mention the name "BIOS" at all.
This removes ambiguity, we can then explain the contents of the flash image on the flash page and refer to the 2BL and Kernel pages for more info.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:31, 1 June 2017 (PDT)
416de8547267d1cf99993a11eec57a5acf3c77b6
BIOS
0
3672
5639
5507
2017-06-01T15:48:44Z
JayFoxRox
2
/* Components */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! Unknown
! X-Codes
! Copyright String
! Kernel
! Kernel Data Segment
! 2BL
! Decoy Boot Loader
|-
! 3944
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4034
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4134
| 0x00000
| 0x00080
| 0x00cfa
|
|
| 0x39E00
| 0x3FE00
|-
! 4817
| 0x00000
| 0x00080
| 0x00db9
|
|
|
| 0x3FE00
|-
! 5101
| 0x00000
| 0x00080
| 0x00e49
|
|
|
| 0x3FE00
|-
! 5530
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5713
| 0x00000
| 0x00080
| 0x00e59
|
|
|
| 0x3FE00
|-
! 5838
| 0x00000
| 0x00080
| 0x00dcc
|
|
|
| 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
c02c354a9eff4fe2e327173a9d970e7c755c9c54
5640
5639
2017-06-01T15:51:25Z
JayFoxRox
2
Undo revision 5219 by [[Special:Contributions/Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) (I suggested this change, but it was stupid. Sorry))
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944
! 4034
! 4134
! 4817
! 5101
! 5530
! 5713
! 5838
|-
! Unknown
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
| 0x00000
|-
! X-Codes
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
| 0x00080
|-
! Copyright String
| 0x00cfa
| 0x00cfa
| 0x00cfa
| 0x00db9
| 0x00e49
| 0x00e59
| 0x00e59
| 0x00dcc
|-
! Kernel
|
|
|
|
|
|
|
|
|-
! Kernel Data Segment
|
|
|
|
|
|
|
|
|-
! 2BL
| 0x039E00
| 0x039E00
| 0x039E00
|
|
|
|
|
|-
! Decoy Boot Loader
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
| 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
04 10 08 00 80 01 80 00 00
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
04 84 08 00 80 01 80 00 00
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "Copyright (c) Microsoft Corporation. All rights reserved." (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
0c353103d7d6c6144a7656b9d8bbd598fc89cb92
5641
5640
2017-06-01T16:03:02Z
JayFoxRox
2
/* Components */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
! !! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! Unknown || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String || 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel || || || || || || || ||
|-
! Kernel Data Segment || || || || || || || ||
|-
! 2BL || 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! Decoy Boot Loader || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
6b20f8bd7dc899a3e9672529c14b2b9cfc542b8d
5642
5641
2017-06-01T16:03:58Z
JayFoxRox
2
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! Unknown
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| || || || || || || ||
|-
! Kernel Data Segment
| || || || || || || ||
|-
! 2BL
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
265760777a9c2df1c5723bfa367488bb37b57d31
Boot Process
0
3683
5643
5576
2017-06-01T16:30:51Z
JayFoxRox
2
/* Xcodes */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
register uint32_t pc; // stored in ESI register
register uint8_t opcode; // stored in AL register
register uint32_t operand_1; // stored in EBC register
register uint32_t operand_2; // stored in ECX register
register uint32_t result; // stored in EDI register
register uint32_t scratch; // stored in EBP register
// values are implied as x86 is just starting up
operand_1 = 0;
operand_2 = 0;
scratch = 0;
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
switch (opcode) {
case 0x02:
result = get_memory_dword(operand_1 & 0x0fffffff);
break;
case 0x03:
set_memory_dword(operand_1) = operand_2;
break;
case 0x06:
result = (result & operand_1) | operand_2;
break;
case 0x04:
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
break;
case 0x05:
outl(operand_1, 0xcf8);
result = inl(0xcfc);
break;
case 0x08:
if (result != operand_1) {
pc += operand_2;
}
break;
case 0x09:
pc += operand_2;
break;
case 0x10:
scratch = (scratch & operand_1) | operand_2;
result = scratch;
break;
case 0x11:
outb(operand_2, operand_1);
break;
case 0x12:
result = inb(operand_1);
break;
case 0xee:
goto stop_xcodes;
default:
break;
}
pc += 9;
}
stop_xcodes:
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
96114071095fb0b19f89c96b2510a4efb91f71a4
5644
5643
2017-06-01T16:35:03Z
JayFoxRox
2
This is a more accurate description of what's going on
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
int run_xcodes = 1;
register uint32_t pc; // stored in ESI register
register uint8_t opcode; // stored in AL register
register uint32_t operand_1; // stored in EBC register
register uint32_t operand_2; // stored in ECX register
register uint32_t result; // stored in EDI register
register uint32_t scratch; // stored in EBP register
// values are implied as x86 is just starting up
operand_1 = 0;
operand_2 = 0;
scratch = 0;
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
5c94e96999b49d289f56cfbbebf65acdebfcf04c
5645
5644
2017-06-01T16:35:50Z
JayFoxRox
2
/* Xcodes */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
register uint32_t pc; // stored in ESI register
register uint8_t opcode; // stored in AL register
register uint32_t operand_1; // stored in EBC register
register uint32_t operand_2; // stored in ECX register
register uint32_t result; // stored in EDI register
register uint32_t scratch; // stored in EBP register
// values are implied as x86 is just starting up
operand_1 = 0;
operand_2 = 0;
scratch = 0;
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
f5e75410dafd3276ecd3f6e18e5e344ed24fb978
5646
5645
2017-06-01T16:36:57Z
JayFoxRox
2
/* Xcodes */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
28ff3e5d88fac55802c7520cb6da6842a863b7b4
5647
5646
2017-06-01T16:41:54Z
JayFoxRox
2
/* MCPX 1.0: RC4 Decryption of the 2BL */
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== MCPX 1.0: RC4 Decryption of the 2BL ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.{{FIXME|reason=MCPX 1.1 still uses RC4 afaik, TEA is only used for hashing.. which it is no good at ;) }}
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== Notes ===
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
=== MCPX 1.1: TEA Decryption of the 2BL ===
{{FIXME}}
== 2BL ==
Certain parts are still missing
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
267617ad90d8a46dee0cb09922e0938fbcad984a
Hardware Revisions
0
3669
5648
5529
2017-06-02T16:57:19Z
JayFoxRox
2
Various small changes
wikitext
text/x-wiki
There are 7{{citation needed|reason=What about debug kits? mcpx revisions? RAM changes? .. should we even try to count?}} Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant [[Video Encoder]]
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* Removed data and power lines from LPC port
* Xcalibur video chip
* Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
Microsoft later switched to lower quality Hynix RAM.
These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
c48d981ff2492001e0b481817b01e07a621ef16e
Main Page
0
1
5649
5611
2017-06-03T15:54:17Z
JayFoxRox
2
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[DSP]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[DVD-IR Internals]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
ffc640d1344208e9a79e1bd40d40e67a2c35e905
5651
5649
2017-06-03T15:59:16Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU|CPU (Custom Pentium 3 733 MHz)]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[DSP]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[DVD-IR Internals]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
e3bd9a587caa664ddb5baef8b12a3b36e67374bf
5661
5651
2017-06-04T01:15:45Z
Espes
2484
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[DSP]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[DVD-IR Internals]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
07198b207da9ac83b8a21a1151baef580a0d0545
USB
0
3789
5650
2017-06-03T15:57:48Z
JayFoxRox
2
Created page with "== Notes == * http://euc.jp/periphs/xbox-controller.en.html"
wikitext
text/x-wiki
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
231dd84635e26e5afbe45d80f55a6d63a26fb4f5
Xbox Memory Unit
0
3790
5652
2017-06-03T16:03:16Z
JayFoxRox
2
Dummy
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
|}
506a6db2ac9cccbbcbf1b4cae5474c32010a2f31
Dashboard
0
3772
5653
5631
2017-06-03T20:48:22Z
KaosEngineer
2482
/* Music visualization in fullscreen */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
== See Also ==
[[Hard Drive Files]]
0e2786c2e243da6180f65ddaa6c6ff24939b264a
5654
5653
2017-06-03T20:57:37Z
KaosEngineer
2482
cite geiss-like from original WinAmp music visualization plugin (http://www.geisswerks.com/geiss/)
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss{{cite web url=http://www.geisswerks.com/geiss/}}-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
== See Also ==
[[Hard Drive Files]]
0bd31c3043119acaccf27e9cce3e688b6a7309c7
5655
5654
2017-06-03T21:28:24Z
KaosEngineer
2482
update reference as {{cite url=...}} not what I wanted. What password someone needs to respond or robo give it back when asked for password
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
== See Also ==
[[Hard Drive Files]]
0e2786c2e243da6180f65ddaa6c6ff24939b264a
5656
5655
2017-06-03T22:30:28Z
KaosEngineer
2482
/* Soundtrack name Easter-Egg (">") */ Steps to activate the easter egg
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
# Insert an audio CD and let it begin to play.
# Stop the disk and step back in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Now you will enter the name of your soundtrack. You must enter the name exactly as:
<<Eggsßox>>
Including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". The "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
8f8539a5d77c9a8a82ae6c05888327349887f78e
5657
5656
2017-06-03T22:33:28Z
KaosEngineer
2482
/* Soundtrack name Easter-Egg (">") */ updated activation text
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
Steps to activate Soundtrack Easter Egg:
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsßox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". The "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
78f0c24a4a6d9b804192af4251d500311336fa14
5658
5657
2017-06-03T22:34:29Z
KaosEngineer
2482
/* Soundtrack name Easter-Egg (">") */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
Steps to activate Soundtrack Easter Egg:
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsßox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
0a39b03d24798d22f817625e268c853c8f28aec3
5659
5658
2017-06-03T22:36:54Z
KaosEngineer
2482
/* Soundtrack name Easter-Egg (">") */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
=== Steps to activate Soundtrack Easter Egg: ===
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
3585652ea5b5306faaa02dca98d62ad1f705804d
5660
5659
2017-06-03T22:37:27Z
KaosEngineer
2482
/* Steps to activate Soundtrack Easter Egg: */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
08a0c11206dd13db8137947b7a91fdc2a9a40bf0
5662
5660
2017-06-04T04:56:53Z
KaosEngineer
2482
/* Hotkey to switch to HD modes */ Button combo to force 480p output of 5960 dash
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
3db75df6dc297ee6b484290d9c0297b1ef878a08
5663
5662
2017-06-04T05:05:07Z
KaosEngineer
2482
/* Hotkey to switch to HD modes */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toogle between 480i and 480p.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
6a1e4fde5880dd49f3ed146a1cba576212cb4cf5
5664
5663
2017-06-04T05:06:00Z
KaosEngineer
2482
/* Hotkey to switch to HD modes */ spelling error of toggle :( how stupid!
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
4fe3b66871b3394de48213dcf0116312d4c991fc
5665
5664
2017-06-04T07:28:04Z
KaosEngineer
2482
/* Music visualization in fullscreen */ There's a second part to the visualization only visible using the DVD Playback kit remote control
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "Info" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield the cycle repeats with a different random solid bursts of color.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
ad2be2c7d68530555ace0c00c8f20cbebfec5597
5666
5665
2017-06-04T07:32:09Z
KaosEngineer
2482
/* Music visualization in fullscreen */ Info to INFO
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield the cycle repeats with a different random solid bursts of color.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
a96ec6b0f443a8e9879a04637c003707b7057d5a
5667
5666
2017-06-04T07:35:17Z
KaosEngineer
2482
/* Music visualization in fullscreen */ Last sentence split into two and wording changed up.
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
== See Also ==
[[Hard Drive Files]]
37c14b62f415efe1e58dffbfa2dbc01423078ce6
5668
5667
2017-06-04T07:50:31Z
KaosEngineer
2482
/* Steps to activate Soundtrack Easter Egg: */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
== See Also ==
[[Hard Drive Files]]
eab43b1d79ad095985c596e4117f40d34e21cefa
5669
5668
2017-06-04T07:53:51Z
KaosEngineer
2482
/* Music visualization in fullscreen */ missing , in Once the music visualization...
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
== See Also ==
[[Hard Drive Files]]
4ca4f3b813fc92b5cc4c0105ccd4bbf9cedd5334
5674
5669
2017-06-04T13:14:27Z
KaosEngineer
2482
/* Music visualization in fullscreen */ Eject stops music playback and when full screen starfield displays.(really you can always see it as part of the visualizer along with the color burst
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
== See Also ==
[[Hard Drive Files]]
69f6e8714eb1c70d5376e1cdc3c532c2cc3136e8
5675
5674
2017-06-04T13:30:06Z
KaosEngineer
2482
/* Hidden features */ Parental Control Bypass
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
# X, Y, Left trigger, X
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
== See Also ==
[[Hard Drive Files]]
69b2274a20a0ccab8ffbf8f29dddb80dc2961b81
5676
5675
2017-06-04T13:30:59Z
KaosEngineer
2482
/* Parental Control Bypass */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
# X, Y, Left trigger, X
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
== See Also ==
[[Hard Drive Files]]
ca785f0193e81af214f4dbfa81e5e4e877292504
5677
5676
2017-06-04T13:32:37Z
KaosEngineer
2482
/* Parental Control Bypass */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* X, Y, Left trigger, X
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
== See Also ==
[[Hard Drive Files]]
5a255309f3d0d59a2360a22d1e8e6365f23aef05
5678
5677
2017-06-04T13:39:00Z
KaosEngineer
2482
/* Parental Control Bypass */ Disable pass code button sequence.
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* X, Y, Left trigger, X
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press "A" twice to be prompted, "Do you wish to delete the current pass code?". Select Yes or No.
== See Also ==
[[Hard Drive Files]]
30619c87ec37c0000f581691c64279c02b1832c2
User:Haxar/NV2A
2
3791
5670
2017-06-04T09:48:31Z
Haxar
2485
Created page with "I wanted to know how NV2A registers were being accessed from Xbox executables. So, I loaded IDA with Turok with the applied Xbox Flirt Signatures v.2 and took references from..."
wikitext
text/x-wiki
I wanted to know how NV2A registers were being accessed from Xbox executables. So, I loaded IDA with Turok with the applied Xbox Flirt Signatures v.2 and took references from '''pbkit''' to help me out with this.
'''D3D::CMiniport::MapRegisters''' is where it all begins. This is just a handful of subroutines from the '''D3D::CMiniport''' namespace.
Every single access is annotated from '''pbkit'''. It has been very useful.
<pre>
// turok
// using pbkit/outer.h
// gpu == 0xfd000000
</pre>
<pre>
signed int __thiscall D3D::CMiniport::MapRegisters(void *this)
{
*(_DWORD *)this = 0xFD000000u; // VIDEO_BASE
vFD001804 |= 4u; // NV_PBUS_PCI_NV_1_BUS_MASTER_ENABLED
vFD600140 = 0; // PCRTC_INTR_EN_VBLANK_DISABLED
vFD009140 = 0; // NV_PTIMER_INTR_EN_0_ALARM_DISABLED
return 1;
}
</pre>
<pre>
signed int __thiscall D3D::CMiniport::LoadEngines(void *this)
{
void *v1; // edi@1
int gpu; // esi@1
int v3; // eax@1
int v4; // ecx@1
v1 = this;
gpu = *(_DWORD *)this;
v3 = *(_DWORD *)this + 6220;
v4 = *(_DWORD *)v3;
*(_DWORD *)v3 &= 0xFFFFFCFFu;
*(_DWORD *)v3 = v4;
*(_DWORD *)(gpu + 0x200) = 0xFFFFFFFFu; // NV_PMC_ENABLE_ALL_ENABLE
*(_DWORD *)(gpu + 0x140) = *((_DWORD *)v1 + 45);// NV_PMC_INTR_EN_0
D3D::CMiniport::HalDacLoad(v1); // PCRTC_INTR_EN_VBLANK_ENABLED
*(_DWORD *)(gpu + 0x9400) = 0; // NV_PTIMER_TIME_0
*(_DWORD *)(gpu + 0x9410) = 0; // NV_PTIMER_TIME_1
*(_DWORD *)(gpu + 0x400720) = 0; // NV_PGRAPH_FIFO_ACCESS_DISABLE
D3D::CMiniport::HalGrControlLoad(v1);
*(_DWORD *)(gpu + 0x400100) = 0xFFFFFFFFu; // NV_PGRAPH_INTR_ALL_ENABLE
*(_DWORD *)(gpu + 0x400140) = 0xFFFFFFFFu; // NV_PGRAPH_INTR_EN_ALL_ENABLE
D3D::CMiniport::HalFifoControlLoad(v1);
*(_DWORD *)(gpu + 0x2100) = 0xFFFFFFFFu; // NV_PFIFO_INTR_0_ALL_RESET
*(_DWORD *)(gpu + 0x2140) = *((_DWORD *)v1 + 71);// NV_PFIFO_INTR_EN_0
*((_DWORD *)v1 + 528) = 0xFFFFFFFFu;
*((_DWORD *)v1 + 529) = 0xFFFFFFFFu;
*((_DWORD *)v1 + 520) = 0;
*((_DWORD *)v1 + 521) = 0;
return 1;
}
</pre>
<pre>
int __thiscall D3D::CMiniport::HalDacLoad(void *this)
{
int gpu; // eax@1
gpu = *(_DWORD *)this;
*(_DWORD *)(*(_DWORD *)this + 6291712) = 1;
*(_DWORD *)(gpu + 0x600140) = 1; // PCRTC_INTR_EN_VBLANK_ENABLED
return gpu;
}
</pre>
<pre>
int __thiscall D3D::CMiniport::HalGrControlLoad(int this)
{
int v1; // edi@1
int gpu; // esi@1
int v3; // eax@1
signed int v4; // edx@1
int v5; // eax@1
int v6; // ebp@2
int v7; // ebp@2
int v8; // ebp@2
int v9; // eax@3
int v10; // edx@4
int v11; // ebp@4
char v12; // zf@4
int v13; // eax@5
int v14; // eax@5
int v15; // eax@5
signed int v17; // [sp+14h] [bp-4h]@3
v1 = this;
gpu = *(_DWORD *)this;
v3 = *(_DWORD *)this + 512;
*(_DWORD *)v3 &= 0xFFFFEFFFu;
*(_DWORD *)v3 |= 0x1000u;
*(_DWORD *)(this + 2028) = 0;
*(_DWORD *)(this + 2044) = 0; // NV_PGRAPH_DEBUG_4
*(_DWORD *)(this + 2056) = 0; // NV_PGRAPH_UNKNOWN_400B84
*(_DWORD *)(this + 2068) = 0; // NV_PGRAPH_UNKNOWN_400B88
*(_DWORD *)(this + 2032) = 0x118700u; // NV_PGRAPH_DEBUG_1
*(_DWORD *)(this + 2036) = 0x28C3FFu; // NV_PGRAPH_DEBUG_7
*(_DWORD *)(this + 2040) = 0xF3DE0479u; // NV_PGRAPH_DEBUG_3
*(_DWORD *)(this + 2048) = 4; // NV_PGRAPH_DEBUG_5
*(_DWORD *)(this + 2052) = 0x45EAD10Eu; // NV_PGRAPH_UNKNOWN_400B80
*(_DWORD *)(this + 2060) = 0x78u; // NV_PGRAPH_UNKNOWN_400098
*(_DWORD *)(this + 2064) = 0x40u; // NV_PGRAPH_UNKNOWN_40009C
*(_DWORD *)(gpu + 0x400080) = 0; // NV_PGRAPH_DEBUG_0_NO_RESET
*(_DWORD *)(gpu + 0x400084) = *(_DWORD *)(this + 2032);// NV_PGRAPH_DEBUG_1
*(_DWORD *)(gpu + 0x400880) = *(_DWORD *)(this + 2036);// NV_PGRAPH_DEBUG_7
*(_DWORD *)(gpu + 0x40008C) = *(_DWORD *)(this + 2040);// NV_PGRAPH_DEBUG_3
*(_DWORD *)(gpu + 0x400090) = *(_DWORD *)(this + 2044);// NV_PGRAPH_DEBUG_4
*(_DWORD *)(gpu + 0x400094) = *(_DWORD *)(this + 2048);// NV_PGRAPH_DEBUG_5
*(_DWORD *)(gpu + 0x400B80) = *(_DWORD *)(this + 2052);// NV_PGRAPH_UNKNOWN_400B80
*(_DWORD *)(gpu + 0x400B84) = *(_DWORD *)(this + 2056);// NV_PGRAPH_UNKNOWN_400B84
*(_DWORD *)(gpu + 0x400098) = *(_DWORD *)(this + 2060);// NV_PGRAPH_UNKNOWN_400098
*(_DWORD *)(gpu + 0x40009C) = *(_DWORD *)(this + 2064);// NV_PGRAPH_UNKNOWN_40009C
*(_DWORD *)(gpu + 0x400B88) = *(_DWORD *)(this + 2068);// NV_PGRAPH_UNKNOWN_400B88
*(_DWORD *)(gpu + 0x400780) = *(_DWORD *)(this + 320) & 0xFFFF;// NV_PGRAPH_CHANNEL_CTX_TABLE
D3D::CMiniport::HalGrIdle((void *)this);
v4 = 80;
v5 = gpu + 0x400904; // NV_PGRAPH_TLIMIT_XBOX
do
{
v6 = *(_DWORD *)(v5 - 0x3006C0); // NV_PFB_TLIMIT
*(_DWORD *)v5 = v6; // NV_PGRAPH_TLIMIT_XBOX
*(_DWORD *)(gpu + 0x400750) = (v4 - 32) & 0x1FFC | 0xEA0000;// NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v6; // NV_PGRAPH_RDI_DATA
v7 = *(_DWORD *)(v5 - 0x3006BC); // NV_PFB_TSIZE
*(_DWORD *)(v5 + 4) = v7; // NV_PGRAPH_TSIZE_XBOX
*(_DWORD *)(gpu + 0x400750) = v4 & 0x1FFC | 0xEA0000;// NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v7; // NV_PGRAPH_RDI_DATA
v8 = *(_DWORD *)(v5 - 0x3006C4); // NV_PFB_TILE
*(_DWORD *)(v5 - 4) = v8; // NV_PGRAPH_TILE_XBOX
*(_DWORD *)(gpu + 0x400750) = (v4 - 64) & 0x1FFC | 0xEA0000;// NV_PGRAPH_RDI_INDEX
v4 += 4;
v5 += 0x10u;
*(_DWORD *)(gpu + 0x400754) = v8; // NV_PGRAPH_RDI_DATA
}
while ( v4 < 112 );
v9 = gpu + 0x400980; // NV_PGRAPH_ZCOMP_XBOX
v17 = 8;
do
{
v10 = *(_DWORD *)(v9 - 0x300680); // NV_PFB_ZCOMP
*(_DWORD *)v9 = v10; // NV_PGRAPH_ZCOMP_XBOX
v11 = (v9 + 0xFFBFF710 - gpu) & 0x1FFC | 0xEA0000;// (0x90) & 0x1FFC | 0xEA0000
v9 += 4;
v12 = v17-- == 1;
*(_DWORD *)(gpu + 0x400750) = v11; // NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v10; // NV_PGRAPH_RDI_DATA
}
while ( !v12 );
v13 = *(_DWORD *)(gpu + 0x100324); // NV_PFB_ZCOMP_OFFSET
*(_DWORD *)(gpu + 0x4009A0) = v13; // NV_PGRAPH_ZCOMP_OFFSET_XBOX
*(_DWORD *)(gpu + 0x400750) = 0xEA000Cu; // NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v13; // NV_PGRAPH_RDI_DATA
v14 = *(_DWORD *)(gpu + 0x100200); // NV_PFB_CFG0
*(_DWORD *)(gpu + 0x4009A4) = v14; // NV_PGRAPH_CFG0_XBOX
*(_DWORD *)(gpu + 0x400750) = 0xEA0000u; // NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v14; // NV_PGRAPH_RDI_DATA
v15 = *(_DWORD *)(gpu + 0x100204); // NV_PFB_CFG1
*(_DWORD *)(gpu + 0x4009A8) = v15; // NV_PGRAPH_CFG1_XBOX
*(_DWORD *)(gpu + 0x400750) = 0xEA0004u; // NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v15; // NV_PGRAPH_RDI_DATA
*(_DWORD *)(gpu + 0x40014C) = 0; // NV_PGRAPH_CTX_SWITCH1_ALL_DISABLE
*(_DWORD *)(gpu + 0x400150) = 0; // NV_PGRAPH_CTX_SWITCH2_ALL_DISABLE
*(_DWORD *)(gpu + 0x400154) = 0; // NV_PGRAPH_CTX_SWITCH3_ALL_DISABLE
*(_DWORD *)(gpu + 0x400158) = 0; // NV_PGRAPH_CTX_SWITCH4_ALL_DISABLE
*(_DWORD *)(gpu + 0x400144) = 0x10000000u; // NV_PGRAPH_CTX_CONTROL_DEVICE_ENABLED
*(_DWORD *)(gpu + 0x400764) = 0x8000000u; // NV_PGRAPH_FFINTFC_ST2_CHID_STATUS_VALID
return D3D::CMiniport::HalGrLoadChannelContext((void *)v1, *(_DWORD *)(v1 + 308));
}
int __thiscall D3D::CMiniport::HalGrIdle(void *this)
{
void *v1; // edi@1
int gpu; // esi@1
int result; // eax@1
int v4; // ebx@2
v1 = this;
gpu = *(_DWORD *)this;
result = *(_DWORD *)(*(_DWORD *)this + 4196096);
if ( result )
{
do
{
v4 = *(_DWORD *)(gpu + 0x100); // NV_PBUS_ROM_VERSION_MASK
if ( BYTE1(v4) & 0x10 )
result = unknown_libname_835(v1);
if ( v4 & 0x1000000 )
result = D3D::CMiniport::VBlank(v1);
}
while ( *(_DWORD *)(gpu + 0x400700) ); // NV_PGRAPH_STATUS_NOT_BUSY (while BUSY)
}
return result;
}
int __thiscall unknown_libname_835(void *this)
{
int gpu; // esi@1
int v2; // eax@1
int v3; // ebx@1
int v4; // edi@1
void *v6; // [sp+0h] [bp-4h]@1
v6 = this;
gpu = *(_DWORD *)this;
*(_DWORD *)(*(_DWORD *)this + 0x400720) = 0; // NV_PGRAPH_FIFO_ACCESS_DISABLE
v2 = *(_DWORD *)(gpu + 0x400100); // NV_PGRAPH_INTR
v3 = *(_DWORD *)(gpu + 0x400108); // NV_PGRAPH_NSOURCE
v4 = *(_DWORD *)(gpu + 0x400704) & 0x1FFC; // NV_PGRAPH_TRAPPED_ADDR_MTHD
if ( !(BYTE1(v2) & 0x10) ) // NV_PGRAPH_INTR_MISSING_HW_PENDING
goto LABEL_14;
*(_DWORD *)(gpu + 0x400100) = 0x1000u; // NV_PGRAPH_INTR_CONTEXT_SWITCH_PENDING
while ( *(_DWORD *)(*(_DWORD *)this + 0x400700) )// NV_PGRAPH_STATUS_NOT_BUSY (while BUSY)
;
D3D::CMiniport::HalGrLoadChannelContext(this, ((unsigned int)v4 >> 20) & 0x1F);
v2 = *(_DWORD *)(gpu + 0x400100); // NV_PGRAPH_INTR
if ( v2 )
{
LABEL_14:
*(_DWORD *)(gpu + 0x400100) = v2; // NV_PGRAPH_INTR
if ( v3 && v2 & 0x100001 && !(v3 & 0x40) ) // NV_PGRAPH_NSOURCE && NV_PGRAPH_INTR & NV_PGRAPH_INTR_NOTIFY_PENDING|NV_PGRAPH_INTR_ERROR_PENDING && !(NV_PGRAPH_NSOURCE & NV_PGRAPH_NSOURCE_ILLEGAL_MTHD_PENDING)
{
if ( v4 == 0x100 ) // NV_PGRAPH_TRAPPED_ADDR_MTHD
{
D3D::CMiniport::SoftwareMethod(v6, *(_DWORD *)(gpu + 0x400708));// NV_PGRAPH_TRAPPED_DATA_LOW
}
else
{
unknown_libname_837(
"Graphics hardware error information:\n Source: %08x\n ChID: %d\n Class: %x\n Method: %08x\n Data: %08x\n Get: %08x\n",
v3, // NV_PGRAPH_NSOURCE
((unsigned int)v4 >> 20) & 0x1F, // NV_PGRAPH_TRAPPED_ADDR_CHID
*(_DWORD *)(gpu + 0x40014C) & 0xFF, // NV_PGRAPH_CTX_SWITCH1_GRCLASS
v4, // NV_PGRAPH_TRAPPED_ADDR_MTHD
*(_DWORD *)(gpu + 0x400708), // NV_PGRAPH_TRAPPED_DATA_LOW
vFD003244 | 0x80000000); // NV_PFIFO_CACHE1_DMA_GET
__debugbreak();
}
}
}
*(_DWORD *)(gpu + 0x400720) = 1; // NV_PGRAPH_FIFO_ACCESS_ENABLE
return *(_DWORD *)(gpu + 0x400100); // NV_PGRAPH_INTR
}
//TODO D3D::CMiniport::VBlank
int __thiscall D3D::CMiniport::HalGrLoadChannelContext(void *this, int a2)
{
void *v2; // ebx@1
int gpu; // esi@1
int v4; // edx@3
int result; // eax@6
signed int v6; // eax@8
int v7; // edi@10
int v8; // esi@10
int v9; // [sp+Ch] [bp-4h]@3
v2 = this;
gpu = *(_DWORD *)this;
if ( *(_DWORD *)(*(_DWORD *)this + 4194560) )
unknown_libname_835(this);
v9 = *(_DWORD *)(gpu + 0x400720); // NV_PGRAPH_FIFO
*(_DWORD *)(gpu + 0x400720) = 0; // NV_PGRAPH_FIFO_ACCESS_DISABLE
D3D::CMiniport::HalGrIdle(v2);
v4 = a2;
if ( *((_DWORD *)v2 + 77) != a2 )
{
D3D::CMiniport::HalGrUnloadChannelContext(v2, *((_DWORD *)v2 + 77));
v4 = a2;
}
*((_DWORD *)v2 + 77) = v4;
if ( v4 == 2 )
{
*(_DWORD *)(gpu + 0x400144) = 0x10000100u; // NV_PGRAPH_CTX_CONTROL_TIME_NOT_EXPIRED|NV_PGRAPH_CTX_CONTROL_DEVICE_ENABLED
result = v9 | 1;
*(_DWORD *)(gpu + 0x400764) = 0x8000000u; // NV_PGRAPH_FFINTFC_ST2_CHID_STATUS_VALID
*(_DWORD *)(gpu + 0x400720) = v9 | 1; // NV_PGRAPH_FIFO_ACCESS_ENABLE
}
else
{
if ( *((_DWORD *)v2 + v4 + 81) )
{
*(_DWORD *)(gpu + 0x400080) = 0x70000u; // NV_PGRAPH_DEBUG_0_IDX_STATE_RESET|NV_PGRAPH_DEBUG_0_VTX_STATE_RESET|NV_PGRAPH_DEBUG_0_CAS_STATE_RESET
*(_DWORD *)(gpu + 0x400080) = 0; // NV_PGRAPH_DEBUG_0_NO_RESET
*(_DWORD *)(gpu + 0x400750) = 0x3D0000u; // NV_PGRAPH_RDI_INDEX_SELECT
v6 = 15;
do
{
--v6;
*(_DWORD *)(gpu + 0x400754) = 0; // NV_PGRAPH_RDI_DATA
}
while ( v6 );
}
*(_DWORD *)(gpu + 0x400084) |= 0x1000000u; // NV_PGRAPH_DEBUG_1_CACHE_INVALIDATE
v7 = (v4 & 0x1F) << 24;
*(_DWORD *)(gpu + 0x400148) = v7; // NV_PGRAPH_CTX_USER
*(_DWORD *)(gpu + 0x400784) = *((_DWORD *)v2 + a2 + 78) & 0xFFFF;// NV_PGRAPH_CHANNEL_CTX_POINTER_INST
*(_DWORD *)(gpu + 0x400788) = 1; // NV_PGRAPH_CHANNEL_CTX_STATUS_LOADED
D3D::CMiniport::HalGrIdle(v2);
*(_DWORD *)(gpu + 0x400148) = v7 | *(_DWORD *)(gpu + 0x400148) & 0xE0FFFFFF;// NV_PGRAPH_CTX_USER_CHID (inverted mask)
*(_DWORD *)(gpu + 0x400144) = 0x10010100u; // NV_PGRAPH_CTX_CONTROL_TIME_NOT_EXPIRED|NV_PGRAPH_CTX_CONTROL_CHID_VALID|NV_PGRAPH_CTX_CONTROL_DEVICE_ENABLED
v8 = gpu + 0x400764; // NV_PGRAPH_FFINTFC_ST2
result = *(_DWORD *)v8 & 0xCFFFFFFF; // NV_PGRAPH_FFINTFC_ST2_CHSWITCH_CLEAR&NV_PGRAPH_FFINTFC_ST2_FIFOHOLD_CLEAR
*(_DWORD *)v8 = result; // NV_PGRAPH_FFINTFC_ST2
}
return result;
}
int __thiscall D3D::CMiniport::HalGrUnloadChannelContext(void *this, int a2)
{
int result; // eax@1
int gpu; // esi@1
result = a2;
gpu = *(_DWORD *)this;
if ( a2 != 2 )
{
*(_DWORD *)(gpu + 0x400784) = *((_DWORD *)this + a2 + 78) & 0xFFFF;// NV_PGRAPH_CHANNEL_CTX_POINTER_INST
*(_DWORD *)(gpu + 0x400788) = 2; // NV_PGRAPH_CHANNEL_CTX_STATUS_UNLOADED
result = D3D::CMiniport::HalGrIdle(this);
*(_DWORD *)(gpu + 0x400144) = 0x10000000u; // NV_PGRAPH_CTX_CONTROL_DEVICE_ENABLED
}
return result;
}
</pre>
<pre>
int __thiscall D3D::CMiniport::HalFifoControlLoad(void *this)
{
int gpu; // esi@1
int result; // eax@1
gpu = *(_DWORD *)this;
*(_DWORD *)(*(_DWORD *)this + 12836) = 0xF0078u;
*(_DWORD *)(gpu + 0x2044) = 0x101FFFFu; // NV_PFIFO_DMA_TIMESLICE_SELECT_128K|NV_PFIFO_DMA_TIMESLICE_TIMEOUT_ENABLED
*(_DWORD *)(gpu + 0x2040) = *((_DWORD *)this + 72) & 0x3FF;// NV_PFIFO_DELAY_0_WAIT_RETRY
*(_DWORD *)(gpu + 0x2500) = 0; // NV_PFIFO_CACHES_ALL_DISABLE
*(_DWORD *)(gpu + 0x3000) = 0; // NV_PFIFO_CACHE0_PUSH0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3050) = 0; // NV_PFIFO_CACHE0_PULL0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3200) = 0; // NV_PFIFO_CACHE1_PUSH0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3250) = 0; // NV_PFIFO_CACHE1_PULL0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3220) = 0; // NV_PFIFO_CACHE1_DMA_PUSH_ACCESS_DISABLE
result = D3D::CMiniport::HalFifoContextSwitch(this, 1);
*(_DWORD *)(gpu + 0x3210) = 0; // NV_PFIFO_CACHE1_PUT_ADDRESS
*(_DWORD *)(gpu + 0x3270) = 0; // NV_PFIFO_CACHE1_GET_ADDRESS
*(_DWORD *)(gpu + 0x3250) = 1; // NV_PFIFO_CACHE1_PULL0_ACCESS_ENABLE
*(_DWORD *)(gpu + 0x3200) = 1; // NV_PFIFO_CACHE1_PUSH0_ACCESS_ENABLE
*(_DWORD *)(gpu + 0x2500) = 1; // NV_PFIFO_CACHES_REASSIGN_ENABLED
*(_DWORD *)(gpu + 0x2500) = 0; // NV_PFIFO_CACHES_ALL_DISABLE
return result;
}
int __thiscall D3D::CMiniport::HalFifoContextSwitch(void *this, int a2_switch)
{
void *v2; // esi@1
int gpu; // eax@1
int v4; // ebx@1
int v5; // ecx@1
int v6; // edx@1
int v7; // ecx@2
int v8; // edx@8
int v9; // [sp+Ch] [bp-14h]@1
int v10; // [sp+10h] [bp-10h]@1
int v11; // [sp+14h] [bp-Ch]@1
signed int v12; // [sp+1Ch] [bp-4h]@2
v2 = this;
gpu = *(_DWORD *)this;
v4 = *((_DWORD *)this + 74); // unknown1
v9 = *(_DWORD *)(*(_DWORD *)this + 9472);
v10 = *(_DWORD *)(*(_DWORD *)this + 12800);
v11 = *(_DWORD *)(*(_DWORD *)this + 12880);
*(_DWORD *)(*(_DWORD *)this + 9472) = 0;
*(_DWORD *)(gpu + 0x3200) = 0; // NV_PFIFO_CACHE1_PUSH0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3250) = 0; // NV_PFIFO_CACHE1_PULL0_ACCESS_DISABLE
v5 = *(_DWORD *)(gpu + 0x3204) & 0x1F; // NV_PFIFO_CACHE1_PUSH1_CHID
v6 = gpu + v4 + ((*(_DWORD *)(gpu + 0x3204) & 0x1F) << 6);// unknown2
*(_DWORD *)v6 = *(_DWORD *)(gpu + 0x3240); // NV_PFIFO_CACHE1_DMA_PUT
*(_DWORD *)(v6 + 4) = *(_DWORD *)(gpu + 0x3244);// NV_PFIFO_CACHE1_DMA_GET
*(_DWORD *)(v6 + 8) = *(_DWORD *)(gpu + 0x3248);// NV_PFIFO_CACHE1_REF
*(_DWORD *)(v6 + 12) = *(_DWORD *)(gpu + 0x322C);// NV_PFIFO_CACHE1_DMA_INSTANCE
*(_DWORD *)(v6 + 16) = *(_DWORD *)(gpu + 0x3228);// NV_PFIFO_CACHE1_DMA_STATE
*(_DWORD *)(v6 + 20) = *(_DWORD *)(gpu + 0x3224);// NV_PFIFO_CACHE1_DMA_FETCH
*(_DWORD *)(v6 + 24) = *(_DWORD *)(gpu + 0x3280);// NV_PFIFO_CACHE1_ENGINE
*(_DWORD *)(v6 + 28) = *(_DWORD *)(gpu + 0x3254);// NV_PFIFO_CACHE1_PULL1
*(_DWORD *)(v6 + 32) = *(_DWORD *)(gpu + 0x3268);// NV_PFIFO_CACHE1_ACQUIRE_2
*(_DWORD *)(v6 + 36) = *(_DWORD *)(gpu + 0x3264);// NV_PFIFO_CACHE1_ACQUIRE_1
*(_DWORD *)(v6 + 40) = *(_DWORD *)(gpu + 0x3260);// NV_PFIFO_CACHE1_ACQUIRE_0
*(_DWORD *)(v6 + 44) = *(_DWORD *)(gpu + 0x326C);// NV_PFIFO_CACHE1_SEMAPHORE
*(_DWORD *)(v6 + 48) = *(_DWORD *)(gpu + 0x324C);// NV_PFIFO_CACHE1_DMA_SUBROUTINE
if ( *(_DWORD *)(gpu + 0x3204) & 0x100 ) // NV_PFIFO_CACHE1_PUSH1_MODE_DMA
{
v12 = 1 << v5;
v7 = *(_DWORD *)(gpu + 0x2508) & ~(1 << v5);// NV_PFIFO_DMA
if ( *(_DWORD *)(gpu + 0x3240) != *(_DWORD *)(gpu + 0x3244) )// NV_PFIFO_CACHE1_DMA_PUT != NV_PFIFO_CACHE1_DMA_GET
v7 |= v12;
*(_DWORD *)(gpu + 0x2508) = v7; // NV_PFIFO_DMA
}
*(_DWORD *)(gpu + 0x3204) = a2_switch & 0x1F; // NV_PFIFO_CACHE1_PUSH1_CHID
if ( (1 << a2_switch) & *((_DWORD *)v2 + 65) && a2_switch != 1 )
*(_DWORD *)(gpu + 0x3204) |= 0x100u; // NV_PFIFO_CACHE1_PUSH1_MODE_DMA
v8 = v4 + (a2_switch << 6) + gpu; // unknown3
*(_DWORD *)(gpu + 0x3240) = *(_DWORD *)v8; // NV_PFIFO_CACHE1_DMA_PUT
*(_DWORD *)(gpu + 0x3244) = *(_DWORD *)(v8 + 4);// NV_PFIFO_CACHE1_DMA_GET
*(_DWORD *)(gpu + 0x3248) = *(_DWORD *)(v8 + 8);// NV_PFIFO_CACHE1_REF
*(_DWORD *)(gpu + 0x322C) = *(_DWORD *)(v8 + 12);// NV_PFIFO_CACHE1_DMA_INSTANCE
*(_DWORD *)(gpu + 0x3228) = *(_DWORD *)(v8 + 16);// NV_PFIFO_CACHE1_DMA_STATE
*(_DWORD *)(gpu + 0x3224) = *(_DWORD *)(v8 + 20);// NV_PFIFO_CACHE1_DMA_FETCH
*(_DWORD *)(gpu + 0x3280) = *(_DWORD *)(v8 + 24);// NV_PFIFO_CACHE1_ENGINE
*(_DWORD *)(gpu + 0x3254) = *(_DWORD *)(v8 + 28);// NV_PFIFO_CACHE1_PULL1
*(_DWORD *)(gpu + 0x3268) = *(_DWORD *)(v8 + 32);// NV_PFIFO_CACHE1_ACQUIRE_2
*(_DWORD *)(gpu + 0x3264) = *(_DWORD *)(v8 + 36);// NV_PFIFO_CACHE1_ACQUIRE_1
*(_DWORD *)(gpu + 0x3260) = *(_DWORD *)(v8 + 40);// NV_PFIFO_CACHE1_ACQUIRE_0
*(_DWORD *)(gpu + 0x326C) = *(_DWORD *)(v8 + 44);// NV_PFIFO_CACHE1_SEMAPHORE
*(_DWORD *)(gpu + 0x324C) = *(_DWORD *)(v8 + 48);// NV_PFIFO_CACHE1_DMA_SUBROUTINE
if ( (1 << a2_switch) & *((_DWORD *)v2 + 65) && a2_switch != 1 )
*(_DWORD *)(gpu + 0x3220) = 1; // NV_PFIFO_CACHE1_DMA_PUSH_ACCESS_ENABLE
*(_DWORD *)(gpu + 0x204C) = 0x1FFFFFu; // NV_PFIFO_TIMESLICE_TIMER_EXPIRED
*(_DWORD *)(gpu + 0x3250) = v11; // NV_PFIFO_CACHE1_PULL0
*(_DWORD *)(gpu + 0x3200) = v10; // NV_PFIFO_CACHE1_PUSH0
*(_DWORD *)(gpu + 0x2500) = v9; // NV_PFIFO_CACHES
return gpu;
}
</pre>
7d6fe5cb962df3df26935b0b5780bc91e1a2794d
5672
5670
2017-06-04T09:51:02Z
Haxar
2485
wikitext
text/x-wiki
=== NV2A register access from D3D8 ===
I wanted to know how NV2A registers were being accessed from Xbox executables. So, I loaded IDA with Turok with the applied Xbox Flirt Signatures v.2 and took references from '''pbkit''' to help me out with this.
'''D3D::CMiniport::MapRegisters''' is where it all begins. This is just a handful of subroutines from the '''D3D::CMiniport''' namespace.
Every single access is annotated from '''pbkit'''. It has been very useful.
<pre>
// turok
// using pbkit/outer.h
// gpu == 0xfd000000
</pre>
<pre>
signed int __thiscall D3D::CMiniport::MapRegisters(void *this)
{
*(_DWORD *)this = 0xFD000000u; // VIDEO_BASE
vFD001804 |= 4u; // NV_PBUS_PCI_NV_1_BUS_MASTER_ENABLED
vFD600140 = 0; // PCRTC_INTR_EN_VBLANK_DISABLED
vFD009140 = 0; // NV_PTIMER_INTR_EN_0_ALARM_DISABLED
return 1;
}
</pre>
<pre>
signed int __thiscall D3D::CMiniport::LoadEngines(void *this)
{
void *v1; // edi@1
int gpu; // esi@1
int v3; // eax@1
int v4; // ecx@1
v1 = this;
gpu = *(_DWORD *)this;
v3 = *(_DWORD *)this + 6220;
v4 = *(_DWORD *)v3;
*(_DWORD *)v3 &= 0xFFFFFCFFu;
*(_DWORD *)v3 = v4;
*(_DWORD *)(gpu + 0x200) = 0xFFFFFFFFu; // NV_PMC_ENABLE_ALL_ENABLE
*(_DWORD *)(gpu + 0x140) = *((_DWORD *)v1 + 45);// NV_PMC_INTR_EN_0
D3D::CMiniport::HalDacLoad(v1); // PCRTC_INTR_EN_VBLANK_ENABLED
*(_DWORD *)(gpu + 0x9400) = 0; // NV_PTIMER_TIME_0
*(_DWORD *)(gpu + 0x9410) = 0; // NV_PTIMER_TIME_1
*(_DWORD *)(gpu + 0x400720) = 0; // NV_PGRAPH_FIFO_ACCESS_DISABLE
D3D::CMiniport::HalGrControlLoad(v1);
*(_DWORD *)(gpu + 0x400100) = 0xFFFFFFFFu; // NV_PGRAPH_INTR_ALL_ENABLE
*(_DWORD *)(gpu + 0x400140) = 0xFFFFFFFFu; // NV_PGRAPH_INTR_EN_ALL_ENABLE
D3D::CMiniport::HalFifoControlLoad(v1);
*(_DWORD *)(gpu + 0x2100) = 0xFFFFFFFFu; // NV_PFIFO_INTR_0_ALL_RESET
*(_DWORD *)(gpu + 0x2140) = *((_DWORD *)v1 + 71);// NV_PFIFO_INTR_EN_0
*((_DWORD *)v1 + 528) = 0xFFFFFFFFu;
*((_DWORD *)v1 + 529) = 0xFFFFFFFFu;
*((_DWORD *)v1 + 520) = 0;
*((_DWORD *)v1 + 521) = 0;
return 1;
}
</pre>
<pre>
int __thiscall D3D::CMiniport::HalDacLoad(void *this)
{
int gpu; // eax@1
gpu = *(_DWORD *)this;
*(_DWORD *)(*(_DWORD *)this + 6291712) = 1;
*(_DWORD *)(gpu + 0x600140) = 1; // PCRTC_INTR_EN_VBLANK_ENABLED
return gpu;
}
</pre>
<pre>
int __thiscall D3D::CMiniport::HalGrControlLoad(int this)
{
int v1; // edi@1
int gpu; // esi@1
int v3; // eax@1
signed int v4; // edx@1
int v5; // eax@1
int v6; // ebp@2
int v7; // ebp@2
int v8; // ebp@2
int v9; // eax@3
int v10; // edx@4
int v11; // ebp@4
char v12; // zf@4
int v13; // eax@5
int v14; // eax@5
int v15; // eax@5
signed int v17; // [sp+14h] [bp-4h]@3
v1 = this;
gpu = *(_DWORD *)this;
v3 = *(_DWORD *)this + 512;
*(_DWORD *)v3 &= 0xFFFFEFFFu;
*(_DWORD *)v3 |= 0x1000u;
*(_DWORD *)(this + 2028) = 0;
*(_DWORD *)(this + 2044) = 0; // NV_PGRAPH_DEBUG_4
*(_DWORD *)(this + 2056) = 0; // NV_PGRAPH_UNKNOWN_400B84
*(_DWORD *)(this + 2068) = 0; // NV_PGRAPH_UNKNOWN_400B88
*(_DWORD *)(this + 2032) = 0x118700u; // NV_PGRAPH_DEBUG_1
*(_DWORD *)(this + 2036) = 0x28C3FFu; // NV_PGRAPH_DEBUG_7
*(_DWORD *)(this + 2040) = 0xF3DE0479u; // NV_PGRAPH_DEBUG_3
*(_DWORD *)(this + 2048) = 4; // NV_PGRAPH_DEBUG_5
*(_DWORD *)(this + 2052) = 0x45EAD10Eu; // NV_PGRAPH_UNKNOWN_400B80
*(_DWORD *)(this + 2060) = 0x78u; // NV_PGRAPH_UNKNOWN_400098
*(_DWORD *)(this + 2064) = 0x40u; // NV_PGRAPH_UNKNOWN_40009C
*(_DWORD *)(gpu + 0x400080) = 0; // NV_PGRAPH_DEBUG_0_NO_RESET
*(_DWORD *)(gpu + 0x400084) = *(_DWORD *)(this + 2032);// NV_PGRAPH_DEBUG_1
*(_DWORD *)(gpu + 0x400880) = *(_DWORD *)(this + 2036);// NV_PGRAPH_DEBUG_7
*(_DWORD *)(gpu + 0x40008C) = *(_DWORD *)(this + 2040);// NV_PGRAPH_DEBUG_3
*(_DWORD *)(gpu + 0x400090) = *(_DWORD *)(this + 2044);// NV_PGRAPH_DEBUG_4
*(_DWORD *)(gpu + 0x400094) = *(_DWORD *)(this + 2048);// NV_PGRAPH_DEBUG_5
*(_DWORD *)(gpu + 0x400B80) = *(_DWORD *)(this + 2052);// NV_PGRAPH_UNKNOWN_400B80
*(_DWORD *)(gpu + 0x400B84) = *(_DWORD *)(this + 2056);// NV_PGRAPH_UNKNOWN_400B84
*(_DWORD *)(gpu + 0x400098) = *(_DWORD *)(this + 2060);// NV_PGRAPH_UNKNOWN_400098
*(_DWORD *)(gpu + 0x40009C) = *(_DWORD *)(this + 2064);// NV_PGRAPH_UNKNOWN_40009C
*(_DWORD *)(gpu + 0x400B88) = *(_DWORD *)(this + 2068);// NV_PGRAPH_UNKNOWN_400B88
*(_DWORD *)(gpu + 0x400780) = *(_DWORD *)(this + 320) & 0xFFFF;// NV_PGRAPH_CHANNEL_CTX_TABLE
D3D::CMiniport::HalGrIdle((void *)this);
v4 = 80;
v5 = gpu + 0x400904; // NV_PGRAPH_TLIMIT_XBOX
do
{
v6 = *(_DWORD *)(v5 - 0x3006C0); // NV_PFB_TLIMIT
*(_DWORD *)v5 = v6; // NV_PGRAPH_TLIMIT_XBOX
*(_DWORD *)(gpu + 0x400750) = (v4 - 32) & 0x1FFC | 0xEA0000;// NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v6; // NV_PGRAPH_RDI_DATA
v7 = *(_DWORD *)(v5 - 0x3006BC); // NV_PFB_TSIZE
*(_DWORD *)(v5 + 4) = v7; // NV_PGRAPH_TSIZE_XBOX
*(_DWORD *)(gpu + 0x400750) = v4 & 0x1FFC | 0xEA0000;// NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v7; // NV_PGRAPH_RDI_DATA
v8 = *(_DWORD *)(v5 - 0x3006C4); // NV_PFB_TILE
*(_DWORD *)(v5 - 4) = v8; // NV_PGRAPH_TILE_XBOX
*(_DWORD *)(gpu + 0x400750) = (v4 - 64) & 0x1FFC | 0xEA0000;// NV_PGRAPH_RDI_INDEX
v4 += 4;
v5 += 0x10u;
*(_DWORD *)(gpu + 0x400754) = v8; // NV_PGRAPH_RDI_DATA
}
while ( v4 < 112 );
v9 = gpu + 0x400980; // NV_PGRAPH_ZCOMP_XBOX
v17 = 8;
do
{
v10 = *(_DWORD *)(v9 - 0x300680); // NV_PFB_ZCOMP
*(_DWORD *)v9 = v10; // NV_PGRAPH_ZCOMP_XBOX
v11 = (v9 + 0xFFBFF710 - gpu) & 0x1FFC | 0xEA0000;// (0x90) & 0x1FFC | 0xEA0000
v9 += 4;
v12 = v17-- == 1;
*(_DWORD *)(gpu + 0x400750) = v11; // NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v10; // NV_PGRAPH_RDI_DATA
}
while ( !v12 );
v13 = *(_DWORD *)(gpu + 0x100324); // NV_PFB_ZCOMP_OFFSET
*(_DWORD *)(gpu + 0x4009A0) = v13; // NV_PGRAPH_ZCOMP_OFFSET_XBOX
*(_DWORD *)(gpu + 0x400750) = 0xEA000Cu; // NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v13; // NV_PGRAPH_RDI_DATA
v14 = *(_DWORD *)(gpu + 0x100200); // NV_PFB_CFG0
*(_DWORD *)(gpu + 0x4009A4) = v14; // NV_PGRAPH_CFG0_XBOX
*(_DWORD *)(gpu + 0x400750) = 0xEA0000u; // NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v14; // NV_PGRAPH_RDI_DATA
v15 = *(_DWORD *)(gpu + 0x100204); // NV_PFB_CFG1
*(_DWORD *)(gpu + 0x4009A8) = v15; // NV_PGRAPH_CFG1_XBOX
*(_DWORD *)(gpu + 0x400750) = 0xEA0004u; // NV_PGRAPH_RDI_INDEX
*(_DWORD *)(gpu + 0x400754) = v15; // NV_PGRAPH_RDI_DATA
*(_DWORD *)(gpu + 0x40014C) = 0; // NV_PGRAPH_CTX_SWITCH1_ALL_DISABLE
*(_DWORD *)(gpu + 0x400150) = 0; // NV_PGRAPH_CTX_SWITCH2_ALL_DISABLE
*(_DWORD *)(gpu + 0x400154) = 0; // NV_PGRAPH_CTX_SWITCH3_ALL_DISABLE
*(_DWORD *)(gpu + 0x400158) = 0; // NV_PGRAPH_CTX_SWITCH4_ALL_DISABLE
*(_DWORD *)(gpu + 0x400144) = 0x10000000u; // NV_PGRAPH_CTX_CONTROL_DEVICE_ENABLED
*(_DWORD *)(gpu + 0x400764) = 0x8000000u; // NV_PGRAPH_FFINTFC_ST2_CHID_STATUS_VALID
return D3D::CMiniport::HalGrLoadChannelContext((void *)v1, *(_DWORD *)(v1 + 308));
}
int __thiscall D3D::CMiniport::HalGrIdle(void *this)
{
void *v1; // edi@1
int gpu; // esi@1
int result; // eax@1
int v4; // ebx@2
v1 = this;
gpu = *(_DWORD *)this;
result = *(_DWORD *)(*(_DWORD *)this + 4196096);
if ( result )
{
do
{
v4 = *(_DWORD *)(gpu + 0x100); // NV_PBUS_ROM_VERSION_MASK
if ( BYTE1(v4) & 0x10 )
result = unknown_libname_835(v1);
if ( v4 & 0x1000000 )
result = D3D::CMiniport::VBlank(v1);
}
while ( *(_DWORD *)(gpu + 0x400700) ); // NV_PGRAPH_STATUS_NOT_BUSY (while BUSY)
}
return result;
}
int __thiscall unknown_libname_835(void *this)
{
int gpu; // esi@1
int v2; // eax@1
int v3; // ebx@1
int v4; // edi@1
void *v6; // [sp+0h] [bp-4h]@1
v6 = this;
gpu = *(_DWORD *)this;
*(_DWORD *)(*(_DWORD *)this + 0x400720) = 0; // NV_PGRAPH_FIFO_ACCESS_DISABLE
v2 = *(_DWORD *)(gpu + 0x400100); // NV_PGRAPH_INTR
v3 = *(_DWORD *)(gpu + 0x400108); // NV_PGRAPH_NSOURCE
v4 = *(_DWORD *)(gpu + 0x400704) & 0x1FFC; // NV_PGRAPH_TRAPPED_ADDR_MTHD
if ( !(BYTE1(v2) & 0x10) ) // NV_PGRAPH_INTR_MISSING_HW_PENDING
goto LABEL_14;
*(_DWORD *)(gpu + 0x400100) = 0x1000u; // NV_PGRAPH_INTR_CONTEXT_SWITCH_PENDING
while ( *(_DWORD *)(*(_DWORD *)this + 0x400700) )// NV_PGRAPH_STATUS_NOT_BUSY (while BUSY)
;
D3D::CMiniport::HalGrLoadChannelContext(this, ((unsigned int)v4 >> 20) & 0x1F);
v2 = *(_DWORD *)(gpu + 0x400100); // NV_PGRAPH_INTR
if ( v2 )
{
LABEL_14:
*(_DWORD *)(gpu + 0x400100) = v2; // NV_PGRAPH_INTR
if ( v3 && v2 & 0x100001 && !(v3 & 0x40) ) // NV_PGRAPH_NSOURCE && NV_PGRAPH_INTR & NV_PGRAPH_INTR_NOTIFY_PENDING|NV_PGRAPH_INTR_ERROR_PENDING && !(NV_PGRAPH_NSOURCE & NV_PGRAPH_NSOURCE_ILLEGAL_MTHD_PENDING)
{
if ( v4 == 0x100 ) // NV_PGRAPH_TRAPPED_ADDR_MTHD
{
D3D::CMiniport::SoftwareMethod(v6, *(_DWORD *)(gpu + 0x400708));// NV_PGRAPH_TRAPPED_DATA_LOW
}
else
{
unknown_libname_837(
"Graphics hardware error information:\n Source: %08x\n ChID: %d\n Class: %x\n Method: %08x\n Data: %08x\n Get: %08x\n",
v3, // NV_PGRAPH_NSOURCE
((unsigned int)v4 >> 20) & 0x1F, // NV_PGRAPH_TRAPPED_ADDR_CHID
*(_DWORD *)(gpu + 0x40014C) & 0xFF, // NV_PGRAPH_CTX_SWITCH1_GRCLASS
v4, // NV_PGRAPH_TRAPPED_ADDR_MTHD
*(_DWORD *)(gpu + 0x400708), // NV_PGRAPH_TRAPPED_DATA_LOW
vFD003244 | 0x80000000); // NV_PFIFO_CACHE1_DMA_GET
__debugbreak();
}
}
}
*(_DWORD *)(gpu + 0x400720) = 1; // NV_PGRAPH_FIFO_ACCESS_ENABLE
return *(_DWORD *)(gpu + 0x400100); // NV_PGRAPH_INTR
}
//TODO D3D::CMiniport::VBlank
int __thiscall D3D::CMiniport::HalGrLoadChannelContext(void *this, int a2)
{
void *v2; // ebx@1
int gpu; // esi@1
int v4; // edx@3
int result; // eax@6
signed int v6; // eax@8
int v7; // edi@10
int v8; // esi@10
int v9; // [sp+Ch] [bp-4h]@3
v2 = this;
gpu = *(_DWORD *)this;
if ( *(_DWORD *)(*(_DWORD *)this + 4194560) )
unknown_libname_835(this);
v9 = *(_DWORD *)(gpu + 0x400720); // NV_PGRAPH_FIFO
*(_DWORD *)(gpu + 0x400720) = 0; // NV_PGRAPH_FIFO_ACCESS_DISABLE
D3D::CMiniport::HalGrIdle(v2);
v4 = a2;
if ( *((_DWORD *)v2 + 77) != a2 )
{
D3D::CMiniport::HalGrUnloadChannelContext(v2, *((_DWORD *)v2 + 77));
v4 = a2;
}
*((_DWORD *)v2 + 77) = v4;
if ( v4 == 2 )
{
*(_DWORD *)(gpu + 0x400144) = 0x10000100u; // NV_PGRAPH_CTX_CONTROL_TIME_NOT_EXPIRED|NV_PGRAPH_CTX_CONTROL_DEVICE_ENABLED
result = v9 | 1;
*(_DWORD *)(gpu + 0x400764) = 0x8000000u; // NV_PGRAPH_FFINTFC_ST2_CHID_STATUS_VALID
*(_DWORD *)(gpu + 0x400720) = v9 | 1; // NV_PGRAPH_FIFO_ACCESS_ENABLE
}
else
{
if ( *((_DWORD *)v2 + v4 + 81) )
{
*(_DWORD *)(gpu + 0x400080) = 0x70000u; // NV_PGRAPH_DEBUG_0_IDX_STATE_RESET|NV_PGRAPH_DEBUG_0_VTX_STATE_RESET|NV_PGRAPH_DEBUG_0_CAS_STATE_RESET
*(_DWORD *)(gpu + 0x400080) = 0; // NV_PGRAPH_DEBUG_0_NO_RESET
*(_DWORD *)(gpu + 0x400750) = 0x3D0000u; // NV_PGRAPH_RDI_INDEX_SELECT
v6 = 15;
do
{
--v6;
*(_DWORD *)(gpu + 0x400754) = 0; // NV_PGRAPH_RDI_DATA
}
while ( v6 );
}
*(_DWORD *)(gpu + 0x400084) |= 0x1000000u; // NV_PGRAPH_DEBUG_1_CACHE_INVALIDATE
v7 = (v4 & 0x1F) << 24;
*(_DWORD *)(gpu + 0x400148) = v7; // NV_PGRAPH_CTX_USER
*(_DWORD *)(gpu + 0x400784) = *((_DWORD *)v2 + a2 + 78) & 0xFFFF;// NV_PGRAPH_CHANNEL_CTX_POINTER_INST
*(_DWORD *)(gpu + 0x400788) = 1; // NV_PGRAPH_CHANNEL_CTX_STATUS_LOADED
D3D::CMiniport::HalGrIdle(v2);
*(_DWORD *)(gpu + 0x400148) = v7 | *(_DWORD *)(gpu + 0x400148) & 0xE0FFFFFF;// NV_PGRAPH_CTX_USER_CHID (inverted mask)
*(_DWORD *)(gpu + 0x400144) = 0x10010100u; // NV_PGRAPH_CTX_CONTROL_TIME_NOT_EXPIRED|NV_PGRAPH_CTX_CONTROL_CHID_VALID|NV_PGRAPH_CTX_CONTROL_DEVICE_ENABLED
v8 = gpu + 0x400764; // NV_PGRAPH_FFINTFC_ST2
result = *(_DWORD *)v8 & 0xCFFFFFFF; // NV_PGRAPH_FFINTFC_ST2_CHSWITCH_CLEAR&NV_PGRAPH_FFINTFC_ST2_FIFOHOLD_CLEAR
*(_DWORD *)v8 = result; // NV_PGRAPH_FFINTFC_ST2
}
return result;
}
int __thiscall D3D::CMiniport::HalGrUnloadChannelContext(void *this, int a2)
{
int result; // eax@1
int gpu; // esi@1
result = a2;
gpu = *(_DWORD *)this;
if ( a2 != 2 )
{
*(_DWORD *)(gpu + 0x400784) = *((_DWORD *)this + a2 + 78) & 0xFFFF;// NV_PGRAPH_CHANNEL_CTX_POINTER_INST
*(_DWORD *)(gpu + 0x400788) = 2; // NV_PGRAPH_CHANNEL_CTX_STATUS_UNLOADED
result = D3D::CMiniport::HalGrIdle(this);
*(_DWORD *)(gpu + 0x400144) = 0x10000000u; // NV_PGRAPH_CTX_CONTROL_DEVICE_ENABLED
}
return result;
}
</pre>
<pre>
int __thiscall D3D::CMiniport::HalFifoControlLoad(void *this)
{
int gpu; // esi@1
int result; // eax@1
gpu = *(_DWORD *)this;
*(_DWORD *)(*(_DWORD *)this + 12836) = 0xF0078u;
*(_DWORD *)(gpu + 0x2044) = 0x101FFFFu; // NV_PFIFO_DMA_TIMESLICE_SELECT_128K|NV_PFIFO_DMA_TIMESLICE_TIMEOUT_ENABLED
*(_DWORD *)(gpu + 0x2040) = *((_DWORD *)this + 72) & 0x3FF;// NV_PFIFO_DELAY_0_WAIT_RETRY
*(_DWORD *)(gpu + 0x2500) = 0; // NV_PFIFO_CACHES_ALL_DISABLE
*(_DWORD *)(gpu + 0x3000) = 0; // NV_PFIFO_CACHE0_PUSH0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3050) = 0; // NV_PFIFO_CACHE0_PULL0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3200) = 0; // NV_PFIFO_CACHE1_PUSH0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3250) = 0; // NV_PFIFO_CACHE1_PULL0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3220) = 0; // NV_PFIFO_CACHE1_DMA_PUSH_ACCESS_DISABLE
result = D3D::CMiniport::HalFifoContextSwitch(this, 1);
*(_DWORD *)(gpu + 0x3210) = 0; // NV_PFIFO_CACHE1_PUT_ADDRESS
*(_DWORD *)(gpu + 0x3270) = 0; // NV_PFIFO_CACHE1_GET_ADDRESS
*(_DWORD *)(gpu + 0x3250) = 1; // NV_PFIFO_CACHE1_PULL0_ACCESS_ENABLE
*(_DWORD *)(gpu + 0x3200) = 1; // NV_PFIFO_CACHE1_PUSH0_ACCESS_ENABLE
*(_DWORD *)(gpu + 0x2500) = 1; // NV_PFIFO_CACHES_REASSIGN_ENABLED
*(_DWORD *)(gpu + 0x2500) = 0; // NV_PFIFO_CACHES_ALL_DISABLE
return result;
}
int __thiscall D3D::CMiniport::HalFifoContextSwitch(void *this, int a2_switch)
{
void *v2; // esi@1
int gpu; // eax@1
int v4; // ebx@1
int v5; // ecx@1
int v6; // edx@1
int v7; // ecx@2
int v8; // edx@8
int v9; // [sp+Ch] [bp-14h]@1
int v10; // [sp+10h] [bp-10h]@1
int v11; // [sp+14h] [bp-Ch]@1
signed int v12; // [sp+1Ch] [bp-4h]@2
v2 = this;
gpu = *(_DWORD *)this;
v4 = *((_DWORD *)this + 74); // unknown1
v9 = *(_DWORD *)(*(_DWORD *)this + 9472);
v10 = *(_DWORD *)(*(_DWORD *)this + 12800);
v11 = *(_DWORD *)(*(_DWORD *)this + 12880);
*(_DWORD *)(*(_DWORD *)this + 9472) = 0;
*(_DWORD *)(gpu + 0x3200) = 0; // NV_PFIFO_CACHE1_PUSH0_ACCESS_DISABLE
*(_DWORD *)(gpu + 0x3250) = 0; // NV_PFIFO_CACHE1_PULL0_ACCESS_DISABLE
v5 = *(_DWORD *)(gpu + 0x3204) & 0x1F; // NV_PFIFO_CACHE1_PUSH1_CHID
v6 = gpu + v4 + ((*(_DWORD *)(gpu + 0x3204) & 0x1F) << 6);// unknown2
*(_DWORD *)v6 = *(_DWORD *)(gpu + 0x3240); // NV_PFIFO_CACHE1_DMA_PUT
*(_DWORD *)(v6 + 4) = *(_DWORD *)(gpu + 0x3244);// NV_PFIFO_CACHE1_DMA_GET
*(_DWORD *)(v6 + 8) = *(_DWORD *)(gpu + 0x3248);// NV_PFIFO_CACHE1_REF
*(_DWORD *)(v6 + 12) = *(_DWORD *)(gpu + 0x322C);// NV_PFIFO_CACHE1_DMA_INSTANCE
*(_DWORD *)(v6 + 16) = *(_DWORD *)(gpu + 0x3228);// NV_PFIFO_CACHE1_DMA_STATE
*(_DWORD *)(v6 + 20) = *(_DWORD *)(gpu + 0x3224);// NV_PFIFO_CACHE1_DMA_FETCH
*(_DWORD *)(v6 + 24) = *(_DWORD *)(gpu + 0x3280);// NV_PFIFO_CACHE1_ENGINE
*(_DWORD *)(v6 + 28) = *(_DWORD *)(gpu + 0x3254);// NV_PFIFO_CACHE1_PULL1
*(_DWORD *)(v6 + 32) = *(_DWORD *)(gpu + 0x3268);// NV_PFIFO_CACHE1_ACQUIRE_2
*(_DWORD *)(v6 + 36) = *(_DWORD *)(gpu + 0x3264);// NV_PFIFO_CACHE1_ACQUIRE_1
*(_DWORD *)(v6 + 40) = *(_DWORD *)(gpu + 0x3260);// NV_PFIFO_CACHE1_ACQUIRE_0
*(_DWORD *)(v6 + 44) = *(_DWORD *)(gpu + 0x326C);// NV_PFIFO_CACHE1_SEMAPHORE
*(_DWORD *)(v6 + 48) = *(_DWORD *)(gpu + 0x324C);// NV_PFIFO_CACHE1_DMA_SUBROUTINE
if ( *(_DWORD *)(gpu + 0x3204) & 0x100 ) // NV_PFIFO_CACHE1_PUSH1_MODE_DMA
{
v12 = 1 << v5;
v7 = *(_DWORD *)(gpu + 0x2508) & ~(1 << v5);// NV_PFIFO_DMA
if ( *(_DWORD *)(gpu + 0x3240) != *(_DWORD *)(gpu + 0x3244) )// NV_PFIFO_CACHE1_DMA_PUT != NV_PFIFO_CACHE1_DMA_GET
v7 |= v12;
*(_DWORD *)(gpu + 0x2508) = v7; // NV_PFIFO_DMA
}
*(_DWORD *)(gpu + 0x3204) = a2_switch & 0x1F; // NV_PFIFO_CACHE1_PUSH1_CHID
if ( (1 << a2_switch) & *((_DWORD *)v2 + 65) && a2_switch != 1 )
*(_DWORD *)(gpu + 0x3204) |= 0x100u; // NV_PFIFO_CACHE1_PUSH1_MODE_DMA
v8 = v4 + (a2_switch << 6) + gpu; // unknown3
*(_DWORD *)(gpu + 0x3240) = *(_DWORD *)v8; // NV_PFIFO_CACHE1_DMA_PUT
*(_DWORD *)(gpu + 0x3244) = *(_DWORD *)(v8 + 4);// NV_PFIFO_CACHE1_DMA_GET
*(_DWORD *)(gpu + 0x3248) = *(_DWORD *)(v8 + 8);// NV_PFIFO_CACHE1_REF
*(_DWORD *)(gpu + 0x322C) = *(_DWORD *)(v8 + 12);// NV_PFIFO_CACHE1_DMA_INSTANCE
*(_DWORD *)(gpu + 0x3228) = *(_DWORD *)(v8 + 16);// NV_PFIFO_CACHE1_DMA_STATE
*(_DWORD *)(gpu + 0x3224) = *(_DWORD *)(v8 + 20);// NV_PFIFO_CACHE1_DMA_FETCH
*(_DWORD *)(gpu + 0x3280) = *(_DWORD *)(v8 + 24);// NV_PFIFO_CACHE1_ENGINE
*(_DWORD *)(gpu + 0x3254) = *(_DWORD *)(v8 + 28);// NV_PFIFO_CACHE1_PULL1
*(_DWORD *)(gpu + 0x3268) = *(_DWORD *)(v8 + 32);// NV_PFIFO_CACHE1_ACQUIRE_2
*(_DWORD *)(gpu + 0x3264) = *(_DWORD *)(v8 + 36);// NV_PFIFO_CACHE1_ACQUIRE_1
*(_DWORD *)(gpu + 0x3260) = *(_DWORD *)(v8 + 40);// NV_PFIFO_CACHE1_ACQUIRE_0
*(_DWORD *)(gpu + 0x326C) = *(_DWORD *)(v8 + 44);// NV_PFIFO_CACHE1_SEMAPHORE
*(_DWORD *)(gpu + 0x324C) = *(_DWORD *)(v8 + 48);// NV_PFIFO_CACHE1_DMA_SUBROUTINE
if ( (1 << a2_switch) & *((_DWORD *)v2 + 65) && a2_switch != 1 )
*(_DWORD *)(gpu + 0x3220) = 1; // NV_PFIFO_CACHE1_DMA_PUSH_ACCESS_ENABLE
*(_DWORD *)(gpu + 0x204C) = 0x1FFFFFu; // NV_PFIFO_TIMESLICE_TIMER_EXPIRED
*(_DWORD *)(gpu + 0x3250) = v11; // NV_PFIFO_CACHE1_PULL0
*(_DWORD *)(gpu + 0x3200) = v10; // NV_PFIFO_CACHE1_PUSH0
*(_DWORD *)(gpu + 0x2500) = v9; // NV_PFIFO_CACHES
return gpu;
}
</pre>
9f8cf619303c865856e693f9060a40962ccf3661
User:Haxar
2
3770
5671
5556
2017-06-04T09:49:59Z
Haxar
2485
wikitext
text/x-wiki
=== GitHub ===
* [https://github.com/haxar/cxbx-shogun Cxbx w/ Wine support.]
=== R&D ===
* [[User:Haxar/fastcall|fastcall routines from rgrep]]
* [[User:Haxar/NV2A|NV2A register access from D3D8]]
377ad2089f09c95525b0708a5a93d1bf80befaba
Xbox Game Disc
0
3700
5673
5406
2017-06-04T12:27:50Z
JayFoxRox
2
/* Security Sectors (SS.bin) */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|-
|44 || u8[20] || SHA-1 hash || Hash until here (of the complete format)
|-
|64 || u8[256] || Signature || For hash in previous field
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, the 44 first bytes of this structure are SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1503 || Unknown1 || || Unknown, hash at offset 44 not confirmed for this Unknown1 struct
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
830ff93d7b71c685223049333a58a715c443d3f7
5679
5673
2017-06-04T14:11:25Z
JayFoxRox
2
/* Security Sectors (SS.bin) */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (320 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
345aa616cf5c82c627be0464cb3b219bc5ddbf18
5680
5679
2017-06-04T14:15:26Z
JayFoxRox
2
/* Security Sectors (SS.bin) */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
2048 Bytes
READ DVD STRUCTURE with format 0x04
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
f8bb6c640275c57eed109cbcbee698a916c0dae0
DVD Drive
0
3704
5681
5362
2017-06-05T09:50:29Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
There are four retail drives known to be used by Microsoft in the retail version of the console.
any xbox dvd drive can be used in any retail xbox. Development kits can use and read debug signed code from these drives.
Other drives that might work are firmware modded PC drives like Kreon drives.
List of Xbox DVD Drive manufacturers
* Thomson
* Philips
* Samsung
* Hitachi-LG (mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
86583aeccaef11e9bdedaf25f803f68399375a69
5682
5681
2017-06-05T10:08:26Z
JayFoxRox
2
/* MODE SENSE and MODE SELECT */
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
There are four retail drives known to be used by Microsoft in the retail version of the console.
any xbox dvd drive can be used in any retail xbox. Development kits can use and read debug signed code from these drives.
Other drives that might work are firmware modded PC drives like Kreon drives.
List of Xbox DVD Drive manufacturers
* Thomson
* Philips
* Samsung
* Hitachi-LG (mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition <br><br> This will be set to 0x01 by the kernel when the last challenge was verified. This is done by sending the same challenge again, the challenge id / value is not reset.
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated or authentication in progress <br><br> This will be set to 0x01 by the kernel when the first challenge is send.
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
453997436744482968d9c504f5cecfaca8dfb2fe
Project Gotham Racing 2
0
3792
5683
2017-06-06T13:22:49Z
JayFoxRox
2
File format list I still had on my hdd
wikitext
text/x-wiki
== File formats ==
Audio:
* wav [ffmpeg]
* wma [ffmpeg]
* dat / xwb
* ini
Video:
* xmv [ffmpeg]
Textures:
* ?
Animation:
* none?
Bones:
* none?
Shader:
* ?
f601155499c5919415bb5cc64c55fe8639217400
5685
5683
2017-06-06T13:25:22Z
JayFoxRox
2
/* File formats */
wikitext
text/x-wiki
== File formats ==
Audio:
* wav [ffmpeg]
* wma [ffmpeg]
* dat / xwb
* ini
Video:
* xmv [ffmpeg]
Textures:
* ?
Animation:
* none?
Bones:
* none?
Shader:
* ?
=== PAK ===
This is an old, untested and incomplete tool to look at the header of a PAK file.
<pre>#include <stdint.h>
#include <stdio.h>
#include <inttypes.h>
static FILE* f = NULL;
void chunk() {
char magic[4];
fread(magic, 1, 4, f);
uint32_t unk1;
fread(&unk1, 1, 4, f);
uint32_t unk2;
fread(&unk2, 1, 4, f);
uint32_t offset;
fread(&offset, 1, 4, f);
char* endMagic = "END\0";
char* indxMagic = "INDX";
char* wmshMagic = "WMSH";
char* textMagic = "TEXT"; // 32 byte payload?
char* vbMagic = "VB\0\0";
printf("magic: '%.4s'\n", magic);
printf("unk1: 0x%08" PRIX32 "\n", unk1);
printf("unk2: 0x%08" PRIX32 "\n", unk2);
printf("offset: %" PRIu32 " bytes\n", offset);
if (!feof(f)) {
chunk();
}
}
int main(int argc, char* argv[]) {
f = fopen(argv[1], "rb");
if (f == NULL) {
return 1;
}
// fseek(f, 16, SEEK_SET);
chunk();
fclose(f);
return 0;
}</pre>
d9ce81ad9fe3f4866d1480eb228ceb64d1651a99
5686
5685
2017-06-06T13:26:23Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
== File formats ==
Audio:
* wav [ffmpeg]
* wma [ffmpeg]
* dat / xwb
* ini
Video:
* xmv [ffmpeg]
Textures:
* ?
Animation:
* none?
Bones:
* none?
Shader:
* ?
=== PAK ===
This is an old, untested and incomplete tool to look at the header of a PAK file.
<pre>#include <stdint.h>
#include <stdio.h>
#include <inttypes.h>
static FILE* f = NULL;
void chunk() {
char magic[4];
fread(magic, 1, 4, f);
uint32_t unk1;
fread(&unk1, 1, 4, f);
uint32_t unk2;
fread(&unk2, 1, 4, f);
uint32_t offset;
fread(&offset, 1, 4, f);
char* endMagic = "END\0";
char* indxMagic = "INDX";
char* wmshMagic = "WMSH";
char* textMagic = "TEXT"; // 32 byte payload?
char* vbMagic = "VB\0\0";
printf("magic: '%.4s'\n", magic);
printf("unk1: 0x%08" PRIX32 "\n", unk1);
printf("unk2: 0x%08" PRIX32 "\n", unk2);
printf("offset: %" PRIu32 " bytes\n", offset);
if (!feof(f)) {
chunk();
}
}
int main(int argc, char* argv[]) {
f = fopen(argv[1], "rb");
if (f == NULL) {
return 1;
}
// fseek(f, 16, SEEK_SET);
chunk();
fclose(f);
return 0;
}</pre>
91a3126ebf7f22fedc7f2ab37575a53f5b9f5908
Blinx: The Time Sweeper
0
3793
5684
2017-06-06T13:24:01Z
JayFoxRox
2
File format list I still had on my hdd
wikitext
text/x-wiki
== File formats ==
Audio:
* aix / adx [ffmpeg],
Video:
* sfd [ffmpeg]
Textures:
* dds [imagemagick convert]
* tga [imagemagick convert]
Material:
* mit
* bin (XSSB)
Animation:
* ?
Bones:
* ?
Shader:
* ?
1cd425b2255fb1b65ff4d79afbba7ea790ba5560
Blinx: The Time Sweeper
0
3793
5687
5684
2017-06-06T13:26:43Z
JayFoxRox
2
wikitext
text/x-wiki
{{Game}}
== File formats ==
Audio:
* aix / adx [ffmpeg],
Video:
* sfd [ffmpeg]
Textures:
* dds [imagemagick convert]
* tga [imagemagick convert]
Material:
* mit
* bin (XSSB)
Animation:
* ?
Bones:
* ?
Shader:
* ?
646567e554d073df1a1eed96a2e166d95fa27d8d
The Guy Game
0
3794
5688
2017-06-06T13:29:35Z
JayFoxRox
2
Created page with "{{Game}} == Notes == * [https://github.com/JayFoxRox/top2ogg Tool to convert *.top video files to other formats]"
wikitext
text/x-wiki
{{Game}}
== Notes ==
* [https://github.com/JayFoxRox/top2ogg Tool to convert *.top video files to other formats]
046fc55c027cce90390ec502855eec4271c1fa35
Boot Process
0
3683
5689
5647
2017-06-06T14:15:36Z
JayFoxRox
2
wikitext
text/x-wiki
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL (MCPX 1.0 only) ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== TEA Decryption of the FBL (MCPX 1.1 only) ===
{{FIXME}}
== FBL (MCPX 1.1 only) ==
The Flash Boot Loader was added in MCPX 1.1, it connects the MCPX ROM and the 2BL.{{FIXME}}
It is not part of the MCPX ROM, but part of the flash.
== 2BL ==
{{FIXME|reason=Certain parts are still missing.}}
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
57d7b923f226b0af9f4cce812858e1a88931b944
Exploits
0
3751
5690
5460
2017-06-06T14:42:21Z
JayFoxRox
2
/* TEA attack */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20# hack ===
Uses a legacy x86 feature.
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd4FC which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400) this will become: <code>E9 83 01 00 80</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
543c16213c36b0b42598d08682caf7bd77630259
5691
5690
2017-06-06T14:45:59Z
JayFoxRox
2
/* MCPX */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd4FC which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400) this will become: <code>E9 83 01 00 80</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
508ba29dd0565781b95a3732330815e2344c8d3e
5692
5691
2017-06-06T14:47:06Z
JayFoxRox
2
/* A20# hack */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd4FC which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400) this will become: <code>E9 83 01 00 80</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
cab048496d60ec2190ab679d1099613c9cd51222
5718
5692
2017-06-18T19:04:13Z
JayFoxRox
2
I've looked at the rom images myself now, the original address in andys post most be correct [BUT the attack should not work?]. investigating
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd404) this will become: <code>E9 83 01 00 80</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd408 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
3ba1e4c03438d636aec32a3aaed99edea974edbf
5720
5718
2017-06-18T21:58:05Z
JayFoxRox
2
I'm stupid. Endianess
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
d96d1eaae937864d9ac1ba023d8514f9ce8dd4d7
5721
5720
2017-06-18T21:58:33Z
JayFoxRox
2
/* TEA attack (MCPX 1.1 only) */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
b846da0557abb735bed5209462422543a0ad87e9
Halo 2
0
3795
5693
2017-06-07T00:11:37Z
Haxar
2485
Created page with "{{Game}} == Map File Format (Iron_Forge whitepaper) == Halo 2 .map file format whitepaper originally by Iron_Forge. Created: 11/21/2004, 12:13:00, Iron_Forge. Filename: H2..."
wikitext
text/x-wiki
{{Game}}
== Map File Format (Iron_Forge whitepaper) ==
Halo 2 .map file format whitepaper originally by Iron_Forge.
Created: 11/21/2004, 12:13:00, Iron_Forge.
Filename: H2WhitePaper.doc
Retrieved from [http://old.halomods.com old.halomods.com].
=== 1 - General Information ===
==== 1.1 - Introduction ====
Greetings. My name is Iron_Forge, and I have been working on and off with Halo map files of one type or another for a little over a year now. I have remained active in all areas of map formatting of Halo 1 for the xbox as well as the pc. Odds are if you have used an application for Halo 1, I have had a hand in it, or the information that led to its conception.
I have been working on the Halo 2 map format since its release, and this document serves as a collection of the information I have compiled with the help of good friends MonoxideC and ViperNeo. Applying my experience from Halo 1 and other projects, I am one of a handful of people who could be considered experts on the map file formats. Using this document, I hope to pass this on to you.
Many things are not contained within this document, for the simple reason of I did not figure out how they work (the BSP is a good example.) That’s not to say these things are still unknown. ViperNeo had the BSP information completed the same time we were working on models together, due to the strong similarity between them.
==== 1.2 - Glossary ====
'''dword''' – 4 bytes of data (double word)
'''word''' – 2 bytes of data
'''primary magic''' – A value used to increase offsets, allowing large areas of data to be moved without modifying the offsets contained within it.
'''secondary magic''' – A value used to increase offsets, allowing large areas of data to be moved without modifying the offsets contained within it, primarily used for meta.
'''pure offset''' – A value which represents an offset in the file that has not been modified in any way
'''raw offset''' – A pure offset whose 2 most significant bits represent the file the offset references
'''primary magic offset''' – A pure offset whose value has been increased by the primary magic value
'''secondary magic offset''' – A pure offset whose value has been increased by the secondary magic value
=== 2 - Map Information ===
==== 2.1 - Map Layout ====
The Halo 2 map files can be broken up into the following sections: header, sound raw data, model raw data, bsp model raw data, model animation raw data, bsp structure, script references, file names, unicode strings raw data, other, texture raw data, object index, index padding, object meta information, and finally the cache where applicable.
==== 2.2 - Processing ====
When Halo 2 is loaded, it will create cache files (copying the original files to the hard drive of the xbox). The shared and single player shared map files are exceptions to this rule, most likely to lower the load times of the game starting, and each map being processed. If your installation has valid bink video files, these will be played during load times, otherwise a progress text will appear on the screen showing the percentage copied.
All loaded files are signed (see section on encryptomatic signature), and should a loading map fail, the engine will retry the copy twice more before giving a “dirty disk” error, or a “map failed to load” error, depending on the map.
Upon loading a map, only the required resources are placed in memory. As objects appear on screen, the data for them is streamed from the shared files, replacing the very low copy kept in memory with a much richer and more detailed counterparts. This process allows even multiplayer maps to have access to several hundred megabytes of information, while remaining within the limitations of the xbox hardware.
==== 2.3 - Map Header ====
The map header1 is 2048 bytes just as previous versions of Halo. The version tag is now 8. The index offset is a pure offset pointing to the index header, followed by the meta start, which when added to the index offset will point to the beginning of the meta area. Map origin will define the path (and file) the cache was created from, and as such is only defined in the cache files.
===== 2.3.1 - File Table =====
The file table contains full paths for each object in relative order (first filename is for the first object.) The strings are standard ASCII, with a null termination and no padding is used regardless of where the string terminates.
The file table index contains unsigned integers defining the offset which each string begins, also relative. This allows the file table to be read as a single block of characters, and each object to be issued a pointer to the beginning of its string.
===== 2.3.2 - Encryptomatic Signature =====
The encryptomatic signature is created by xoring every dword after the header together. It is my belief that this value has the single purpose of validating maps copied correctly, and was not used to “thwart” would be modders.
===== 2.3.3 - Script References =====
Script references link some object to a specific event. The string table defining these references is in the same format as the file table, including an index. They can often be found following dependencies such as effect dependencies. This would link that effect to be triggered by a given event, such as a button being pressed, or an item being picked up. The reference themselves consist of a pair of words, the first being the index to the string in the table, the second being the length of the script reference string.
==== 2.4 - Index Header ====
The first value in the index header remains the constant used to calculate magic. The object index offset here is a primary magic offset, and points to the object index.
===== 2.4.1 - Tag List =====
Directly following the index header is the tag list. This list contains all used tags in the map file, and defines their object hierarchy. This allows the engine to know for example, that all vehicles are a sub class of the unit class, which is a sub class of the object class. I believe the wildcard tags are used as a way of using the primary tag without its parents, though this is just speculation.
===== 2.4.2 - Object Index =====
The object index is a recursively-constructed collection defining all objects in the map. The objects identifier is defined here, which is used to reference the object from all other areas of the map file. The identifier is composed of two short values, each are incremented equally throughout the index. The meta offset is a secondary magic offset which points to the beginning of the objects meta.
===== 2.4.3 - Primary and Secondary Magic =====
The magic values are used to allow moving large blocks of data without having to modify the data itself. Using a magic value applied to all offsets, after moving the data x bytes, the magic only needs to be increased or decreased 8 to correct all offsets, rather than each offset needing re-calculation. Primary magic is still calculated by magic constant - (index header offset) + sizeof(index header)). Secondary magic, which is now used instead of primary magic for meta related offsets, is primary magic + sizeof(BSP). Since we cannot obtain the size of the BSP object without using secondary magic (it is located in the scenery tag), we use the known offset of the meta start and the secondary magic offset of the first object to calculate this value.
=== 3 - Objects ===
==== 3.1 - Raw Offsets ====
Raw offsets in Halo 2 have no magic applied to them. However, they can reference the current map file, or the three shared files. To do this, it reserves the two most significant (highest) bits to define the referencing file. These are defined as: 002 being local file, 012 being mainmenu.map, 102 being shared.map, and 112 being single_player_shared.map.
When referencing a raw offset, one should first determine the file being referenced, remove those two bits from the offset value (and with 0x3FFFFFFF), and then seek to that offset in the correct file to find the referenced data. Given the size of the shared files, it is possible that the third most significant bit is also reserved for sharing new downloadable content in the future, but this would just be speculation.
==== 3.2 - Unicode Strings ====
Unicode strings are built to allow for up to nine languages. The globals object defines where each language block is located, and its related information (size, string count, etc.) as needed. Each unicode string object then contains two shorts per language, the first defining the offset (as a string count) in the language block that the unicode object begins, and the second defining how many strings are in the object.
This method allows the multiplayer maps to be identical for every version and region of Halo 2. The engine can simply detect you xbox language settings, and supply the correct string(s) form the language block.
==== 3.3 - Bitmaps & Textures ====
Bitmap objects are collections of the textures in Halo 2, and their layout is rather straightforward. Each texture is allowed up to six levels of detail. Each level of detail is identical to its predecessors first mipmap. So if the first quality level were 256x256, the following would be 128x128. Each level of detail however still contains its own entire set of mipmaps. I suspect this goes further towards Halo 2’s efficient use of memory management.
Each bitmap object may also contain several images, usually used where options between similar sets of images are needed (such as multiple level images in the main menu.) These will be represented by the bitm struct reflexive. Each bitmap may be extracted as if it were its own object.
Referencing the source to HME/HMT, we can find the different image formats for the different image objects. In addition to these types, 0x11 and 0x12 are both single channel images (you may extract them as A8 if using the common DDS), and are used for bump maps, and light maps (respectively.)
Many images are still swizzled (a technique for faster memory copies), and this information may also be referenced from the HME/HMT sources.
==== 3.4 - Sounds ====
Sounds were probably the most enjoyable piece of Halo 2 to work on. They entwine with an “ugh!” object named “I’ve got a lovely bunch of coconuts”, a song done by the amazing comedic group Monty Python. I cannot help but believe this system was done as an easter egg designed just for me as “the curious modder”. To Bungie, I thank you (unless of course this was designed to keep us from removing sounds, in which case I sincerely apologize.)
In each sound meta, there is an index and chunk count that references a block in the fifth reflexive in the coconuts object. This block has another index and chunk count, referencing the sixth reflexive in the coconuts object. These chunks reference “option” sounds, such as several different sound choices for entering a vehicle.
Each item in the sixth block contains another index and chunk count, this time referencing the ninth reflexive in the coconuts object. The ninth reflexive contains the size and raw offset for each piece of the sound.
Sounds in Halo 2 are xbox adpcm or WMA, depending on the type byte. The WMA sounds can be assembled completely from the raw data pieces. The xbox adpcm pieces require the header be written.
If the type byte is 1, then the sound is an adpcm, mono, and 22050kbps sound file. Type 2 is also adpcm, stereo, and 44100kbps sound file. Type 3 is a WMA sound file. There is more to the sound formatting than this, however this was mare than enough for me to extract all the sounds.
==== 3.5 - Models ====
Models in Halo 2 use a compressed format based on a bounding box. This bounding box can be found in the first reflexive of the model meta. Using its constraints for each value relevant to the models, the uncompressed value can be found using the formula (((shortValue + 32768) / 65535) * (maxValue – minValue)) + minValue.
The model raw data block now contains a header, footer, and several resource chunks. The header contains information regarding how many chunks are in each resource block, allowing you to determine which block contains the information needed (for example, if a given block has 0 chunks, then it will not have a corresponding resource block). The important resource blocks are the mesh information block (containing mesh information), the indices block (containing the indices for the triangle strip), the vertices block (containing at minimum 3 shorts defining the x, y, and z of the vertices), the UV map (containing the compressed UV points.), and the bone map.
The third dword (as an unsigned integer) in each mesh information block defines how many indices are in that mesh. The indices are placed in order, so each meshes indices can be found after its predecessor in the indices resource block.
The vertices are stored with several sized blocks within their resource block, however the x, y, and z points are still represented by the first 3 shorts respectively. The size of each vertex block can be determined by the type bytes in the model meta. Each short must then be decompressed using the above-mentioned formula and their own constraint value, min x and max x for x, and so on.
If the given vertex type has more than 6 bytes, it is followed by the bone references and weights of this vertex. Both are one byte in length, and the bone references are sorted. Therefore if a bone with a value of 0 is read in any position other than the first, this bone reference should be discarded, as should all that follow. Following the bone references are their weights, which are also one byte in length, and can be considered compressed. The weights are a value between 0 an 1 once uncompressed, thus a byte with a weight of 128 will have a weight of 0.5 (or 50% deformation based on this bone.) The exception to this is the 8 byte vertices, where the two bytes following are both bones. If both are set, they each have a weight of 0.5, and if only one is set it is given full weight.
The UV’s are slightly more complicated. They are compressed in the same fashion as the vertices. However, while UV’s must always remain between 0 and 1, their constraints are not governed by the same limits. The resulting uncompressed values can be fixed through “looping” them. If the value is 1.3, the resulting value would be 0.3, and given the value -0.3, the resulting value would be 0.7. The easiest way to accomplish this is to mod the resulting value by 1, and then if the value is negative, subtract it from 1.
Since the bones have to act over several different pieces, each raw model block has a bone map, relating the bone byte to the correct bone id. This is a byte array, so if a vertex references bone 0, then boneMap[0] will provide the correct bone id.
Back to the meta, the sixth reflexive in the model meta defines the bone hierarchy of the model. When parent, child, or sibling is none, the value will be set to 0xFFFF. These chunks are the bones which are mapped to from the raw data. The name is a script reference, and defines what the bone is called.
The second reflexive defines all the level of details (LOD) for the model pieces. The name is again a script reference defining what this particular LOD is called. This is followed by a reflexive. This reflexive is for all the different options for the particular LOD (for example: base, default, damaged, etc.) Each of these reflexives consist of another script reference name, defining what this option is referred to as, followed by a series of 5 shorts. These shorts refer to the piece of the model which makes up one of the 5 LODs for this option. The last short (following the 5 LODs), defines the piece of the model which has the highest LOD (this should be equal to the 5th LOD value.) If a model only has 3 LODs, the first three LOD values will be the same, defining one piece to be used for all three levels.
The seventh reflexive in the model meta defines a series of locations defining everything from where lights and other effects are located on a model, to where the characters place their hands while using the model. These are set by a script reference to link the point to, and the points location data.
==== 3.6 - Other Tags ====
For the most part, objects are quite similar to their Halo 1 counterparts. Usually there has been some general compacting of the data (the tags have been cleaned up, unused values removed), or a reflexive added here and there. Notable exceptions that I haven’t written about here (as lack of time and motivation kept me away) are the model animations, which now have large blocks of raw data.
=== 4 - In Closing ===
==== 4.1 - Conclusion ====
In closing, I would like to say that not all the information enclosed here is guaranteed to be accurate. It is composed of my findings, and how I interpreted them at the time. Much of the structs are incomplete, as I tend to not write down things I figure out while seeking other answers, and I tried to only include solid information, instead of all my random notes.
The information contained within these pages should be enough to get any one started, and take them to the point of being able to obtain any of the above items, and replace them with their own creations.
I would like to thank all of you who read this far (and bothered reading this), and to you all, happy modding.
==== 4.2 - Acknowledgements ====
I would also once again like to thank MonoxideC and ViperNeo for their help in this. While they may remain modest, both were invaluable in explaining things I didn’t fully understand, bouncing ideas off, and just helping out anyway they could. The community is better for having them, and I better for knowing them.
=== 5 - Appendix I - Structures ===
<pre>
struct mapHeader {
char[4] head;
int version;
int filesize;
int zero;
int indexOffset;
int metaStart;
dword[2] unknown;
char[32] mapOrigin;
byte[224]unknown;
char[32] build;
byte[20] unknown;
int unknown;
int offsetToStrangeFileStrings;
int unknown;
int offsetToSomething;
int scriptReferenceCount;
int sizeOfScriptReference;
int offsetToScriptReferenceIndex;
int offsetToScriptReferenceStrings;
byte[36] unknown;
char[32] mapName;
int zero;
char[32] scenarioPath;
byte[224] zero;
int unknown;
int fileCount;
int fileTableOffset;
int fileTableSize;
int filesIndex;
int signature;
byte[1320] zero;
char[4] foot;
}
struct indexHeader {
int primaryMagicConstantMagic;
int tagListCount;
int objectIndexOffset;
int scenarioID;
int tagIDStart;
int unknown;
int objectCount;
char[4] tags;
}
struct tagListEntry {
char[4] objectClass;
char[4] parentClass;
char[4] grandparentClass;
}
struct objectEntry {
char[4] tag;
int ID;
int offset;
int metaSize;
}
struct unicMeta {
uint[4] zero;
short lang1Offset;
short lang1Count;
short lang2Offset;
short lang2Count;
short lang3Offset;
short lang3Count;
short lang4Offset;
short lang4Count;
short lang5Offset;
short lang5Count;
short lang6Offset;
short lang6Count;
short lang7Offset;
short lang7Count;
short lang8Offset;
short lang8Count;
short lang9Offset;
short lang9Count;
}
struct bitmMeta {
byte[68] data;
struct image {
char[4] bitm;
ushort width;
ushort height;
ushort depth;
ushort type;
ushort format;
ushort flags;
ushort regPointX;
ushort regPointY;
ushort mipMapCount;
ushort pixelOffset;
uint zero;
uint[6] offset;
uint[6] size;
uint identifier;
byte[36] unknown;
}
}
struct sndMeta {
dword unknown;
byte format;
byte[3] unknown;
short index;
byte chunkCount;
byte unknown;
dword[2] unknown;
}
struct ughMeta {
struct {}
struct {}
struct {
scriptRef sound;
}
struct {}
struct soundOptions {
dword[2] unknown;
short index;
short chunkCount;
}
struct soundPieces {
dword[3] unknown;
short index;
short chunkCount;
}
struct {}
struct {}
struct rawSound {
uint rawOffset;
uint size;
uint eff;
}
struct {}
struct {}
}
struct modeMeta {
scriptRef modelName;
dword val2;
dword val3;
dword zero;
dword zero;
struct boundingBox
{
float minX;
float maxX;
float minY;
float maxY;
float minZ;
float maxZ;
float minU;
float maxU;
float minV;
float maxV;
dword:4 zero;
}
struct LODs
{
scriptRef modelPiece;
word sval1; // FFFF
word sval2; // 0000
struct ref2.1
{
scriptRef modelType;
word LODPiece1;
word LODPiece2;
word LODPiece3;
word LODPiece4;
word LODPiece5;
word LODPieceHigh;
}
}
struct pieces
{
dword unknown;
ushort vertCount;
ushort unknown;
byte[12] val1;
ushort type;
ushort unkown;
dword val;
dword[2] zero;
dword[3] val;
dword[2] zero;
uint rawOffset;
uint size;
uint headerSize;
dword val4;
struct rsrc
{
word val;
word val;
word val;
word val;
uint size;
uint offset;
}
dword identifier;
dword val5;
dword eff;
}
struct ref4
{
dword zero;
}
struct ref5
{
dword val1;
dword:2 zero;
}
dword[3] zero;
struct bones
{
scriptRef boneName
ushort parent;
ushort firstChild;
ushort nextSibling;
word val1;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float distanceFromParent;
}
dword[2] zero;
struct points
{
scriptRef pointName;
struct points
{
short; // 0xFFFF
short;
float[7] val;
dword zero;
}
}
struct shaders
{
dependancy shad;
dependancy shad;
dword:4 zero;
}
dword[7] zero;
}
struct modelHeader {
char[4] blkh;
uint size;
uint informationChunks;
uint zero;
uint unkChunks;
uint zero;
uint unk2Chunks;
uint[3] zero;
uint indicesChunks;
uint[5] zero;
uint unk3Chunks;
uint[10] zero;
uint boneChunks;
uint[2] zero;
}
</pre>
dc0970f28bfc9402d957359e2700a419b7a2cdaa
5694
5693
2017-06-07T00:17:51Z
Haxar
2485
wikitext
text/x-wiki
{{Game}}
== Map File Format (Iron_Forge whitepaper) ==
Retrieved from [http://old.halomods.com old.halomods.com].
Halo 2 .map file format whitepaper originally by Iron_Forge.
Filename: H2WhitePaper.doc
Created: 11/21/2004, 12:13:00, Iron_Forge.
Revision: 0.9b
=== 1 - General Information ===
==== 1.1 - Introduction ====
Greetings. My name is Iron_Forge, and I have been working on and off with Halo map files of one type or another for a little over a year now. I have remained active in all areas of map formatting of Halo 1 for the xbox as well as the pc. Odds are if you have used an application for Halo 1, I have had a hand in it, or the information that led to its conception.
I have been working on the Halo 2 map format since its release, and this document serves as a collection of the information I have compiled with the help of good friends MonoxideC and ViperNeo. Applying my experience from Halo 1 and other projects, I am one of a handful of people who could be considered experts on the map file formats. Using this document, I hope to pass this on to you.
Many things are not contained within this document, for the simple reason of I did not figure out how they work (the BSP is a good example.) That’s not to say these things are still unknown. ViperNeo had the BSP information completed the same time we were working on models together, due to the strong similarity between them.
==== 1.2 - Glossary ====
'''dword''' – 4 bytes of data (double word)
'''word''' – 2 bytes of data
'''primary magic''' – A value used to increase offsets, allowing large areas of data to be moved without modifying the offsets contained within it.
'''secondary magic''' – A value used to increase offsets, allowing large areas of data to be moved without modifying the offsets contained within it, primarily used for meta.
'''pure offset''' – A value which represents an offset in the file that has not been modified in any way
'''raw offset''' – A pure offset whose 2 most significant bits represent the file the offset references
'''primary magic offset''' – A pure offset whose value has been increased by the primary magic value
'''secondary magic offset''' – A pure offset whose value has been increased by the secondary magic value
=== 2 - Map Information ===
==== 2.1 - Map Layout ====
The Halo 2 map files can be broken up into the following sections: header, sound raw data, model raw data, bsp model raw data, model animation raw data, bsp structure, script references, file names, unicode strings raw data, other, texture raw data, object index, index padding, object meta information, and finally the cache where applicable.
==== 2.2 - Processing ====
When Halo 2 is loaded, it will create cache files (copying the original files to the hard drive of the xbox). The shared and single player shared map files are exceptions to this rule, most likely to lower the load times of the game starting, and each map being processed. If your installation has valid bink video files, these will be played during load times, otherwise a progress text will appear on the screen showing the percentage copied.
All loaded files are signed (see section on encryptomatic signature), and should a loading map fail, the engine will retry the copy twice more before giving a “dirty disk” error, or a “map failed to load” error, depending on the map.
Upon loading a map, only the required resources are placed in memory. As objects appear on screen, the data for them is streamed from the shared files, replacing the very low copy kept in memory with a much richer and more detailed counterparts. This process allows even multiplayer maps to have access to several hundred megabytes of information, while remaining within the limitations of the xbox hardware.
==== 2.3 - Map Header ====
The map header1 is 2048 bytes just as previous versions of Halo. The version tag is now 8. The index offset is a pure offset pointing to the index header, followed by the meta start, which when added to the index offset will point to the beginning of the meta area. Map origin will define the path (and file) the cache was created from, and as such is only defined in the cache files.
===== 2.3.1 - File Table =====
The file table contains full paths for each object in relative order (first filename is for the first object.) The strings are standard ASCII, with a null termination and no padding is used regardless of where the string terminates.
The file table index contains unsigned integers defining the offset which each string begins, also relative. This allows the file table to be read as a single block of characters, and each object to be issued a pointer to the beginning of its string.
===== 2.3.2 - Encryptomatic Signature =====
The encryptomatic signature is created by xoring every dword after the header together. It is my belief that this value has the single purpose of validating maps copied correctly, and was not used to “thwart” would be modders.
===== 2.3.3 - Script References =====
Script references link some object to a specific event. The string table defining these references is in the same format as the file table, including an index. They can often be found following dependencies such as effect dependencies. This would link that effect to be triggered by a given event, such as a button being pressed, or an item being picked up. The reference themselves consist of a pair of words, the first being the index to the string in the table, the second being the length of the script reference string.
==== 2.4 - Index Header ====
The first value in the index header remains the constant used to calculate magic. The object index offset here is a primary magic offset, and points to the object index.
===== 2.4.1 - Tag List =====
Directly following the index header is the tag list. This list contains all used tags in the map file, and defines their object hierarchy. This allows the engine to know for example, that all vehicles are a sub class of the unit class, which is a sub class of the object class. I believe the wildcard tags are used as a way of using the primary tag without its parents, though this is just speculation.
===== 2.4.2 - Object Index =====
The object index is a recursively-constructed collection defining all objects in the map. The objects identifier is defined here, which is used to reference the object from all other areas of the map file. The identifier is composed of two short values, each are incremented equally throughout the index. The meta offset is a secondary magic offset which points to the beginning of the objects meta.
===== 2.4.3 - Primary and Secondary Magic =====
The magic values are used to allow moving large blocks of data without having to modify the data itself. Using a magic value applied to all offsets, after moving the data x bytes, the magic only needs to be increased or decreased 8 to correct all offsets, rather than each offset needing re-calculation. Primary magic is still calculated by magic constant - (index header offset) + sizeof(index header)). Secondary magic, which is now used instead of primary magic for meta related offsets, is primary magic + sizeof(BSP). Since we cannot obtain the size of the BSP object without using secondary magic (it is located in the scenery tag), we use the known offset of the meta start and the secondary magic offset of the first object to calculate this value.
=== 3 - Objects ===
==== 3.1 - Raw Offsets ====
Raw offsets in Halo 2 have no magic applied to them. However, they can reference the current map file, or the three shared files. To do this, it reserves the two most significant (highest) bits to define the referencing file. These are defined as: 002 being local file, 012 being mainmenu.map, 102 being shared.map, and 112 being single_player_shared.map.
When referencing a raw offset, one should first determine the file being referenced, remove those two bits from the offset value (and with 0x3FFFFFFF), and then seek to that offset in the correct file to find the referenced data. Given the size of the shared files, it is possible that the third most significant bit is also reserved for sharing new downloadable content in the future, but this would just be speculation.
==== 3.2 - Unicode Strings ====
Unicode strings are built to allow for up to nine languages. The globals object defines where each language block is located, and its related information (size, string count, etc.) as needed. Each unicode string object then contains two shorts per language, the first defining the offset (as a string count) in the language block that the unicode object begins, and the second defining how many strings are in the object.
This method allows the multiplayer maps to be identical for every version and region of Halo 2. The engine can simply detect you xbox language settings, and supply the correct string(s) form the language block.
==== 3.3 - Bitmaps & Textures ====
Bitmap objects are collections of the textures in Halo 2, and their layout is rather straightforward. Each texture is allowed up to six levels of detail. Each level of detail is identical to its predecessors first mipmap. So if the first quality level were 256x256, the following would be 128x128. Each level of detail however still contains its own entire set of mipmaps. I suspect this goes further towards Halo 2’s efficient use of memory management.
Each bitmap object may also contain several images, usually used where options between similar sets of images are needed (such as multiple level images in the main menu.) These will be represented by the bitm struct reflexive. Each bitmap may be extracted as if it were its own object.
Referencing the source to HME/HMT, we can find the different image formats for the different image objects. In addition to these types, 0x11 and 0x12 are both single channel images (you may extract them as A8 if using the common DDS), and are used for bump maps, and light maps (respectively.)
Many images are still swizzled (a technique for faster memory copies), and this information may also be referenced from the HME/HMT sources.
==== 3.4 - Sounds ====
Sounds were probably the most enjoyable piece of Halo 2 to work on. They entwine with an “ugh!” object named “I’ve got a lovely bunch of coconuts”, a song done by the amazing comedic group Monty Python. I cannot help but believe this system was done as an easter egg designed just for me as “the curious modder”. To Bungie, I thank you (unless of course this was designed to keep us from removing sounds, in which case I sincerely apologize.)
In each sound meta, there is an index and chunk count that references a block in the fifth reflexive in the coconuts object. This block has another index and chunk count, referencing the sixth reflexive in the coconuts object. These chunks reference “option” sounds, such as several different sound choices for entering a vehicle.
Each item in the sixth block contains another index and chunk count, this time referencing the ninth reflexive in the coconuts object. The ninth reflexive contains the size and raw offset for each piece of the sound.
Sounds in Halo 2 are xbox adpcm or WMA, depending on the type byte. The WMA sounds can be assembled completely from the raw data pieces. The xbox adpcm pieces require the header be written.
If the type byte is 1, then the sound is an adpcm, mono, and 22050kbps sound file. Type 2 is also adpcm, stereo, and 44100kbps sound file. Type 3 is a WMA sound file. There is more to the sound formatting than this, however this was mare than enough for me to extract all the sounds.
==== 3.5 - Models ====
Models in Halo 2 use a compressed format based on a bounding box. This bounding box can be found in the first reflexive of the model meta. Using its constraints for each value relevant to the models, the uncompressed value can be found using the formula (((shortValue + 32768) / 65535) * (maxValue – minValue)) + minValue.
The model raw data block now contains a header, footer, and several resource chunks. The header contains information regarding how many chunks are in each resource block, allowing you to determine which block contains the information needed (for example, if a given block has 0 chunks, then it will not have a corresponding resource block). The important resource blocks are the mesh information block (containing mesh information), the indices block (containing the indices for the triangle strip), the vertices block (containing at minimum 3 shorts defining the x, y, and z of the vertices), the UV map (containing the compressed UV points.), and the bone map.
The third dword (as an unsigned integer) in each mesh information block defines how many indices are in that mesh. The indices are placed in order, so each meshes indices can be found after its predecessor in the indices resource block.
The vertices are stored with several sized blocks within their resource block, however the x, y, and z points are still represented by the first 3 shorts respectively. The size of each vertex block can be determined by the type bytes in the model meta. Each short must then be decompressed using the above-mentioned formula and their own constraint value, min x and max x for x, and so on.
If the given vertex type has more than 6 bytes, it is followed by the bone references and weights of this vertex. Both are one byte in length, and the bone references are sorted. Therefore if a bone with a value of 0 is read in any position other than the first, this bone reference should be discarded, as should all that follow. Following the bone references are their weights, which are also one byte in length, and can be considered compressed. The weights are a value between 0 an 1 once uncompressed, thus a byte with a weight of 128 will have a weight of 0.5 (or 50% deformation based on this bone.) The exception to this is the 8 byte vertices, where the two bytes following are both bones. If both are set, they each have a weight of 0.5, and if only one is set it is given full weight.
The UV’s are slightly more complicated. They are compressed in the same fashion as the vertices. However, while UV’s must always remain between 0 and 1, their constraints are not governed by the same limits. The resulting uncompressed values can be fixed through “looping” them. If the value is 1.3, the resulting value would be 0.3, and given the value -0.3, the resulting value would be 0.7. The easiest way to accomplish this is to mod the resulting value by 1, and then if the value is negative, subtract it from 1.
Since the bones have to act over several different pieces, each raw model block has a bone map, relating the bone byte to the correct bone id. This is a byte array, so if a vertex references bone 0, then boneMap[0] will provide the correct bone id.
Back to the meta, the sixth reflexive in the model meta defines the bone hierarchy of the model. When parent, child, or sibling is none, the value will be set to 0xFFFF. These chunks are the bones which are mapped to from the raw data. The name is a script reference, and defines what the bone is called.
The second reflexive defines all the level of details (LOD) for the model pieces. The name is again a script reference defining what this particular LOD is called. This is followed by a reflexive. This reflexive is for all the different options for the particular LOD (for example: base, default, damaged, etc.) Each of these reflexives consist of another script reference name, defining what this option is referred to as, followed by a series of 5 shorts. These shorts refer to the piece of the model which makes up one of the 5 LODs for this option. The last short (following the 5 LODs), defines the piece of the model which has the highest LOD (this should be equal to the 5th LOD value.) If a model only has 3 LODs, the first three LOD values will be the same, defining one piece to be used for all three levels.
The seventh reflexive in the model meta defines a series of locations defining everything from where lights and other effects are located on a model, to where the characters place their hands while using the model. These are set by a script reference to link the point to, and the points location data.
==== 3.6 - Other Tags ====
For the most part, objects are quite similar to their Halo 1 counterparts. Usually there has been some general compacting of the data (the tags have been cleaned up, unused values removed), or a reflexive added here and there. Notable exceptions that I haven’t written about here (as lack of time and motivation kept me away) are the model animations, which now have large blocks of raw data.
=== 4 - In Closing ===
==== 4.1 - Conclusion ====
In closing, I would like to say that not all the information enclosed here is guaranteed to be accurate. It is composed of my findings, and how I interpreted them at the time. Much of the structs are incomplete, as I tend to not write down things I figure out while seeking other answers, and I tried to only include solid information, instead of all my random notes.
The information contained within these pages should be enough to get any one started, and take them to the point of being able to obtain any of the above items, and replace them with their own creations.
I would like to thank all of you who read this far (and bothered reading this), and to you all, happy modding.
==== 4.2 - Acknowledgements ====
I would also once again like to thank MonoxideC and ViperNeo for their help in this. While they may remain modest, both were invaluable in explaining things I didn’t fully understand, bouncing ideas off, and just helping out anyway they could. The community is better for having them, and I better for knowing them.
=== 5 - Appendix I - Structures ===
<pre>
struct mapHeader {
char[4] head;
int version;
int filesize;
int zero;
int indexOffset;
int metaStart;
dword[2] unknown;
char[32] mapOrigin;
byte[224]unknown;
char[32] build;
byte[20] unknown;
int unknown;
int offsetToStrangeFileStrings;
int unknown;
int offsetToSomething;
int scriptReferenceCount;
int sizeOfScriptReference;
int offsetToScriptReferenceIndex;
int offsetToScriptReferenceStrings;
byte[36] unknown;
char[32] mapName;
int zero;
char[32] scenarioPath;
byte[224] zero;
int unknown;
int fileCount;
int fileTableOffset;
int fileTableSize;
int filesIndex;
int signature;
byte[1320] zero;
char[4] foot;
}
struct indexHeader {
int primaryMagicConstantMagic;
int tagListCount;
int objectIndexOffset;
int scenarioID;
int tagIDStart;
int unknown;
int objectCount;
char[4] tags;
}
struct tagListEntry {
char[4] objectClass;
char[4] parentClass;
char[4] grandparentClass;
}
struct objectEntry {
char[4] tag;
int ID;
int offset;
int metaSize;
}
struct unicMeta {
uint[4] zero;
short lang1Offset;
short lang1Count;
short lang2Offset;
short lang2Count;
short lang3Offset;
short lang3Count;
short lang4Offset;
short lang4Count;
short lang5Offset;
short lang5Count;
short lang6Offset;
short lang6Count;
short lang7Offset;
short lang7Count;
short lang8Offset;
short lang8Count;
short lang9Offset;
short lang9Count;
}
struct bitmMeta {
byte[68] data;
struct image {
char[4] bitm;
ushort width;
ushort height;
ushort depth;
ushort type;
ushort format;
ushort flags;
ushort regPointX;
ushort regPointY;
ushort mipMapCount;
ushort pixelOffset;
uint zero;
uint[6] offset;
uint[6] size;
uint identifier;
byte[36] unknown;
}
}
struct sndMeta {
dword unknown;
byte format;
byte[3] unknown;
short index;
byte chunkCount;
byte unknown;
dword[2] unknown;
}
struct ughMeta {
struct {}
struct {}
struct {
scriptRef sound;
}
struct {}
struct soundOptions {
dword[2] unknown;
short index;
short chunkCount;
}
struct soundPieces {
dword[3] unknown;
short index;
short chunkCount;
}
struct {}
struct {}
struct rawSound {
uint rawOffset;
uint size;
uint eff;
}
struct {}
struct {}
}
struct modeMeta {
scriptRef modelName;
dword val2;
dword val3;
dword zero;
dword zero;
struct boundingBox
{
float minX;
float maxX;
float minY;
float maxY;
float minZ;
float maxZ;
float minU;
float maxU;
float minV;
float maxV;
dword:4 zero;
}
struct LODs
{
scriptRef modelPiece;
word sval1; // FFFF
word sval2; // 0000
struct ref2.1
{
scriptRef modelType;
word LODPiece1;
word LODPiece2;
word LODPiece3;
word LODPiece4;
word LODPiece5;
word LODPieceHigh;
}
}
struct pieces
{
dword unknown;
ushort vertCount;
ushort unknown;
byte[12] val1;
ushort type;
ushort unkown;
dword val;
dword[2] zero;
dword[3] val;
dword[2] zero;
uint rawOffset;
uint size;
uint headerSize;
dword val4;
struct rsrc
{
word val;
word val;
word val;
word val;
uint size;
uint offset;
}
dword identifier;
dword val5;
dword eff;
}
struct ref4
{
dword zero;
}
struct ref5
{
dword val1;
dword:2 zero;
}
dword[3] zero;
struct bones
{
scriptRef boneName
ushort parent;
ushort firstChild;
ushort nextSibling;
word val1;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float distanceFromParent;
}
dword[2] zero;
struct points
{
scriptRef pointName;
struct points
{
short; // 0xFFFF
short;
float[7] val;
dword zero;
}
}
struct shaders
{
dependancy shad;
dependancy shad;
dword:4 zero;
}
dword[7] zero;
}
struct modelHeader {
char[4] blkh;
uint size;
uint informationChunks;
uint zero;
uint unkChunks;
uint zero;
uint unk2Chunks;
uint[3] zero;
uint indicesChunks;
uint[5] zero;
uint unk3Chunks;
uint[10] zero;
uint boneChunks;
uint[2] zero;
}
</pre>
0f5c981fae19e4c938b53b5805de926495f34db7
5695
5694
2017-06-07T09:25:54Z
JayFoxRox
2
/* 2.1 - Map Layout */ Added a bit more structure
wikitext
text/x-wiki
{{Game}}
== Map File Format (Iron_Forge whitepaper) ==
Retrieved from [http://old.halomods.com old.halomods.com].
Halo 2 .map file format whitepaper originally by Iron_Forge.
Filename: H2WhitePaper.doc
Created: 11/21/2004, 12:13:00, Iron_Forge.
Revision: 0.9b
=== 1 - General Information ===
==== 1.1 - Introduction ====
Greetings. My name is Iron_Forge, and I have been working on and off with Halo map files of one type or another for a little over a year now. I have remained active in all areas of map formatting of Halo 1 for the xbox as well as the pc. Odds are if you have used an application for Halo 1, I have had a hand in it, or the information that led to its conception.
I have been working on the Halo 2 map format since its release, and this document serves as a collection of the information I have compiled with the help of good friends MonoxideC and ViperNeo. Applying my experience from Halo 1 and other projects, I am one of a handful of people who could be considered experts on the map file formats. Using this document, I hope to pass this on to you.
Many things are not contained within this document, for the simple reason of I did not figure out how they work (the BSP is a good example.) That’s not to say these things are still unknown. ViperNeo had the BSP information completed the same time we were working on models together, due to the strong similarity between them.
==== 1.2 - Glossary ====
'''dword''' – 4 bytes of data (double word)
'''word''' – 2 bytes of data
'''primary magic''' – A value used to increase offsets, allowing large areas of data to be moved without modifying the offsets contained within it.
'''secondary magic''' – A value used to increase offsets, allowing large areas of data to be moved without modifying the offsets contained within it, primarily used for meta.
'''pure offset''' – A value which represents an offset in the file that has not been modified in any way
'''raw offset''' – A pure offset whose 2 most significant bits represent the file the offset references
'''primary magic offset''' – A pure offset whose value has been increased by the primary magic value
'''secondary magic offset''' – A pure offset whose value has been increased by the secondary magic value
=== 2 - Map Information ===
==== 2.1 - Map Layout ====
The Halo 2 map files can be broken up into the following sections:
* header
* sound raw data
* model raw data
* bsp model raw data
* model animation raw data
* bsp structure
* script references
* file names
* unicode strings raw data
* other
* texture raw data
* object index
* index padding
* object meta information
* the cache (where applicable)
==== 2.2 - Processing ====
When Halo 2 is loaded, it will create cache files (copying the original files to the hard drive of the xbox). The shared and single player shared map files are exceptions to this rule, most likely to lower the load times of the game starting, and each map being processed. If your installation has valid bink video files, these will be played during load times, otherwise a progress text will appear on the screen showing the percentage copied.
All loaded files are signed (see section on encryptomatic signature), and should a loading map fail, the engine will retry the copy twice more before giving a “dirty disk” error, or a “map failed to load” error, depending on the map.
Upon loading a map, only the required resources are placed in memory. As objects appear on screen, the data for them is streamed from the shared files, replacing the very low copy kept in memory with a much richer and more detailed counterparts. This process allows even multiplayer maps to have access to several hundred megabytes of information, while remaining within the limitations of the xbox hardware.
==== 2.3 - Map Header ====
The map header1 is 2048 bytes just as previous versions of Halo. The version tag is now 8. The index offset is a pure offset pointing to the index header, followed by the meta start, which when added to the index offset will point to the beginning of the meta area. Map origin will define the path (and file) the cache was created from, and as such is only defined in the cache files.
===== 2.3.1 - File Table =====
The file table contains full paths for each object in relative order (first filename is for the first object.) The strings are standard ASCII, with a null termination and no padding is used regardless of where the string terminates.
The file table index contains unsigned integers defining the offset which each string begins, also relative. This allows the file table to be read as a single block of characters, and each object to be issued a pointer to the beginning of its string.
===== 2.3.2 - Encryptomatic Signature =====
The encryptomatic signature is created by xoring every dword after the header together. It is my belief that this value has the single purpose of validating maps copied correctly, and was not used to “thwart” would be modders.
===== 2.3.3 - Script References =====
Script references link some object to a specific event. The string table defining these references is in the same format as the file table, including an index. They can often be found following dependencies such as effect dependencies. This would link that effect to be triggered by a given event, such as a button being pressed, or an item being picked up. The reference themselves consist of a pair of words, the first being the index to the string in the table, the second being the length of the script reference string.
==== 2.4 - Index Header ====
The first value in the index header remains the constant used to calculate magic. The object index offset here is a primary magic offset, and points to the object index.
===== 2.4.1 - Tag List =====
Directly following the index header is the tag list. This list contains all used tags in the map file, and defines their object hierarchy. This allows the engine to know for example, that all vehicles are a sub class of the unit class, which is a sub class of the object class. I believe the wildcard tags are used as a way of using the primary tag without its parents, though this is just speculation.
===== 2.4.2 - Object Index =====
The object index is a recursively-constructed collection defining all objects in the map. The objects identifier is defined here, which is used to reference the object from all other areas of the map file. The identifier is composed of two short values, each are incremented equally throughout the index. The meta offset is a secondary magic offset which points to the beginning of the objects meta.
===== 2.4.3 - Primary and Secondary Magic =====
The magic values are used to allow moving large blocks of data without having to modify the data itself. Using a magic value applied to all offsets, after moving the data x bytes, the magic only needs to be increased or decreased 8 to correct all offsets, rather than each offset needing re-calculation. Primary magic is still calculated by magic constant - (index header offset) + sizeof(index header)). Secondary magic, which is now used instead of primary magic for meta related offsets, is primary magic + sizeof(BSP). Since we cannot obtain the size of the BSP object without using secondary magic (it is located in the scenery tag), we use the known offset of the meta start and the secondary magic offset of the first object to calculate this value.
=== 3 - Objects ===
==== 3.1 - Raw Offsets ====
Raw offsets in Halo 2 have no magic applied to them. However, they can reference the current map file, or the three shared files. To do this, it reserves the two most significant (highest) bits to define the referencing file. These are defined as: 002 being local file, 012 being mainmenu.map, 102 being shared.map, and 112 being single_player_shared.map.
When referencing a raw offset, one should first determine the file being referenced, remove those two bits from the offset value (and with 0x3FFFFFFF), and then seek to that offset in the correct file to find the referenced data. Given the size of the shared files, it is possible that the third most significant bit is also reserved for sharing new downloadable content in the future, but this would just be speculation.
==== 3.2 - Unicode Strings ====
Unicode strings are built to allow for up to nine languages. The globals object defines where each language block is located, and its related information (size, string count, etc.) as needed. Each unicode string object then contains two shorts per language, the first defining the offset (as a string count) in the language block that the unicode object begins, and the second defining how many strings are in the object.
This method allows the multiplayer maps to be identical for every version and region of Halo 2. The engine can simply detect you xbox language settings, and supply the correct string(s) form the language block.
==== 3.3 - Bitmaps & Textures ====
Bitmap objects are collections of the textures in Halo 2, and their layout is rather straightforward. Each texture is allowed up to six levels of detail. Each level of detail is identical to its predecessors first mipmap. So if the first quality level were 256x256, the following would be 128x128. Each level of detail however still contains its own entire set of mipmaps. I suspect this goes further towards Halo 2’s efficient use of memory management.
Each bitmap object may also contain several images, usually used where options between similar sets of images are needed (such as multiple level images in the main menu.) These will be represented by the bitm struct reflexive. Each bitmap may be extracted as if it were its own object.
Referencing the source to HME/HMT, we can find the different image formats for the different image objects. In addition to these types, 0x11 and 0x12 are both single channel images (you may extract them as A8 if using the common DDS), and are used for bump maps, and light maps (respectively.)
Many images are still swizzled (a technique for faster memory copies), and this information may also be referenced from the HME/HMT sources.
==== 3.4 - Sounds ====
Sounds were probably the most enjoyable piece of Halo 2 to work on. They entwine with an “ugh!” object named “I’ve got a lovely bunch of coconuts”, a song done by the amazing comedic group Monty Python. I cannot help but believe this system was done as an easter egg designed just for me as “the curious modder”. To Bungie, I thank you (unless of course this was designed to keep us from removing sounds, in which case I sincerely apologize.)
In each sound meta, there is an index and chunk count that references a block in the fifth reflexive in the coconuts object. This block has another index and chunk count, referencing the sixth reflexive in the coconuts object. These chunks reference “option” sounds, such as several different sound choices for entering a vehicle.
Each item in the sixth block contains another index and chunk count, this time referencing the ninth reflexive in the coconuts object. The ninth reflexive contains the size and raw offset for each piece of the sound.
Sounds in Halo 2 are xbox adpcm or WMA, depending on the type byte. The WMA sounds can be assembled completely from the raw data pieces. The xbox adpcm pieces require the header be written.
If the type byte is 1, then the sound is an adpcm, mono, and 22050kbps sound file. Type 2 is also adpcm, stereo, and 44100kbps sound file. Type 3 is a WMA sound file. There is more to the sound formatting than this, however this was mare than enough for me to extract all the sounds.
==== 3.5 - Models ====
Models in Halo 2 use a compressed format based on a bounding box. This bounding box can be found in the first reflexive of the model meta. Using its constraints for each value relevant to the models, the uncompressed value can be found using the formula (((shortValue + 32768) / 65535) * (maxValue – minValue)) + minValue.
The model raw data block now contains a header, footer, and several resource chunks. The header contains information regarding how many chunks are in each resource block, allowing you to determine which block contains the information needed (for example, if a given block has 0 chunks, then it will not have a corresponding resource block). The important resource blocks are the mesh information block (containing mesh information), the indices block (containing the indices for the triangle strip), the vertices block (containing at minimum 3 shorts defining the x, y, and z of the vertices), the UV map (containing the compressed UV points.), and the bone map.
The third dword (as an unsigned integer) in each mesh information block defines how many indices are in that mesh. The indices are placed in order, so each meshes indices can be found after its predecessor in the indices resource block.
The vertices are stored with several sized blocks within their resource block, however the x, y, and z points are still represented by the first 3 shorts respectively. The size of each vertex block can be determined by the type bytes in the model meta. Each short must then be decompressed using the above-mentioned formula and their own constraint value, min x and max x for x, and so on.
If the given vertex type has more than 6 bytes, it is followed by the bone references and weights of this vertex. Both are one byte in length, and the bone references are sorted. Therefore if a bone with a value of 0 is read in any position other than the first, this bone reference should be discarded, as should all that follow. Following the bone references are their weights, which are also one byte in length, and can be considered compressed. The weights are a value between 0 an 1 once uncompressed, thus a byte with a weight of 128 will have a weight of 0.5 (or 50% deformation based on this bone.) The exception to this is the 8 byte vertices, where the two bytes following are both bones. If both are set, they each have a weight of 0.5, and if only one is set it is given full weight.
The UV’s are slightly more complicated. They are compressed in the same fashion as the vertices. However, while UV’s must always remain between 0 and 1, their constraints are not governed by the same limits. The resulting uncompressed values can be fixed through “looping” them. If the value is 1.3, the resulting value would be 0.3, and given the value -0.3, the resulting value would be 0.7. The easiest way to accomplish this is to mod the resulting value by 1, and then if the value is negative, subtract it from 1.
Since the bones have to act over several different pieces, each raw model block has a bone map, relating the bone byte to the correct bone id. This is a byte array, so if a vertex references bone 0, then boneMap[0] will provide the correct bone id.
Back to the meta, the sixth reflexive in the model meta defines the bone hierarchy of the model. When parent, child, or sibling is none, the value will be set to 0xFFFF. These chunks are the bones which are mapped to from the raw data. The name is a script reference, and defines what the bone is called.
The second reflexive defines all the level of details (LOD) for the model pieces. The name is again a script reference defining what this particular LOD is called. This is followed by a reflexive. This reflexive is for all the different options for the particular LOD (for example: base, default, damaged, etc.) Each of these reflexives consist of another script reference name, defining what this option is referred to as, followed by a series of 5 shorts. These shorts refer to the piece of the model which makes up one of the 5 LODs for this option. The last short (following the 5 LODs), defines the piece of the model which has the highest LOD (this should be equal to the 5th LOD value.) If a model only has 3 LODs, the first three LOD values will be the same, defining one piece to be used for all three levels.
The seventh reflexive in the model meta defines a series of locations defining everything from where lights and other effects are located on a model, to where the characters place their hands while using the model. These are set by a script reference to link the point to, and the points location data.
==== 3.6 - Other Tags ====
For the most part, objects are quite similar to their Halo 1 counterparts. Usually there has been some general compacting of the data (the tags have been cleaned up, unused values removed), or a reflexive added here and there. Notable exceptions that I haven’t written about here (as lack of time and motivation kept me away) are the model animations, which now have large blocks of raw data.
=== 4 - In Closing ===
==== 4.1 - Conclusion ====
In closing, I would like to say that not all the information enclosed here is guaranteed to be accurate. It is composed of my findings, and how I interpreted them at the time. Much of the structs are incomplete, as I tend to not write down things I figure out while seeking other answers, and I tried to only include solid information, instead of all my random notes.
The information contained within these pages should be enough to get any one started, and take them to the point of being able to obtain any of the above items, and replace them with their own creations.
I would like to thank all of you who read this far (and bothered reading this), and to you all, happy modding.
==== 4.2 - Acknowledgements ====
I would also once again like to thank MonoxideC and ViperNeo for their help in this. While they may remain modest, both were invaluable in explaining things I didn’t fully understand, bouncing ideas off, and just helping out anyway they could. The community is better for having them, and I better for knowing them.
=== 5 - Appendix I - Structures ===
<pre>
struct mapHeader {
char[4] head;
int version;
int filesize;
int zero;
int indexOffset;
int metaStart;
dword[2] unknown;
char[32] mapOrigin;
byte[224]unknown;
char[32] build;
byte[20] unknown;
int unknown;
int offsetToStrangeFileStrings;
int unknown;
int offsetToSomething;
int scriptReferenceCount;
int sizeOfScriptReference;
int offsetToScriptReferenceIndex;
int offsetToScriptReferenceStrings;
byte[36] unknown;
char[32] mapName;
int zero;
char[32] scenarioPath;
byte[224] zero;
int unknown;
int fileCount;
int fileTableOffset;
int fileTableSize;
int filesIndex;
int signature;
byte[1320] zero;
char[4] foot;
}
struct indexHeader {
int primaryMagicConstantMagic;
int tagListCount;
int objectIndexOffset;
int scenarioID;
int tagIDStart;
int unknown;
int objectCount;
char[4] tags;
}
struct tagListEntry {
char[4] objectClass;
char[4] parentClass;
char[4] grandparentClass;
}
struct objectEntry {
char[4] tag;
int ID;
int offset;
int metaSize;
}
struct unicMeta {
uint[4] zero;
short lang1Offset;
short lang1Count;
short lang2Offset;
short lang2Count;
short lang3Offset;
short lang3Count;
short lang4Offset;
short lang4Count;
short lang5Offset;
short lang5Count;
short lang6Offset;
short lang6Count;
short lang7Offset;
short lang7Count;
short lang8Offset;
short lang8Count;
short lang9Offset;
short lang9Count;
}
struct bitmMeta {
byte[68] data;
struct image {
char[4] bitm;
ushort width;
ushort height;
ushort depth;
ushort type;
ushort format;
ushort flags;
ushort regPointX;
ushort regPointY;
ushort mipMapCount;
ushort pixelOffset;
uint zero;
uint[6] offset;
uint[6] size;
uint identifier;
byte[36] unknown;
}
}
struct sndMeta {
dword unknown;
byte format;
byte[3] unknown;
short index;
byte chunkCount;
byte unknown;
dword[2] unknown;
}
struct ughMeta {
struct {}
struct {}
struct {
scriptRef sound;
}
struct {}
struct soundOptions {
dword[2] unknown;
short index;
short chunkCount;
}
struct soundPieces {
dword[3] unknown;
short index;
short chunkCount;
}
struct {}
struct {}
struct rawSound {
uint rawOffset;
uint size;
uint eff;
}
struct {}
struct {}
}
struct modeMeta {
scriptRef modelName;
dword val2;
dword val3;
dword zero;
dword zero;
struct boundingBox
{
float minX;
float maxX;
float minY;
float maxY;
float minZ;
float maxZ;
float minU;
float maxU;
float minV;
float maxV;
dword:4 zero;
}
struct LODs
{
scriptRef modelPiece;
word sval1; // FFFF
word sval2; // 0000
struct ref2.1
{
scriptRef modelType;
word LODPiece1;
word LODPiece2;
word LODPiece3;
word LODPiece4;
word LODPiece5;
word LODPieceHigh;
}
}
struct pieces
{
dword unknown;
ushort vertCount;
ushort unknown;
byte[12] val1;
ushort type;
ushort unkown;
dword val;
dword[2] zero;
dword[3] val;
dword[2] zero;
uint rawOffset;
uint size;
uint headerSize;
dword val4;
struct rsrc
{
word val;
word val;
word val;
word val;
uint size;
uint offset;
}
dword identifier;
dword val5;
dword eff;
}
struct ref4
{
dword zero;
}
struct ref5
{
dword val1;
dword:2 zero;
}
dword[3] zero;
struct bones
{
scriptRef boneName
ushort parent;
ushort firstChild;
ushort nextSibling;
word val1;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float distanceFromParent;
}
dword[2] zero;
struct points
{
scriptRef pointName;
struct points
{
short; // 0xFFFF
short;
float[7] val;
dword zero;
}
}
struct shaders
{
dependancy shad;
dependancy shad;
dword:4 zero;
}
dword[7] zero;
}
struct modelHeader {
char[4] blkh;
uint size;
uint informationChunks;
uint zero;
uint unkChunks;
uint zero;
uint unk2Chunks;
uint[3] zero;
uint indicesChunks;
uint[5] zero;
uint unk3Chunks;
uint[10] zero;
uint boneChunks;
uint[2] zero;
}
</pre>
2dacd3d9287b6f411c7adfd0588cc1ea4a959797
5696
5695
2017-06-07T09:26:32Z
JayFoxRox
2
/* 1.2 - Glossary */
wikitext
text/x-wiki
{{Game}}
== Map File Format (Iron_Forge whitepaper) ==
Retrieved from [http://old.halomods.com old.halomods.com].
Halo 2 .map file format whitepaper originally by Iron_Forge.
Filename: H2WhitePaper.doc
Created: 11/21/2004, 12:13:00, Iron_Forge.
Revision: 0.9b
=== 1 - General Information ===
==== 1.1 - Introduction ====
Greetings. My name is Iron_Forge, and I have been working on and off with Halo map files of one type or another for a little over a year now. I have remained active in all areas of map formatting of Halo 1 for the xbox as well as the pc. Odds are if you have used an application for Halo 1, I have had a hand in it, or the information that led to its conception.
I have been working on the Halo 2 map format since its release, and this document serves as a collection of the information I have compiled with the help of good friends MonoxideC and ViperNeo. Applying my experience from Halo 1 and other projects, I am one of a handful of people who could be considered experts on the map file formats. Using this document, I hope to pass this on to you.
Many things are not contained within this document, for the simple reason of I did not figure out how they work (the BSP is a good example.) That’s not to say these things are still unknown. ViperNeo had the BSP information completed the same time we were working on models together, due to the strong similarity between them.
==== 1.2 - Glossary ====
* '''dword''' – 4 bytes of data (double word)
* '''word''' – 2 bytes of data
* '''primary magic''' – A value used to increase offsets, allowing large areas of data to be moved without modifying the offsets contained within it.
* '''secondary magic''' – A value used to increase offsets, allowing large areas of data to be moved without modifying the offsets contained within it, primarily used for meta.
* '''pure offset''' – A value which represents an offset in the file that has not been modified in any way
* '''raw offset''' – A pure offset whose 2 most significant bits represent the file the offset references
* '''primary magic offset''' – A pure offset whose value has been increased by the primary magic value
* '''secondary magic offset''' – A pure offset whose value has been increased by the secondary magic value
=== 2 - Map Information ===
==== 2.1 - Map Layout ====
The Halo 2 map files can be broken up into the following sections:
* header
* sound raw data
* model raw data
* bsp model raw data
* model animation raw data
* bsp structure
* script references
* file names
* unicode strings raw data
* other
* texture raw data
* object index
* index padding
* object meta information
* the cache (where applicable)
==== 2.2 - Processing ====
When Halo 2 is loaded, it will create cache files (copying the original files to the hard drive of the xbox). The shared and single player shared map files are exceptions to this rule, most likely to lower the load times of the game starting, and each map being processed. If your installation has valid bink video files, these will be played during load times, otherwise a progress text will appear on the screen showing the percentage copied.
All loaded files are signed (see section on encryptomatic signature), and should a loading map fail, the engine will retry the copy twice more before giving a “dirty disk” error, or a “map failed to load” error, depending on the map.
Upon loading a map, only the required resources are placed in memory. As objects appear on screen, the data for them is streamed from the shared files, replacing the very low copy kept in memory with a much richer and more detailed counterparts. This process allows even multiplayer maps to have access to several hundred megabytes of information, while remaining within the limitations of the xbox hardware.
==== 2.3 - Map Header ====
The map header1 is 2048 bytes just as previous versions of Halo. The version tag is now 8. The index offset is a pure offset pointing to the index header, followed by the meta start, which when added to the index offset will point to the beginning of the meta area. Map origin will define the path (and file) the cache was created from, and as such is only defined in the cache files.
===== 2.3.1 - File Table =====
The file table contains full paths for each object in relative order (first filename is for the first object.) The strings are standard ASCII, with a null termination and no padding is used regardless of where the string terminates.
The file table index contains unsigned integers defining the offset which each string begins, also relative. This allows the file table to be read as a single block of characters, and each object to be issued a pointer to the beginning of its string.
===== 2.3.2 - Encryptomatic Signature =====
The encryptomatic signature is created by xoring every dword after the header together. It is my belief that this value has the single purpose of validating maps copied correctly, and was not used to “thwart” would be modders.
===== 2.3.3 - Script References =====
Script references link some object to a specific event. The string table defining these references is in the same format as the file table, including an index. They can often be found following dependencies such as effect dependencies. This would link that effect to be triggered by a given event, such as a button being pressed, or an item being picked up. The reference themselves consist of a pair of words, the first being the index to the string in the table, the second being the length of the script reference string.
==== 2.4 - Index Header ====
The first value in the index header remains the constant used to calculate magic. The object index offset here is a primary magic offset, and points to the object index.
===== 2.4.1 - Tag List =====
Directly following the index header is the tag list. This list contains all used tags in the map file, and defines their object hierarchy. This allows the engine to know for example, that all vehicles are a sub class of the unit class, which is a sub class of the object class. I believe the wildcard tags are used as a way of using the primary tag without its parents, though this is just speculation.
===== 2.4.2 - Object Index =====
The object index is a recursively-constructed collection defining all objects in the map. The objects identifier is defined here, which is used to reference the object from all other areas of the map file. The identifier is composed of two short values, each are incremented equally throughout the index. The meta offset is a secondary magic offset which points to the beginning of the objects meta.
===== 2.4.3 - Primary and Secondary Magic =====
The magic values are used to allow moving large blocks of data without having to modify the data itself. Using a magic value applied to all offsets, after moving the data x bytes, the magic only needs to be increased or decreased 8 to correct all offsets, rather than each offset needing re-calculation. Primary magic is still calculated by magic constant - (index header offset) + sizeof(index header)). Secondary magic, which is now used instead of primary magic for meta related offsets, is primary magic + sizeof(BSP). Since we cannot obtain the size of the BSP object without using secondary magic (it is located in the scenery tag), we use the known offset of the meta start and the secondary magic offset of the first object to calculate this value.
=== 3 - Objects ===
==== 3.1 - Raw Offsets ====
Raw offsets in Halo 2 have no magic applied to them. However, they can reference the current map file, or the three shared files. To do this, it reserves the two most significant (highest) bits to define the referencing file. These are defined as: 002 being local file, 012 being mainmenu.map, 102 being shared.map, and 112 being single_player_shared.map.
When referencing a raw offset, one should first determine the file being referenced, remove those two bits from the offset value (and with 0x3FFFFFFF), and then seek to that offset in the correct file to find the referenced data. Given the size of the shared files, it is possible that the third most significant bit is also reserved for sharing new downloadable content in the future, but this would just be speculation.
==== 3.2 - Unicode Strings ====
Unicode strings are built to allow for up to nine languages. The globals object defines where each language block is located, and its related information (size, string count, etc.) as needed. Each unicode string object then contains two shorts per language, the first defining the offset (as a string count) in the language block that the unicode object begins, and the second defining how many strings are in the object.
This method allows the multiplayer maps to be identical for every version and region of Halo 2. The engine can simply detect you xbox language settings, and supply the correct string(s) form the language block.
==== 3.3 - Bitmaps & Textures ====
Bitmap objects are collections of the textures in Halo 2, and their layout is rather straightforward. Each texture is allowed up to six levels of detail. Each level of detail is identical to its predecessors first mipmap. So if the first quality level were 256x256, the following would be 128x128. Each level of detail however still contains its own entire set of mipmaps. I suspect this goes further towards Halo 2’s efficient use of memory management.
Each bitmap object may also contain several images, usually used where options between similar sets of images are needed (such as multiple level images in the main menu.) These will be represented by the bitm struct reflexive. Each bitmap may be extracted as if it were its own object.
Referencing the source to HME/HMT, we can find the different image formats for the different image objects. In addition to these types, 0x11 and 0x12 are both single channel images (you may extract them as A8 if using the common DDS), and are used for bump maps, and light maps (respectively.)
Many images are still swizzled (a technique for faster memory copies), and this information may also be referenced from the HME/HMT sources.
==== 3.4 - Sounds ====
Sounds were probably the most enjoyable piece of Halo 2 to work on. They entwine with an “ugh!” object named “I’ve got a lovely bunch of coconuts”, a song done by the amazing comedic group Monty Python. I cannot help but believe this system was done as an easter egg designed just for me as “the curious modder”. To Bungie, I thank you (unless of course this was designed to keep us from removing sounds, in which case I sincerely apologize.)
In each sound meta, there is an index and chunk count that references a block in the fifth reflexive in the coconuts object. This block has another index and chunk count, referencing the sixth reflexive in the coconuts object. These chunks reference “option” sounds, such as several different sound choices for entering a vehicle.
Each item in the sixth block contains another index and chunk count, this time referencing the ninth reflexive in the coconuts object. The ninth reflexive contains the size and raw offset for each piece of the sound.
Sounds in Halo 2 are xbox adpcm or WMA, depending on the type byte. The WMA sounds can be assembled completely from the raw data pieces. The xbox adpcm pieces require the header be written.
If the type byte is 1, then the sound is an adpcm, mono, and 22050kbps sound file. Type 2 is also adpcm, stereo, and 44100kbps sound file. Type 3 is a WMA sound file. There is more to the sound formatting than this, however this was mare than enough for me to extract all the sounds.
==== 3.5 - Models ====
Models in Halo 2 use a compressed format based on a bounding box. This bounding box can be found in the first reflexive of the model meta. Using its constraints for each value relevant to the models, the uncompressed value can be found using the formula (((shortValue + 32768) / 65535) * (maxValue – minValue)) + minValue.
The model raw data block now contains a header, footer, and several resource chunks. The header contains information regarding how many chunks are in each resource block, allowing you to determine which block contains the information needed (for example, if a given block has 0 chunks, then it will not have a corresponding resource block). The important resource blocks are the mesh information block (containing mesh information), the indices block (containing the indices for the triangle strip), the vertices block (containing at minimum 3 shorts defining the x, y, and z of the vertices), the UV map (containing the compressed UV points.), and the bone map.
The third dword (as an unsigned integer) in each mesh information block defines how many indices are in that mesh. The indices are placed in order, so each meshes indices can be found after its predecessor in the indices resource block.
The vertices are stored with several sized blocks within their resource block, however the x, y, and z points are still represented by the first 3 shorts respectively. The size of each vertex block can be determined by the type bytes in the model meta. Each short must then be decompressed using the above-mentioned formula and their own constraint value, min x and max x for x, and so on.
If the given vertex type has more than 6 bytes, it is followed by the bone references and weights of this vertex. Both are one byte in length, and the bone references are sorted. Therefore if a bone with a value of 0 is read in any position other than the first, this bone reference should be discarded, as should all that follow. Following the bone references are their weights, which are also one byte in length, and can be considered compressed. The weights are a value between 0 an 1 once uncompressed, thus a byte with a weight of 128 will have a weight of 0.5 (or 50% deformation based on this bone.) The exception to this is the 8 byte vertices, where the two bytes following are both bones. If both are set, they each have a weight of 0.5, and if only one is set it is given full weight.
The UV’s are slightly more complicated. They are compressed in the same fashion as the vertices. However, while UV’s must always remain between 0 and 1, their constraints are not governed by the same limits. The resulting uncompressed values can be fixed through “looping” them. If the value is 1.3, the resulting value would be 0.3, and given the value -0.3, the resulting value would be 0.7. The easiest way to accomplish this is to mod the resulting value by 1, and then if the value is negative, subtract it from 1.
Since the bones have to act over several different pieces, each raw model block has a bone map, relating the bone byte to the correct bone id. This is a byte array, so if a vertex references bone 0, then boneMap[0] will provide the correct bone id.
Back to the meta, the sixth reflexive in the model meta defines the bone hierarchy of the model. When parent, child, or sibling is none, the value will be set to 0xFFFF. These chunks are the bones which are mapped to from the raw data. The name is a script reference, and defines what the bone is called.
The second reflexive defines all the level of details (LOD) for the model pieces. The name is again a script reference defining what this particular LOD is called. This is followed by a reflexive. This reflexive is for all the different options for the particular LOD (for example: base, default, damaged, etc.) Each of these reflexives consist of another script reference name, defining what this option is referred to as, followed by a series of 5 shorts. These shorts refer to the piece of the model which makes up one of the 5 LODs for this option. The last short (following the 5 LODs), defines the piece of the model which has the highest LOD (this should be equal to the 5th LOD value.) If a model only has 3 LODs, the first three LOD values will be the same, defining one piece to be used for all three levels.
The seventh reflexive in the model meta defines a series of locations defining everything from where lights and other effects are located on a model, to where the characters place their hands while using the model. These are set by a script reference to link the point to, and the points location data.
==== 3.6 - Other Tags ====
For the most part, objects are quite similar to their Halo 1 counterparts. Usually there has been some general compacting of the data (the tags have been cleaned up, unused values removed), or a reflexive added here and there. Notable exceptions that I haven’t written about here (as lack of time and motivation kept me away) are the model animations, which now have large blocks of raw data.
=== 4 - In Closing ===
==== 4.1 - Conclusion ====
In closing, I would like to say that not all the information enclosed here is guaranteed to be accurate. It is composed of my findings, and how I interpreted them at the time. Much of the structs are incomplete, as I tend to not write down things I figure out while seeking other answers, and I tried to only include solid information, instead of all my random notes.
The information contained within these pages should be enough to get any one started, and take them to the point of being able to obtain any of the above items, and replace them with their own creations.
I would like to thank all of you who read this far (and bothered reading this), and to you all, happy modding.
==== 4.2 - Acknowledgements ====
I would also once again like to thank MonoxideC and ViperNeo for their help in this. While they may remain modest, both were invaluable in explaining things I didn’t fully understand, bouncing ideas off, and just helping out anyway they could. The community is better for having them, and I better for knowing them.
=== 5 - Appendix I - Structures ===
<pre>
struct mapHeader {
char[4] head;
int version;
int filesize;
int zero;
int indexOffset;
int metaStart;
dword[2] unknown;
char[32] mapOrigin;
byte[224]unknown;
char[32] build;
byte[20] unknown;
int unknown;
int offsetToStrangeFileStrings;
int unknown;
int offsetToSomething;
int scriptReferenceCount;
int sizeOfScriptReference;
int offsetToScriptReferenceIndex;
int offsetToScriptReferenceStrings;
byte[36] unknown;
char[32] mapName;
int zero;
char[32] scenarioPath;
byte[224] zero;
int unknown;
int fileCount;
int fileTableOffset;
int fileTableSize;
int filesIndex;
int signature;
byte[1320] zero;
char[4] foot;
}
struct indexHeader {
int primaryMagicConstantMagic;
int tagListCount;
int objectIndexOffset;
int scenarioID;
int tagIDStart;
int unknown;
int objectCount;
char[4] tags;
}
struct tagListEntry {
char[4] objectClass;
char[4] parentClass;
char[4] grandparentClass;
}
struct objectEntry {
char[4] tag;
int ID;
int offset;
int metaSize;
}
struct unicMeta {
uint[4] zero;
short lang1Offset;
short lang1Count;
short lang2Offset;
short lang2Count;
short lang3Offset;
short lang3Count;
short lang4Offset;
short lang4Count;
short lang5Offset;
short lang5Count;
short lang6Offset;
short lang6Count;
short lang7Offset;
short lang7Count;
short lang8Offset;
short lang8Count;
short lang9Offset;
short lang9Count;
}
struct bitmMeta {
byte[68] data;
struct image {
char[4] bitm;
ushort width;
ushort height;
ushort depth;
ushort type;
ushort format;
ushort flags;
ushort regPointX;
ushort regPointY;
ushort mipMapCount;
ushort pixelOffset;
uint zero;
uint[6] offset;
uint[6] size;
uint identifier;
byte[36] unknown;
}
}
struct sndMeta {
dword unknown;
byte format;
byte[3] unknown;
short index;
byte chunkCount;
byte unknown;
dword[2] unknown;
}
struct ughMeta {
struct {}
struct {}
struct {
scriptRef sound;
}
struct {}
struct soundOptions {
dword[2] unknown;
short index;
short chunkCount;
}
struct soundPieces {
dword[3] unknown;
short index;
short chunkCount;
}
struct {}
struct {}
struct rawSound {
uint rawOffset;
uint size;
uint eff;
}
struct {}
struct {}
}
struct modeMeta {
scriptRef modelName;
dword val2;
dword val3;
dword zero;
dword zero;
struct boundingBox
{
float minX;
float maxX;
float minY;
float maxY;
float minZ;
float maxZ;
float minU;
float maxU;
float minV;
float maxV;
dword:4 zero;
}
struct LODs
{
scriptRef modelPiece;
word sval1; // FFFF
word sval2; // 0000
struct ref2.1
{
scriptRef modelType;
word LODPiece1;
word LODPiece2;
word LODPiece3;
word LODPiece4;
word LODPiece5;
word LODPieceHigh;
}
}
struct pieces
{
dword unknown;
ushort vertCount;
ushort unknown;
byte[12] val1;
ushort type;
ushort unkown;
dword val;
dword[2] zero;
dword[3] val;
dword[2] zero;
uint rawOffset;
uint size;
uint headerSize;
dword val4;
struct rsrc
{
word val;
word val;
word val;
word val;
uint size;
uint offset;
}
dword identifier;
dword val5;
dword eff;
}
struct ref4
{
dword zero;
}
struct ref5
{
dword val1;
dword:2 zero;
}
dword[3] zero;
struct bones
{
scriptRef boneName
ushort parent;
ushort firstChild;
ushort nextSibling;
word val1;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float;
float distanceFromParent;
}
dword[2] zero;
struct points
{
scriptRef pointName;
struct points
{
short; // 0xFFFF
short;
float[7] val;
dword zero;
}
}
struct shaders
{
dependancy shad;
dependancy shad;
dword:4 zero;
}
dword[7] zero;
}
struct modelHeader {
char[4] blkh;
uint size;
uint informationChunks;
uint zero;
uint unkChunks;
uint zero;
uint unk2Chunks;
uint[3] zero;
uint indicesChunks;
uint[5] zero;
uint unk3Chunks;
uint[10] zero;
uint boneChunks;
uint[2] zero;
}
</pre>
60612a05edca684bdc165edb7ec42f62b4824b9b
Xbox Input Devices
0
11
5697
5164
2017-06-07T10:07:32Z
JayFoxRox
2
/* Steering wheels */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Internal HUB ====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
Note that the cable going to the pedals is *not* a USB port despite using the Xbox controller breakout plug.
A another Xbox controller connected to the cable coming out of the steering wheel (intended for the pedals) will not be recognized.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Steering wheel and Pedals ====
Always connected to port 1 of the internal HUB
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
9107be882d45d2fddc08c7dcac373423f51aac27
5698
5697
2017-06-07T10:34:32Z
JayFoxRox
2
/* Internal HUB */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel and Pedals ====
Always connected to port 1 of the internal HUB
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
fb46d811e9f6af92a1194acaaa54928c7cbe1976
5699
5698
2017-06-07T10:35:09Z
JayFoxRox
2
/* Steering wheel and Pedals */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel and Pedals ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
ed67b9811938a21019b284a2bd7b186c19482f73
5700
5699
2017-06-07T10:35:23Z
JayFoxRox
2
/* Steering wheel and Pedals */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
5144debe60ad5dfbfffb886754f3964a8a584097
5701
5700
2017-06-07T10:37:58Z
JayFoxRox
2
/* Light guns */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS Topgun II ===
''This is a non-licensed / unofficial Xbox accessory.''
==== USB Descriptors ====
{{FIXME}}
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
d451bcba32cf819e28b568d5e17b8da8f669b21a
5710
5701
2017-06-13T19:38:02Z
JayFoxRox
2
/* EMS Topgun II */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS Topgun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || Directional Pad ||
|-
| Trigger || A || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || B
|-
| A || X
|-
| B || Y
|-
| START || Start ||
|-
| SE/BA || Back ||
|-
| Aim Left / Right || Negative / Positive on left thumbstick X axis || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || Positive / Negative on left thumbstick Y axis
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps A pressed while trigger is held
* Turbo mode 1 toggles A rapidly while trigger is held
* Turbo mode 2 toggles A rapidly and once in a while B while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
653d02a117996b91a11e28af58961ed99d341902
5711
5710
2017-06-13T19:38:18Z
JayFoxRox
2
/* EMS Topgun II */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || Directional Pad ||
|-
| Trigger || A || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || B
|-
| A || X
|-
| B || Y
|-
| START || Start ||
|-
| SE/BA || Back ||
|-
| Aim Left / Right || Negative / Positive on left thumbstick X axis || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || Positive / Negative on left thumbstick Y axis
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps A pressed while trigger is held
* Turbo mode 1 toggles A rapidly while trigger is held
* Turbo mode 2 toggles A rapidly and once in a while B while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
bafb0a5f562cd969c518cefc297d177a985eeaa7
5712
5711
2017-06-13T19:54:23Z
JayFoxRox
2
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B0169BOTDC Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || Directional Pad ||
|-
| Trigger || A || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || B
|-
| A || X
|-
| B || Y
|-
| START || Start ||
|-
| SE/BA || Back ||
|-
| Aim Left / Right || Negative / Positive on left thumbstick X axis || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || Positive / Negative on left thumbstick Y axis
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps A pressed while trigger is held
* Turbo mode 1 toggles A rapidly while trigger is held
* Turbo mode 2 toggles A rapidly and once in a while B while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
918c69ff3989f3a82a08ad07721e274ef9837216
Xbox Memory Unit
0
3790
5702
5652
2017-06-09T15:31:25Z
Codeasm
2480
Added unlicensed memory cards
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
<pre>
VID:0x045e PID:0x0280 Microsoft Corp. Xbox Memory Unit (8MB)
</pre>
== thirdparty USB sticks ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || Green logo "Trustmaster"
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
|}
f87a4d3f9f223a3cd42446901f4a2225dc62831b
5703
5702
2017-06-09T15:33:31Z
Codeasm
2480
/* thirdparty USB sticks */
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
<pre>
VID:0x045e PID:0x0280 Microsoft Corp. Xbox Memory Unit (8MB)
</pre>
== thirdparty USB sticks ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || Green logo Xbox and white "Trustmaster"
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
|}
f2bb7bc8881c084eafa61906ddac7ea89eeaeb0a
5704
5703
2017-06-09T15:48:42Z
Codeasm
2480
/* thirdparty USB sticks */ Trustmaster is licenced
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
<pre>
VID:0x045e PID:0x0280 Microsoft Corp. Xbox Memory Unit (8MB)
</pre>
== thirdparty USB sticks ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
|}
a908e11a3ce7bdf5d39ca029efbdaff574ce555f
5705
5704
2017-06-09T15:49:41Z
Codeasm
2480
Trustmaster one is licenced
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || Green logo Xbox and white "Trustmaster
|}
== thirdparty USB sticks ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
|}
e2c3d220138d5b3da0a27daf95d4d30b86aac52c
5706
5705
2017-06-09T20:31:52Z
JayFoxRox
2
/* thirdparty USB sticks */
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || Green logo Xbox and white "Trustmaster
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
|}
80340108bf0b2bf619d385f3c3d5e0c24bc63b96
5728
5706
2017-06-19T13:10:03Z
Codeasm
2480
Added image references
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || Green logo Xbox and white "Trustmaster
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Notes
|-
|}
== References ==
* [http://imgur.com/a/8QmDA Thrustmaster XBOX Memory Unit images by DarkGabz]
* [http://imgur.com/gallery/M0PZ6 3 XBOX memory units images by CodeAsm]
e522a4511192d4069eb3dfa0cec7c1c16c5b5dbf
GPU
0
3796
5707
2017-06-10T21:39:34Z
Haxar
2485
Redirected page to [[NV2A]]
wikitext
text/x-wiki
#REDIRECT [[NV2A]]
c73cc7c29deafe205bc229258fdb2ac3cbc2f25b
Memory
0
3674
5708
5635
2017-06-10T22:00:36Z
Haxar
2485
Hardware Registers
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. On Debug Xboxs and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFE000000
|-
|APU Registers
|colspan="2"|0xFE800000 - 0xFE880000
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC01000
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED01000
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED09000
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF00400
|-
|[[Flash]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
12f534bf685af7449ba0ca30a5a970fff6d5f534
5709
5708
2017-06-10T22:09:36Z
Haxar
2485
Table centered.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. On Debug Xboxs and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFE000000
|-
|APU Registers
|colspan="2"|0xFE800000 - 0xFE880000
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC01000
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED01000
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED09000
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF00400
|-
|[[Flash]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
e982be14183eeb8a343bbb108b96a00980c40b42
Emulators
0
3703
5713
5489
2017-06-15T10:21:54Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|HLE
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|Unknown
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|
|daeken
|Unknown
|
|
|-
|Unknown
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|Dead
|Unknown
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|{{No}}
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|Maintained
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|[[Xbox One Backward Compatibility]]
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
ffdd5fe2859034739498940e79bd77a42f4c2669
Xbox Game Disc
0
3700
5714
5680
2017-06-18T15:06:26Z
JayFoxRox
2
/* Disc Manufacturing Information (DMI.bin) */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [Xbe#Title_ID]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
2048 Bytes
Read from the Lead-In.
READ DVD STRUCTURE with format 0x00
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
619170f817405cccf3c0d9cd7871b336133f89f6
5715
5714
2017-06-18T15:22:54Z
JayFoxRox
2
Moved from PDF, very unhappy with formatting, hopefully we'll have this differently in the future
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [Xbe#Title_ID]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The resulting hash - the first part of it, to be exact - is fed as the key into RC4 decryption. The output of SHA-1 contains 160 bits of information. 160 / 8 = 20 bytes of information. To express this as a printable hex digest requires 40 characters. The SHA-1 hash is converted to a hex digest and then the first 7 of the characters are fed into the RC4 initialization function as the key. Then, the RC4 decrypter does its work on the 253 Bytes of the challenge entries (Offset 770).
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
19eabc0673fffe0bc8fea0e79184ed53900bda6b
5716
5715
2017-06-18T15:28:31Z
JayFoxRox
2
Somehow the old text made it sound like one has to do some hex/ASCII stuff etc. - however, my experiments show that it's just the first 7 bytes which are used..
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [Xbe#Title_ID]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
02b7506aa230bf28bf40eb1f32f35ec69ad7fcd3
5717
5716
2017-06-18T18:51:45Z
JayFoxRox
2
Fixed internal link
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
90a1a6fd011a72e6057433a4741585a5b0afd098
Kernel
0
3678
5719
5629
2017-06-18T21:48:20Z
Haxar
2485
Kernel Variables
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot kernel initialization as described [[Boot_Process#Initialization|here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExTimerObjectType]]
|31
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|
|Variable: ULONG
|-
|[[Kernel/HalDiskModelNumber]]
|41
|
|Variable: STRING
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|
|Variable: STRING
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFileObjectType]]
|71
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|
|Variable: BOOLEAN
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|
|Variable: BOOLEAN
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|
|Variable: MMGLOBALDATA
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|
|Variable: ULONG
|-
|[[Kernel/KeTimeIncrement]]
|157
|
|Variable: ULONG
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|
|Variable: ULONG_PTR[5]
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|
|Variable: PLAUNCH_DATA_PAGE
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|
|Variable: OBJECT_HANDLE_TABLE
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxHardwareInfo]]
|322
|
|Variable: XBOX_HARDWARE_INFO
|-
|[[Kernel/XboxHDKey]]
|323
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxKrnlVersion]]
|324
|
|Variable: XBOX_KRNL_VERSION
|-
|[[Kernel/XboxSignatureKey]]
|325
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XeImageFileName]]
|326
|
|Variable: OBJECT_STRING
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|stdcall
|
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|
|Variable: XBOX_KEY_DATA[XBEIMAGE_ALTERNATE_TITLE_ID_COUNT]
|-
|[[Kernel/XePublicKeyData]]
|355
|
|Variable: UCHAR[XC_PUBLIC_KEYDATA_SIZE]
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|
|Variable: ULONG
|-
|[[Kernel/IdexChannelObject]]
|357
|
|Variable: IDE_CHANNEL_OBJECT
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
00f03c0aed79d1ecbb71e20c0b59a07283285449
5726
5719
2017-06-19T02:23:20Z
Haxar
2485
Kernel/XboxLANKey
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot kernel initialization as described [[Boot_Process#Initialization|here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExTimerObjectType]]
|31
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|
|Variable: ULONG
|-
|[[Kernel/HalDiskModelNumber]]
|41
|
|Variable: STRING
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|
|Variable: STRING
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFileObjectType]]
|71
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|
|Variable: BOOLEAN
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|
|Variable: BOOLEAN
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|
|Variable: MMGLOBALDATA
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|
|Variable: ULONG
|-
|[[Kernel/KeTimeIncrement]]
|157
|
|Variable: ULONG
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|
|Variable: ULONG_PTR[5]
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|
|Variable: PLAUNCH_DATA_PAGE
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|
|Variable: OBJECT_HANDLE_TABLE
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxHardwareInfo]]
|322
|
|Variable: XBOX_HARDWARE_INFO
|-
|[[Kernel/XboxHDKey]]
|323
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxKrnlVersion]]
|324
|
|Variable: XBOX_KRNL_VERSION
|-
|[[Kernel/XboxSignatureKey]]
|325
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XeImageFileName]]
|326
|
|Variable: OBJECT_STRING
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|
|Variable: XBOX_KEY_DATA[XBEIMAGE_ALTERNATE_TITLE_ID_COUNT]
|-
|[[Kernel/XePublicKeyData]]
|355
|
|Variable: UCHAR[XC_PUBLIC_KEYDATA_SIZE]
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|
|Variable: ULONG
|-
|[[Kernel/IdexChannelObject]]
|357
|
|Variable: IDE_CHANNEL_OBJECT
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
1da2e202652bb0a93a1ab332725153d2eb92888e
BIOS
0
3672
5722
5642
2017-06-18T22:30:43Z
JayFoxRox
2
/* Components */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! Unknown
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| || || || || || || ||
|-
! Kernel Data Segment
| || || || || || || ||
|-
! 2BL
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL (Start & Entry point)
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! FBL (End, exclusive)
| || || || 0x3FC80 || 0x3FC80 || 0x3FC80 || 0x3FC80 || 0x3FC80
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
0c960d3b28e3a3cd22effa9bbb7f488a0a6cd341
5723
5722
2017-06-18T23:55:28Z
JayFoxRox
2
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! Unknown
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| 0x0619C || || || || || || ||
|-
! Kernel Data Segment
| 0x3944C || || || || || || ||
|-
! 2BL <br> ''Always 0x6000 bytes''
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL <br> ''Always 0x2880 bytes''
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x000000079
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
9f342fbf34f66d8d0976d06f0d2eb75e29fd8b4b
Talk:Kernel/XboxSignatureKey
1
3797
5724
2017-06-19T00:33:42Z
JayFoxRox
2
/* Move to XBE article */ new section
wikitext
text/x-wiki
== Move to XBE article ==
A lot of the signing details should be moved to the XBE article / page
The information is not related to the XboxSignatureKey variable.
f4853187f4c7e6bc55ff587ecea28f0aa8048dcb
5725
5724
2017-06-19T00:33:54Z
JayFoxRox
2
Forgot signature
wikitext
text/x-wiki
== Move to XBE article ==
A lot of the signing details should be moved to the XBE article / page
The information is not related to the XboxSignatureKey variable.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 17:33, 18 June 2017 (PDT)
bb5c45ab5de1e5ff5646e83006c79b9c86e77540
MCPX ROM
0
3670
5727
5510
2017-06-19T10:45:22Z
JayFoxRox
2
/* MCPX 1.1 */
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1.
1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL.
For 1.1 Microsoft switched to a TEA algorithm.
The code on the chips is largely the same, but for those two differences{{citation needed}}.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it.
See [[Exploits#MCPX|MCPX exploits]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. Microsoft implemented a TEA algorithm to create a hash of the FBL and if that was correct, it would jump to 0xffffd400. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
* [https://github.com/JayFoxRox/xqemu-tools/blob/master/disassemble-mcpx.sh disassemble-mcpx.sh: A bash-script to disassemble/annotate MCPX 1.0 dumps]
03b3d725c4cf08aee0c414a13f0f49734908e904
Hard Drive
0
3707
5729
5257
2017-06-20T18:10:01Z
Codeasm
2480
/* Method 2: Exact Copy */ added the DD nice option of showing its progress
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
== Models ==
{| class="wikitable
|-
! Xbox Version
! Manufacturer
! Model Number
! Capacity
|-
| 1.0?
| ?
| ?
| 8G
|-
| 1.3+
| Seagate
| ?
| 10G
|}
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
c7b72be09835d97678e06f4bf1ea5cd581e45ad8
Talk:PIC
1
3798
5730
2017-06-21T11:24:32Z
JayFoxRox
2
/* Challenge code */ new section
wikitext
text/x-wiki
== Challenge code ==
[1:06 PM] JayFoxRox: but the handshake page should also be moved to our wiki [but I'd keep it on the SMC article probably and shorten it a bit]
[1:06 PM] JayFoxRox: there is also some ambiguity wether it's 200ms or 250ms
[1:08 PM] JayFoxRox: like.. that PIC Challenge article has full code listings for communicating with the PIC, which is entirely unrelated to the challenge lol. it's probably even unrelated to the PIC and just smbus related
[1:09 PM] JayFoxRox: also the behaviour is not explained anywhere, but just hidden in the example source code [which uses arguments from @ARGV instead of using the SMBUS read/write routine] lol
[1:10 PM] JayFoxRox: really that entire article boils down to: 200ms +
<pre>
$t1 = ($res_1c << 2) ^ ($res_1d + hex('039')) ^ ($res_1e >> 2) ^ ($res_1f + hex('063'));
$t2 = ($res_1c + hex('0b')) ^ ($res_1d >> 2) ^ ($res_1e + hex('1b'));
</pre>
[1:10 PM] JayFoxRox: and unfortunately perl is not the most readable language for this purpose :stuck_out_tongue:
[1:17 PM] JayFoxRox: I'd just have used:
<pre>
uint8_t a = smc_in(0x1C);
uint8_t b = smc_in(0x1D);
uint8_t c = smc_in(0x1E);
uint8_t d = smc_in(0x1F);
uint8_t t1 = (a << 2) ^ (b + 0x39) ^ (c >> 2) ^ (d + 0x63);
uint8_t t2 = (a + 0x0B) ^ (b >> 2) ^ (d + 0x1B);
uint8_t x = 0x33;
uint8_t y = 0xED;
for (unsigned int i = 0; i < 4; i++) {
x += y ^ t1;
y += x ^ t2;
}
smc_out(0x20, x);
smc_out(0x21, y);
smc_out(0x01, 0x00);
</pre>
(edited)
[1:18 PM] JayFoxRox: the a-d and x-y things could also be described in a comment, and it could also be rewritten without the datatypes and just a comment like: "All datatypes are unsigned bytes!"
[1:19 PM] JayFoxRox: [the out portion might even be bad, I have a hard time understanding that code on the xbox-linux wiki]
[1:20 PM] JayFoxRox: like.. "The above is repeated 0x21 and byte2, and 0x01 and data 0x00." what does that even mean?
692992f437c6732b1712ffc9c3e70e5f646f9518
NForce
0
3765
5731
5585
2017-06-23T04:59:42Z
DaveX
2487
typo
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/NForce}}
This documents collects information about the Xbox chipset and its sibling, the nVidia nForce chipset, as well as further relatives.
== nForce ==
The nForce chipset consists of the IGP (Integrated Graphics Processor) Northbridge and the MCP (Media and Communications Processor) Southbridge. Both are available in different flavours:
* IGP-64: 64 bit memory bus
* IGP-128: 128 bit memory bus (TwinBank), requires two DIMM modules for 128 bit operation
* MCP-D: includes Dolby Digital encoder
* MCP: Dolby Digital encoder disabled
So these are the four possible combinations:
{| class="wikitable"
|-
|
| MCP
| MCP-D
|-
| IGP-64
| nForce 220
| nForce 220D
|-
| IGP-128
| nForce 420
| nForce 420D
|}
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/05/31/nvidia_crush_chipset_named_nforce/]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/06/01/nvidia_crush_is_called_nforce/]
The VGA controller inside the IGP is a "GeForce2 MX Integrated Graphics" (PCI ID:10de/01a0). Its internal name is NV1A.
[https://web.archive.org/web/20100617023830/http://pciids.sourceforge.net/iii/?i=10de]
[https://web.archive.org/web/20100617023830/http://www.nvitalia.com/articoli/editoriali/produzione_nvidia_2001.htm]
Although IGP-64 and IGP-128 are different and their respective chipsets have different codenames (Crush11 and Crush12, see below), there seems to be no difference from the software side:
* The VGA BIOS of the MS-6367 mainboard (nForce 420D configuration, i.e. Crush12) has the internal name "CR11BT.ROM". It also includes the strings "NVIDIA GeForce2 Integrated GPU", "CR11 Board" and "Chip Rev B2".
* The PCI IDs seem to be the same for the GPUs inside IGP-64 and IGP-128.
== Crush ==
"Crush" was the codename of the nForce chipset. Crush11 is the nForce 220/220D/230/230-T, Crush12 is the nForce 420/420D/430/430-T, and Crush18 is the nForce2. The "11" probably derives from "NV11", the internal name of the GeForce2 MX.
[https://web.archive.org/web/20100617023830/http://users.erols.com/chare/chipsets.htm]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2000/11/17/nvidias_super_secret_crush_spec/]
== nForce & Xbox ==
The Xbox has an IGP-128 that uses an NV2A video core (PCI ID:10de/02a5), which is between the GeForce3 (NV20) and the GeForce4 (NV25). The Southbridge is called "MCP-X" and lacks the PCI card bus (PCI bus #1).
[https://web.archive.org/web/20100617023830/http://www.digit-life.com/articles/nvidianforce/]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/showdoc.html?i=1484]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=1535]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/systems/showdoc.aspx?i=1561&p=3]
== AMD Heritage ==
There is the following rumour, which is not fully verified yet:
* Microsoft wanted AMD to make the CPU and the chipset for the Xbox, and nVidia to make the video hardware.
* When alpha hardware had already bee built, Intel made a better deal
* Microsoft agreed to have Intel CPUs; Intel had to modify AMD's chipset to support an AMD CPU
* Intel insisted that the brand name AMD could not be associated with the Xbox, so nVidia licensed the AMD chipset. Now the Xbox chipset was by nVidia.
* nVidia sold the same chipset for PCs, calling it "nForce".
This is the reason why
* the Xbox is the only nForce chipset with an Intel CPU
* the AMD chipset and the nForce chipset are so similar
Evidence:
* The AMD and nForce AMD IDE controllers are fully compatible. (Linux kernel: "AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04 IDE driver for Linux." [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/ide/pci/amd74xx.c])
* The I2C/SMBus controller on the nForce is fully AMD-756/766/68 compatible. [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/i2c/busses/i2c-amd756.c]
* The audio controller is i810 compatible - as is the audio controller of the AMD-768 and the AMD-8111.
* The nForce and AMD-768 modems are compatible.
* At least one register ("VGA_en") in the nForce PCI-to-AGP bridge is compatible with the AMD chipset (AMD-761, 24081.pdf, page 136).
* The nForce uses HyperTransport.
* [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0307.3/0922.html], [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0301.3/0305.html]
* ''"One man's guess, the silicon is not a major factor. Because the nForce and 760 MP have a similar pin count, they are going to be cost comparable."'' [https://web.archive.org/web/20100617023830/http://overclockers.com/articles446/]
{| class="wikitable"
|-
|
| Northbridge
| Southbridge
|-
| AMD-760
| AMD-761
| AMD-766
|-
| AMD-760MP
| AMD-762
| AMD-766
|-
| AMD-760MPX
| AMD-762
| AMD-768
|}
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_1133,00.html AMD-760™ Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_1130,00.html AMD-760™ MP Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_4296,00.html AMD-760™ MPX Chipset Tech Docs]
<br />
The nForce chipset might be based on the AMD-760 chipset.
== More Links ==
[https://web.archive.org/web/20100617023830/http://www.duxcw.com/digest/guides/mb_chip/nforce/print.htm]
e0f11fe8054c8033e4da2da84049ce5e1e98c624
Main Page
0
1
5732
5661
2017-06-23T15:03:39Z
JayFoxRox
2
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[DVD-IR Internals]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
133e02974366277e5a27a99fb33e05b8c71857df
Talk:Xbox Debug Monitor
1
3746
5733
5440
2017-06-23T21:28:57Z
JayFoxRox
2
/* Incomplete */ new section
wikitext
text/x-wiki
== Crypto notes ==
The hash function used throughout XBDM is a [https://en.wikipedia.org/wiki/One-way_compression_function#Matyas.E2.80.93Meyer.E2.80.93Oseas Matyas–Meyer–Oseas one-way compression function] built on what appears to be a homegrown [https://en.wikipedia.org/wiki/Feistel_cipher balanced Feistel cipher] with a 64-bit key, 64-bit blocks, and 16 rounds. I can't find references to any of the constants online.
== Incomplete ==
The list is still incomplete. Important functions such as "setmem" are still missing.
Can someone <code>strings</code> the file so we have a full commandset somewhere?
0e8646dadf23b258b5422011cd232662ae729ca9
5734
5733
2017-06-23T21:29:15Z
JayFoxRox
2
Forgot: Signature added
wikitext
text/x-wiki
== Crypto notes ==
The hash function used throughout XBDM is a [https://en.wikipedia.org/wiki/One-way_compression_function#Matyas.E2.80.93Meyer.E2.80.93Oseas Matyas–Meyer–Oseas one-way compression function] built on what appears to be a homegrown [https://en.wikipedia.org/wiki/Feistel_cipher balanced Feistel cipher] with a 64-bit key, 64-bit blocks, and 16 rounds. I can't find references to any of the constants online.
== Incomplete ==
The list is still incomplete. Important functions such as "setmem" are still missing.
Can someone <code>strings</code> the file so we have a full commandset somewhere?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 14:29, 23 June 2017 (PDT)
cfd9c1e8aaf90653b10459f076be41d296f47cff
APU
0
3799
5735
2017-06-24T01:13:22Z
JayFoxRox
2
Rough layout
wikitext
text/x-wiki
* SGE = Scatter Gather Entry
* PRD = ? (Same thing as SGE?!)
== Global Processor (GP) ==
== Encode Processor (EP) ==
== Voice Processor (VP) ==
=== Voice lists ===
* 2D
* 3D
* MP
=== Voice structure ===
This is 0x80 bytes
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
c8802ffbadf970b9914c76bf99f27a3fb7719298
5736
5735
2017-06-24T01:16:27Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Engine).
* SGE = Scatter Gather Entry
* PRD = ? (Same thing as SGE?!)
== Global Processor (GP) ==
== Encode Processor (EP) ==
== Voice Processor (VP) ==
=== Voice lists ===
* 2D
* 3D
* MP
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
d1095f990c6c6c73384dc9c043dde79e11b36733
APU
0
3799
5737
5736
2017-06-24T01:23:10Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Engine).
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Global Processor (GP) ==
== Encode Processor (EP) ==
== Voice Processor (VP) ==
=== Voice lists ===
* 2D
* 3D
* MP
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
56e60f0ca63d31a868b2c166d1d8d43607617503
5738
5737
2017-06-24T01:23:44Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Global Processor (GP) ==
== Encode Processor (EP) ==
== Voice Processor (VP) ==
=== Voice lists ===
* 2D
* 3D
* MP
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
338f7655b6078a73430687a18b8f025a6912840c
5739
5738
2017-06-25T02:19:55Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Global Processor (GP) ==
* GPS = GP Scratch (?)
* GPF = GP Frames (?)
== Encode Processor (EP) ==
* EPS = EP Scratch (?)
* EPF = EP Frames (?)
== Voice Processor (VP) ==
* VPV = VP Voices
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
* 2D
* 3D
* MP
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
6fe6f6f4321ab4c1a659e4e786b8216550a5d64d
5744
5739
2017-06-25T21:35:24Z
JayFoxRox
2
/* Global Processor (GP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Global Processor (GP) ==
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
* EPS = EP Scratch (?)
* EPF = EP Frames (?)
== Voice Processor (VP) ==
* VPV = VP Voices
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
* 2D
* 3D
* MP
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
efabb501f1d773f78e358361f5cf1b91aaa1ff3a
5745
5744
2017-06-25T21:35:32Z
JayFoxRox
2
/* Encode Processor (EP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Global Processor (GP) ==
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Voice Processor (VP) ==
* VPV = VP Voices
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
* 2D
* 3D
* MP
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
106e6f4432c931dd645f4e58049c6d3ff5a5f08a
5746
5745
2017-06-26T10:48:23Z
JayFoxRox
2
/* Voice Processor (VP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Global Processor (GP) ==
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* [[wikipedia:Head-related transfer function|Head-related transfer function]]
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]]
* Pitch
* Input type (8bit, 16bit, 24bit, ADPCM)
* Volume envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Memory sections ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
29ac18727bf19060fefec9c5eded0887f7e16f41
5747
5746
2017-06-26T10:50:28Z
JayFoxRox
2
/* Encode Processor (EP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Global Processor (GP) ==
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* [[wikipedia:Head-related transfer function|Head-related transfer function]]
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]]
* Pitch
* Input type (8bit, 16bit, 24bit, ADPCM)
* Volume envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Memory sections ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
b47715e7cb41579a327aa7d2f99530526a2a1451
5748
5747
2017-06-26T10:51:59Z
JayFoxRox
2
/* Global Processor (GP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins. DirectSound allows to load custom DSP code for these effects.
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* [[wikipedia:Head-related transfer function|Head-related transfer function]]
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]]
* Pitch
* Input type (8bit, 16bit, 24bit, ADPCM)
* Volume envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Memory sections ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
2a4f004f2e0987304a88ca1dc2da24d3e356f459
5749
5748
2017-06-26T10:52:32Z
JayFoxRox
2
More logical order (VP -> GP -> EP)
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* [[wikipedia:Head-related transfer function|Head-related transfer function]]
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]]
* Pitch
* Input type (8bit, 16bit, 24bit, ADPCM)
* Volume envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Memory sections ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins. DirectSound allows to load custom DSP code for these effects.
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
36149c5b7de840a0aadd49b80da872d11c45f989
5750
5749
2017-06-26T16:09:54Z
JayFoxRox
2
/* Global Processor (GP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* [[wikipedia:Head-related transfer function|Head-related transfer function]]
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]]
* Pitch
* Input type (8bit, 16bit, 24bit, ADPCM)
* Volume envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Memory sections ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins. DirectSound allows to load custom DSP code for these effects.
GP seems to run at 160 MHz
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
e7a1d30b646a205279e63f720b1bb66f9a97d76b
5751
5750
2017-06-26T16:10:04Z
JayFoxRox
2
/* Encode Processor (EP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* [[wikipedia:Head-related transfer function|Head-related transfer function]]
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]]
* Pitch
* Input type (8bit, 16bit, 24bit, ADPCM)
* Volume envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Memory sections ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins. DirectSound allows to load custom DSP code for these effects.
GP seems to run at 160 MHz
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
a3f67ca5148b2e07cf9aa1b8c6447d00b8b0a560
5752
5751
2017-06-26T16:10:24Z
JayFoxRox
2
/* Memory sections */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* [[wikipedia:Head-related transfer function|Head-related transfer function]]
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]]
* Pitch
* Input type (8bit, 16bit, 24bit, ADPCM)
* Volume envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins. DirectSound allows to load custom DSP code for these effects.
GP seems to run at 160 MHz
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
f043cf30f4b61c8669fa92bb05ba68929619f7ab
5753
5752
2017-06-26T16:12:36Z
JayFoxRox
2
/* Global Processor (GP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* [[wikipedia:Head-related transfer function|Head-related transfer function]]
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]]
* Pitch
* Input type (8bit, 16bit, 24bit, ADPCM)
* Volume envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins. DirectSound allows to load custom DSP code for these effects.
The GP DSP seems to run at 160 MHz
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
985696d27123bad4792a1bd9fee5569504cf5aab
5754
5753
2017-06-26T16:18:41Z
JayFoxRox
2
/* Voice Processor (VP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins. DirectSound allows to load custom DSP code for these effects.
The GP DSP seems to run at 160 MHz
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
b048d0d3a8f0148967bfd71d1cd6e6e8f682341d
5755
5754
2017-06-26T18:46:18Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The final audio data is encoded to AC3 in the EP{{citation needed}} and written to the EP scratch memory.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
It is then send to the ACI using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
15cbb5ee73c538a106d9fb1cc0992fb8e252d36a
5758
5755
2017-06-26T21:31:25Z
JayFoxRox
2
/* Usage in DirectSound */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* Front Left
* Center{{citation needed}}
* Front Right
* Rear Left{{citation needed}}
* Rear Right{{citation needed}}
* [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
{{FIXME|reason=How does this data get into the EP?}}
The final audio data is encoded to AC3 in the EP{{citation needed}} and written to the EP scratch memory.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
It is then send to the ACI using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
42efa37195059d9cd1ff59ec79dfbcaa09b26711
5759
5758
2017-06-26T22:48:33Z
JayFoxRox
2
/* Usage in DirectSound */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* Front Left
* Center{{citation needed}}
* Front Right
* Rear Left{{citation needed}}
* Rear Right{{citation needed}}
* [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
ef685baa132173ac4d1996b2fb65db61b08fbb1a
5760
5759
2017-06-27T00:42:17Z
JayFoxRox
2
/* Usage in DirectSound */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* Front Left
* Center{{citation needed}}
* Front Right
* Rear Left{{citation needed}}
* Rear Right{{citation needed}}
* [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is then send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/5e114f24e4a83bd626f31674e024f439f3709d19/python-scripts/dsp.py Script to inspect APU registers and voice buffers (See master revision for updates)]
507cbdb0aeb41c0afd423fe3ab593be7f69a53c2
5762
5760
2017-06-27T01:33:17Z
JayFoxRox
2
/* Related */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* Front Left
* Center{{citation needed}}
* Front Right
* Rear Left{{citation needed}}
* Rear Right{{citation needed}}
* [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is then send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
0213ff685014d483c0a614cee6ce04828f585654
5766
5762
2017-06-27T01:52:53Z
JayFoxRox
2
/* Modifications for Boot Animation */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* Front Left
* Center{{citation needed}}
* Front Right
* Rear Left{{citation needed}}
* Rear Right{{citation needed}}
* [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
007f5773162fc0dc383a5792a92094fdc151580d
5767
5766
2017-06-27T03:04:51Z
DaveX
2487
/* Modifications for Boot Animation */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* Front Left
* Center{{citation needed}}
* Front Right
* Rear Left{{citation needed}}
* Rear Right{{citation needed}}
* [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
9fb302a724dc639556dad7901787c0858ed68f4c
5770
5767
2017-06-27T13:22:21Z
JayFoxRox
2
/* Usage in DirectSound */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP encodes the final AC3 stream for SPDIF. {{FIXME|reason=It might do more than just that; what does it do in analog mode for example?}}
It is not used during the [[Boot Animation]].
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
b54ad3221f2d8c0ee94313fc35ca0146fcf06400
MCPX
0
3671
5740
5466
2017-06-25T02:28:10Z
JayFoxRox
2
Research suggests there is one voice processor and 2 programmable DSPs, only one of which is controllable by software (I think)
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors (there are 4{{citation needed}} of them) and also the USB, PCI, IDE, etc, controllers{{citation needed}}.
The MCPX is also the home to the secret [[MCPX ROM]].
d5ee5ff9b4c6aedad1801b3435e6ae99a6effb0d
5763
5740
2017-06-27T01:35:28Z
JayFoxRox
2
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers{{citation needed}}.
The MCPX is also the home to the secret [[MCPX ROM]].
8de2bcb917306270a9245fd289ad8822e2756402
DSP
0
3800
5741
2017-06-25T11:34:24Z
JayFoxRox
2
Creating this as a possible placeholder and reminder about DSP facts as research happens
wikitext
text/x-wiki
The DSPs in the APU might be DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
d43cc30e18d517112d22123ba309310b96a0896c
5742
5741
2017-06-25T11:35:53Z
JayFoxRox
2
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
010fbcbc4cfdb1f8440624ede45df1c25aedd166
5743
5742
2017-06-25T11:36:47Z
JayFoxRox
2
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
According to espes, the DMA stuff is different.
9d0d70417165e3f54ef4be74faf539ab099168a6
5761
5743
2017-06-27T01:03:33Z
JayFoxRox
2
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
Sample formats:
* 0x0 = 8 bit
* 0x1 = 16 bit
* 0x2 = 24 bit in MSB
* 0x3 = 32 bit
* 0x4
* 0x5
* 0x6 = 24 bit in LSB (also endianess switched?{{citation needed}})
* 0x7
Buffers:
* 0x0 = FIFO0
* 0x1 = FIFO1
* 0x2 = FIFO2{{citation needed}}
* 0x3 = FIFO3{{citation needed}}
* 0x4
* 0x5
* 0x6
* 0x7
* 0x8
* 0x9
* 0xA
* 0xB
* 0xC
* 0xD
* 0xE = Circular
* 0xF
b7dcba17a44f7fdbd0bf5c09806fd0213e46fc1a
Template:Overline
10
3801
5756
2017-06-26T18:47:26Z
JayFoxRox
2
Created page with "{{#if:{{{2|}}}|{{{1|}}}}}<span style="text-decoration:overline;">{{#if:{{{2|}}}|{{{2}}}|{{{1}}}}}</span>"
wikitext
text/x-wiki
{{#if:{{{2|}}}|{{{1|}}}}}<span style="text-decoration:overline;">{{#if:{{{2|}}}|{{{2}}}|{{{1}}}}}</span>
b1552f05c350ed86d6dac41e4a0a80217145a612
5757
5756
2017-06-26T18:48:16Z
JayFoxRox
2
wikitext
text/x-wiki
<span style="text-decoration:overline;">{{{1}}}</span>
009b462cf3c81966b8aa29d90370f0984958891a
ACI
0
3802
5764
2017-06-27T01:42:34Z
JayFoxRox
2
Placeholder mostly. Link at the end is still dead - will update the repo soon.
wikitext
text/x-wiki
The ACI of the Xbox provides AC97.
It's similar to the AMD-768 ACI, but it is accessed through MMIO instead. The datasheet for the AMD-768 can be found at https://web.archive.org/web/20060322081039/http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24467.pdf .
The AC97 implementation only supports playback of 16-bit PCM stereo samples at 48kHz{{FIXME|reason=Not confirmed, but very likely}}.
== Register addresses ==
* 0x110 PCM
* 0x170 SPDIF
== Usage in DirectSound ==
AC97 is only used to receive buffers from the [[APU]].
{{FIXME|reason=I know more about this, but too lazy to write it down; JayFoxRox}}
== Related links ==
* [[https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/aci.py Script to inspect ACI registers and AC97 input buffers]]
fcf5ecb50ddc36eb96f770b1bf8ea1c0a9209752
5765
5764
2017-06-27T01:43:19Z
JayFoxRox
2
wikitext
text/x-wiki
The ACI of the Xbox provides AC97.
It's similar to the AMD-768 ACI, but it is accessed through MMIO instead. The datasheet for the AMD-768 can be found at https://web.archive.org/web/20060322081039/http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24467.pdf .
The AC97 implementation only supports playback of 16-bit PCM stereo samples at 48kHz{{FIXME|reason=Not confirmed, but very likely}}.
== Register addresses ==
* 0x110 PCM
* 0x170 SPDIF
== Usage in DirectSound ==
AC97 is only used to receive buffers from the [[APU]].
{{FIXME|reason=I know more about this, but too lazy to write it down; JayFoxRox}}
== Related links ==
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/aci.py Script to inspect ACI registers and AC97 input buffers]
d0094e09ad982f137be66b2b3540aae22e81ef58
File:Azurik--Rise-of-Perathia--bugged.png
6
3803
5768
2017-06-27T03:11:34Z
DaveX
2487
GPU emu non-exact rounding issues e.g. in Azurik: Rise of Perathia
wikitext
text/x-wiki
GPU emu non-exact rounding issues e.g. in Azurik: Rise of Perathia
4755131d2894210f5101a3053fd9b587a3bd7e27
Azurik: Rise of Perathia
0
3685
5769
5292
2017-06-27T03:17:10Z
DaveX
2487
image uploaded
wikitext
text/x-wiki
{{Game}}
=== Known tricky behaviour ===
==== Skinning code / Shader rounding mode ====
This game depends on correct GPU rounding. If an emulator suffers from issues with non-exact rounding in the shaders which do the skinning / skeletal animation the character models will be very broken.
[[File:Azurik--Rise-of-Perathia--bugged.png]]
IIRC Code is like:
A0 = c[113].x + c[113].z = 18
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].x + c[113].z = 21
*do stuff with c[96+A0] to c[98+A0]*
A0 = c[113].y * v2
*do stuff with c[96+A0] to c[98+A0]*
c[113] is vec4(15, 765, 3, 0). 765 = 3*255.
v2 is GL_UNSIGNED_BYTE, normalized => v2 = raw/255.
A0 = 765 * raw/255 = 3*raw.
This should all be working, but it's not. [[NV2A/Vertex Shader]] does round-to-zero. Behaviour for GLSL and other modern graphic APIs is undefined..
To work around this rounding issue <code>A0 += 1.0/255.0</code> can be used as a temporary hack
2ba8973623cd779f095b53e61d529ed1a5bcf0e8
Xbox ADPCM
0
3804
5771
2017-06-27T21:19:43Z
JayFoxRox
2
Created page with "Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM. Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM..."
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format code 0x0069.
Despite this format-code difference the file formats (including header and data) are otherwise the same.
There are no known differences to IMA ADPCM except for the WAV format code.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible.
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM encoding]
{{FIXME|reason=Link to explanation of IMA ADPCM WAV file format}}
a0281cbf6fa9eb143647633d901bfbf740de70e1
5772
5771
2017-06-28T01:15:28Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format code 0x0069.
Despite this format-code difference the file formats (including header and data) are otherwise the same.
However, all Xbox ADPCM files seem to use 64 samples per block.
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo).
Aside from this there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM encoding]
{{FIXME|reason=Link to explanation of IMA ADPCM WAV file format}}
c7edc573c62a17695b5bc9353a067230d920cf85
5773
5772
2017-06-28T01:19:52Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format code 0x0069.
Despite this format-code difference the file formats (including header and data) are otherwise the same.
All Xbox ADPCM files seem to use 64 samples per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo).
Aside from this there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM encoding]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM]
799e83ceda51568b9b228057d81d66a187976137
5774
5773
2017-06-28T01:29:07Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
All Xbox ADPCM files seem to use 64 samples per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo).
Aside from this there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM encoding]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM]
6d0cbf183329be40693f5f7f99fccba647466749
5775
5774
2017-06-28T02:00:45Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
All Xbox ADPCM files seem to store 64 input samples per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo).
As the decoder-setup in every block contains a predictor for each channel, there will be 65 output samples per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM encoding]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM]
a9e2d007bf6c365aa89225fc5dcea589d6e43d6a
5776
5775
2017-06-28T02:07:27Z
JayFoxRox
2
Table cell alignment
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
All Xbox ADPCM files seem to store 64 input samples per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo).
As the decoder-setup in every block contains a predictor for each channel, there will be 65 output samples per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM encoding]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM]
e8dfde080c7e397ec49ee190c4d442cb9de41c7d
5777
5776
2017-06-28T02:09:13Z
JayFoxRox
2
/* Related links */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
All Xbox ADPCM files seem to store 64 input samples per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo).
As the decoder-setup in every block contains a predictor for each channel, there will be 65 output samples per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM block encoding]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV header]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
a76afa529cdab428f0c9086fee5857226423cdc4
5778
5777
2017-06-28T02:10:01Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
All Xbox ADPCM files seem to store 64 input samples per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo).
As the decoder-setup in every block contains a predictor for each channel, there will be 65 output samples per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
4cad1ce77826feacc9567fc83f33d99336d7e4d5
5779
5778
2017-06-28T10:48:39Z
JayFoxRox
2
Add some table about storage (WIP)
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 input samples per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Snow;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{{FIXME|reason=Fix cell colors, can we somehow set the scope for background color?}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| colspan="4" | P = S0
| colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || S1 || S4 || S3 || S6 || S5 || S8 || S7
| style="background-color:SkyBlue;" | S10 || S9 || S12 || S11 || S14 || S13 || S16 || S15
| style="background-color:SkyBlue;" | S50 || S49 || S52 || S51 || S54 || S53 || S56 || S55
| style="background-color:SkyBlue;" | S58 || S57 || S60 || S59 || S62 || S61 || S64 || S63
|}
==== Stereo ====
{{FIXME|reason=Add table}}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
cdb94548699b19d50c4414cad66ad9b599c4eed4
5780
5779
2017-06-28T10:49:43Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Snow;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{{FIXME|reason=Fix cell colors, can we somehow set the scope for background color?}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| colspan="4" | P = S0
| colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || S1 || S4 || S3 || S6 || S5 || S8 || S7
| style="background-color:SkyBlue;" | S10 || S9 || S12 || S11 || S14 || S13 || S16 || S15
| style="background-color:SkyBlue;" | S50 || S49 || S52 || S51 || S54 || S53 || S56 || S55
| style="background-color:SkyBlue;" | S58 || S57 || S60 || S59 || S62 || S61 || S64 || S63
|}
==== Stereo ====
{{FIXME|reason=Add table}}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
81c05738d39c12c55ac13bda4b063a096541d5db
5781
5780
2017-06-28T10:50:08Z
JayFoxRox
2
/* Mono */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Snow;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{{FIXME|reason=Fix cell colors, can we somehow set the scope for background color?}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" | colspan="4" | P = S0
| style="background-color:SkyBlue;" | colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || S1 || S4 || S3 || S6 || S5 || S8 || S7
| style="background-color:SkyBlue;" | S10 || S9 || S12 || S11 || S14 || S13 || S16 || S15
| style="background-color:SkyBlue;" | S50 || S49 || S52 || S51 || S54 || S53 || S56 || S55
| style="background-color:SkyBlue;" | S58 || S57 || S60 || S59 || S62 || S61 || S64 || S63
|}
==== Stereo ====
{{FIXME|reason=Add table}}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
2a334fee575025bf00fd2cd4ce4413784f075465
5782
5781
2017-06-28T10:50:30Z
JayFoxRox
2
/* Block format */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Snow;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{{FIXME|reason=Fix cell colors, can we somehow set the scope for background color?}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || S1 || S4 || S3 || S6 || S5 || S8 || S7
| style="background-color:SkyBlue;" | S10 || S9 || S12 || S11 || S14 || S13 || S16 || S15
| style="background-color:SkyBlue;" | S50 || S49 || S52 || S51 || S54 || S53 || S56 || S55
| style="background-color:SkyBlue;" | S58 || S57 || S60 || S59 || S62 || S61 || S64 || S63
|}
==== Stereo ====
{{FIXME|reason=Add table}}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
d2c820a2860c575c5f5a6e07e646dd4ca051d18a
5783
5782
2017-06-28T10:56:45Z
JayFoxRox
2
/* Mono */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Snow;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S50 || style="background-color:SkyBlue;" | S49
| style="background-color:SkyBlue;" | S52 || style="background-color:SkyBlue;" | S51
| style="background-color:SkyBlue;" | S54 || style="background-color:SkyBlue;" | S53
| style="background-color:SkyBlue;" | S56 || style="background-color:SkyBlue;" | S55
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Add table}}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
d1cc54c79b13b6b57e2172bcc6727dd3f7b6407e
5784
5783
2017-06-28T11:00:15Z
JayFoxRox
2
/* Block format */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S50 || style="background-color:SkyBlue;" | S49
| style="background-color:SkyBlue;" | S52 || style="background-color:SkyBlue;" | S51
| style="background-color:SkyBlue;" | S54 || style="background-color:SkyBlue;" | S53
| style="background-color:SkyBlue;" | S56 || style="background-color:SkyBlue;" | S55
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Add table}}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
d8d5edb4da778f2ff3f9cb09bb1dba1cec6c84c0
5785
5784
2017-06-28T11:12:00Z
JayFoxRox
2
Stereo Table (WIP)
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S50 || style="background-color:SkyBlue;" | S49
| style="background-color:SkyBlue;" | S52 || style="background-color:SkyBlue;" | S51
| style="background-color:SkyBlue;" | S54 || style="background-color:SkyBlue;" | S53
| style="background-color:SkyBlue;" | S56 || style="background-color:SkyBlue;" | S55
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
| colspan="8" | W4
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
| colspan="2" | B16 || colspan="2" | B17 || colspan="2" | B18 || colspan="2" | B19
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
| style="background-color:White;" | S10 || style="background-color:White;" | S9
| style="background-color:White;" | S12 || style="background-color:White;" | S11
| style="background-color:White;" | S14 || style="background-color:White;" | S13
| style="background-color:White;" | S16 || style="background-color:White;" | S15
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
d2aeb96b7f7373559e8b8e18e2bae81ce74e68dc
5786
5785
2017-06-28T11:12:43Z
JayFoxRox
2
/* Block format */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
* All indices start at 0
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S50 || style="background-color:SkyBlue;" | S49
| style="background-color:SkyBlue;" | S52 || style="background-color:SkyBlue;" | S51
| style="background-color:SkyBlue;" | S54 || style="background-color:SkyBlue;" | S53
| style="background-color:SkyBlue;" | S56 || style="background-color:SkyBlue;" | S55
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
| colspan="8" | W4
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
| colspan="2" | B16 || colspan="2" | B17 || colspan="2" | B18 || colspan="2" | B19
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
| style="background-color:White;" | S10 || style="background-color:White;" | S9
| style="background-color:White;" | S12 || style="background-color:White;" | S11
| style="background-color:White;" | S14 || style="background-color:White;" | S13
| style="background-color:White;" | S16 || style="background-color:White;" | S15
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
ff30813bb3ad65f62964109a2da8e1a764927156
Xbox ADPCM
0
3804
5787
5786
2017-06-28T11:12:58Z
JayFoxRox
2
/* Block format */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S50 || style="background-color:SkyBlue;" | S49
| style="background-color:SkyBlue;" | S52 || style="background-color:SkyBlue;" | S51
| style="background-color:SkyBlue;" | S54 || style="background-color:SkyBlue;" | S53
| style="background-color:SkyBlue;" | S56 || style="background-color:SkyBlue;" | S55
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
| colspan="8" | W4
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
| colspan="2" | B16 || colspan="2" | B17 || colspan="2" | B18 || colspan="2" | B19
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
| style="background-color:White;" | S10 || style="background-color:White;" | S9
| style="background-color:White;" | S12 || style="background-color:White;" | S11
| style="background-color:White;" | S14 || style="background-color:White;" | S13
| style="background-color:White;" | S16 || style="background-color:White;" | S15
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
8ca1b2b6751b5e8d00f411bedfd3e0d75e527a56
5788
5787
2017-06-28T11:13:51Z
JayFoxRox
2
/* Stereo */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W7
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B28 || colspan="2" | B29 || colspan="2" | B30 || colspan="2" | B31
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S50 || style="background-color:SkyBlue;" | S49
| style="background-color:SkyBlue;" | S52 || style="background-color:SkyBlue;" | S51
| style="background-color:SkyBlue;" | S54 || style="background-color:SkyBlue;" | S53
| style="background-color:SkyBlue;" | S56 || style="background-color:SkyBlue;" | S55
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
ba85ecfe06bb3b8ee97087f4a440ecce98ae1577
5789
5788
2017-06-28T11:15:21Z
JayFoxRox
2
/* Mono */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode ADPCM data. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
74e91b4daa39bdffb94a93da37eaf5c7cf629277
5790
5789
2017-06-28T11:21:52Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode data using [[Wikipedia:Adaptive differential pulse-code modulation|ADPCM]]. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7
|-
! 0
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|-
! 8
| -1 || -1 || -1 || -1 || 2 || 4 || 6 || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
f7a9a00f4d98fecc05fbee8bed25cf68bc49a6a6
5793
5790
2017-06-28T11:33:32Z
JayFoxRox
2
/* Index-Table */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode data using [[Wikipedia:Adaptive differential pulse-code modulation|ADPCM]]. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
|-
! {{no-select}} | 0
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8{{hc}}
|-
! {{no-select}} | 8
| -1{{hc}} || -1{{hc}} || -1 {{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
c722e9778ca1ac2e98d68fa115f5f8d5999cb96d
5795
5793
2017-06-28T11:35:04Z
JayFoxRox
2
/* Step-Table */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode data using [[Wikipedia:Adaptive differential pulse-code modulation|ADPCM]]. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
|-
! {{no-select}} | 0
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8{{hc}}
|-
! {{no-select}} | 8
| -1{{hc}} || -1{{hc}} || -1 {{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{{FIXME|reason=Use no-select and hc macros}}
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
c1c580bc508a38294a4b49c6ccc4f80e0fad1fad
5797
5795
2017-06-28T11:47:30Z
JayFoxRox
2
Removed bad space
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode data using [[Wikipedia:Adaptive differential pulse-code modulation|ADPCM]]. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
|-
! {{no-select}} | 0
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8{{hc}}
|-
! {{no-select}} | 8
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{{FIXME|reason=Use no-select and hc macros}}
{| class="wikitable" style="text-align: right;"
! || +0 || +1 || +2 || +3 || +4 || +5 || +6 || +7 || +8 || +9
|-
! 0
| 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 16 || 17
|-
! 10
| 19 || 21 || 23 || 25 || 28 || 31 || 34 || 37 || 41 || 45
|-
! 20
| 50 || 55 || 60 || 66 || 73 || 80 || 88 || 97 || 107 || 118
|-
! 30
| 130 || 143 || 157 || 173 || 190 || 209 || 230 || 253 || 279 || 307
|-
! 40
| 337 || 371 || 408 || 449 || 494 || 544 || 598 || 658 || 724 || 796
|-
! 50
| 876 || 963 || 1060 || 1166 || 1282 || 1411 || 1552 || 1707 || 1878 || 2066
|-
! 60
| 2272 || 2499 || 2749 || 3024 || 3327 || 3660 || 4026 || 4428 || 4871 || 5358
|-
! 70
| 5894 || 6484 || 7132 || 7845 || 8630 || 9493 || 10442 || 11487 || 12635 || 13899
|-
! 80
| 15289 || 16818 || 18500 || 20350 || 22385 || 24623 || 27086 || 29794 || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
72e18d306837449d9714ce3639ba43107e6348fc
5798
5797
2017-06-28T11:51:36Z
JayFoxRox
2
Make table easy to copy
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode data using [[Wikipedia:Adaptive differential pulse-code modulation|ADPCM]]. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| rowspan="3" | ...
| colspan="8" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
|-
! {{no-select}} | 0
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8{{hc}}
|-
! {{no-select}} | 8
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
! {{no-select}} | +8
! {{no-select}} | +9
|-
! {{no-select}} | 0
| 7{{hc}} || 8{{hc}} || 9{{hc}} || 10{{hc}} || 11{{hc}} || 12{{hc}} || 13{{hc}} || 14{{hc}} || 16{{hc}} || 17{{hc}}
|-
! {{no-select}} | 10
| 19{{hc}} || 21{{hc}} || 23{{hc}} || 25{{hc}} || 28{{hc}} || 31{{hc}} || 34{{hc}} || 37{{hc}} || 41{{hc}} || 45{{hc}}
|-
! {{no-select}} | 20
| 50{{hc}} || 55{{hc}} || 60{{hc}} || 66{{hc}} || 73{{hc}} || 80{{hc}} || 88{{hc}} || 97{{hc}} || 107{{hc}} || 118{{hc}}
|-
! {{no-select}} | 30
| 130{{hc}} || 143{{hc}} || 157{{hc}} || 173{{hc}} || 190{{hc}} || 209{{hc}} || 230{{hc}} || 253{{hc}} || 279{{hc}} || 307{{hc}}
|-
! {{no-select}} | 40
| 337{{hc}} || 371{{hc}} || 408{{hc}} || 449{{hc}} || 494{{hc}} || 544{{hc}} || 598{{hc}} || 658{{hc}} || 724{{hc}} || 796{{hc}}
|-
! {{no-select}} | 50
| 876{{hc}} || 963{{hc}} || 1060{{hc}} || 1166{{hc}} || 1282{{hc}} || 1411{{hc}} || 1552{{hc}} || 1707{{hc}} || 1878{{hc}} || 2066{{hc}}
|-
! {{no-select}} | 60
| 2272{{hc}} || 2499{{hc}} || 2749{{hc}} || 3024{{hc}} || 3327{{hc}} || 3660{{hc}} || 4026{{hc}} || 4428{{hc}} || 4871{{hc}} || 5358{{hc}}
|-
! {{no-select}} | 70
| 5894{{hc}} || 6484{{hc}} || 7132{{hc}} || 7845{{hc}} || 8630{{hc}} || 9493{{hc}} || 10442{{hc}} || 11487{{hc}} || 12635{{hc}} || 13899{{hc}}
|-
! {{no-select}} | 80
| 15289{{hc}} || 16818{{hc}} || 18500{{hc}} || 20350{{hc}} || 22385{{hc}} || 24623{{hc}} || 27086{{hc}} || 29794{{hc}} || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
26bbf1a69d1548d4376b3605840223b3fb7a56c6
5799
5798
2017-06-28T20:55:28Z
JayFoxRox
2
/* Mono */
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode data using [[Wikipedia:Adaptive differential pulse-code modulation|ADPCM]]. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (65:36 compression ratio = 44.6% compression).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" width="20%" | W0
| colspan="8" width="20%" | W1
| colspan="8" width="20%" | W2
| rowspan="3" width="5%" | ...
| colspan="8" width="20%" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
|-
! {{no-select}} | 0
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8{{hc}}
|-
! {{no-select}} | 8
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
! {{no-select}} | +8
! {{no-select}} | +9
|-
! {{no-select}} | 0
| 7{{hc}} || 8{{hc}} || 9{{hc}} || 10{{hc}} || 11{{hc}} || 12{{hc}} || 13{{hc}} || 14{{hc}} || 16{{hc}} || 17{{hc}}
|-
! {{no-select}} | 10
| 19{{hc}} || 21{{hc}} || 23{{hc}} || 25{{hc}} || 28{{hc}} || 31{{hc}} || 34{{hc}} || 37{{hc}} || 41{{hc}} || 45{{hc}}
|-
! {{no-select}} | 20
| 50{{hc}} || 55{{hc}} || 60{{hc}} || 66{{hc}} || 73{{hc}} || 80{{hc}} || 88{{hc}} || 97{{hc}} || 107{{hc}} || 118{{hc}}
|-
! {{no-select}} | 30
| 130{{hc}} || 143{{hc}} || 157{{hc}} || 173{{hc}} || 190{{hc}} || 209{{hc}} || 230{{hc}} || 253{{hc}} || 279{{hc}} || 307{{hc}}
|-
! {{no-select}} | 40
| 337{{hc}} || 371{{hc}} || 408{{hc}} || 449{{hc}} || 494{{hc}} || 544{{hc}} || 598{{hc}} || 658{{hc}} || 724{{hc}} || 796{{hc}}
|-
! {{no-select}} | 50
| 876{{hc}} || 963{{hc}} || 1060{{hc}} || 1166{{hc}} || 1282{{hc}} || 1411{{hc}} || 1552{{hc}} || 1707{{hc}} || 1878{{hc}} || 2066{{hc}}
|-
! {{no-select}} | 60
| 2272{{hc}} || 2499{{hc}} || 2749{{hc}} || 3024{{hc}} || 3327{{hc}} || 3660{{hc}} || 4026{{hc}} || 4428{{hc}} || 4871{{hc}} || 5358{{hc}}
|-
! {{no-select}} | 70
| 5894{{hc}} || 6484{{hc}} || 7132{{hc}} || 7845{{hc}} || 8630{{hc}} || 9493{{hc}} || 10442{{hc}} || 11487{{hc}} || 12635{{hc}} || 13899{{hc}}
|-
! {{no-select}} | 80
| 15289{{hc}} || 16818{{hc}} || 18500{{hc}} || 20350{{hc}} || 22385{{hc}} || 24623{{hc}} || 27086{{hc}} || 29794{{hc}} || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
19117e02d6bcc3906f99477b03df8cafcb8eff99
Template:No-select
10
3805
5791
2017-06-28T11:29:26Z
JayFoxRox
2
Created page with "style="-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;-o-user-select: none;user-select: none;""
wikitext
text/x-wiki
style="-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;-o-user-select: none;user-select: none;"
706577727232a27e16ddbb085f3d252dc6135750
Template:Hc
10
3806
5792
2017-06-28T11:33:17Z
JayFoxRox
2
Created page with "<noinclude>Creates a hidden comma symbol which can still be copied</noinclude><span style="display:hidden">,</span>"
wikitext
text/x-wiki
<noinclude>Creates a hidden comma symbol which can still be copied</noinclude><span style="display:hidden">,</span>
2f318ff1b5179d422a4b79b0e31ab2c0f48e2282
5794
5792
2017-06-28T11:34:06Z
JayFoxRox
2
This had a bug
wikitext
text/x-wiki
<noinclude>Creates a hidden comma symbol which can still be copied</noinclude><span style="display:none;">,</span>
e8d9031380eda992a38cd0251762af0422fb941f
5796
5794
2017-06-28T11:45:58Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>Creates a hidden comma symbol which can still be copied</noinclude><span style="font-size: 0; color: rgba(0,0,0,0);">,</span>
4bc0aa18e1d3828525f6d46e75ccd1c61cd8f339
DSP
0
3800
5800
5761
2017-06-28T23:37:44Z
JayFoxRox
2
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
Sample formats:
* 0x0 = 8 bit
* 0x1 = 16 bit
* 0x2 = 24 bit in MSB
* 0x3 = 32 bit
* 0x4
* 0x5
* 0x6 = 24 bit in LSB (also endianess switched?{{citation needed}})
* 0x7
Buffers:
* 0x0 = FIFO0
* 0x1 = FIFO1
* 0x2 = FIFO2{{citation needed}}
* 0x3 = FIFO3{{citation needed}}
* 0x4
* 0x5
* 0x6
* 0x7
* 0x8
* 0x9
* 0xA
* 0xB
* 0xC
* 0xD
* 0xE = Circular
* 0xF
== Related links ==
* [http://www.zdomain.com/a56.html A56, open-source assembler for the 56000 architecture]
1e801f585797ed4d9db741dd4a52ef98265d2f4a
5804
5800
2017-06-28T23:47:41Z
JayFoxRox
2
/* Related links */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
Sample formats:
* 0x0 = 8 bit
* 0x1 = 16 bit
* 0x2 = 24 bit in MSB
* 0x3 = 32 bit
* 0x4
* 0x5
* 0x6 = 24 bit in LSB (also endianess switched?{{citation needed}})
* 0x7
Buffers:
* 0x0 = FIFO0
* 0x1 = FIFO1
* 0x2 = FIFO2{{citation needed}}
* 0x3 = FIFO3{{citation needed}}
* 0x4
* 0x5
* 0x6
* 0x7
* 0x8
* 0x9
* 0xA
* 0xB
* 0xC
* 0xD
* 0xE = Circular
* 0xF
== Related links ==
* [http://www.zdomain.com/a56.html A56, open-source assembler for the similar 56000 architecture]
02d9b27d087fda50212881d71840e2aed7accdbd
APU
0
3799
5801
5770
2017-06-28T23:39:19Z
JayFoxRox
2
/* Encode Processor (EP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP runs all enabled sound effects on the voice bins.
The GP DSP seems to run at 160 MHz
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
3f639d6c3688a3ac3e9afa0503cadb67e7f828f9
5802
5801
2017-06-28T23:40:35Z
JayFoxRox
2
/* Global Processor (GP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for filter / effects.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through a filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
246b2811ec7468fbb410a63c550e19cb90873428
5803
5802
2017-06-28T23:46:28Z
JayFoxRox
2
/* Usage in DirectSound */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
fc3f4c2ef7750b36954a8ecc3f54ba2ded7379bc
5805
5803
2017-06-29T00:07:06Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch
* 2x Pitch (?) envelope
* 2x LFO (?) envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
10487e0ed2dd277bf8aa4f5a330f5872a0635bef
5806
5805
2017-06-30T20:25:37Z
JayFoxRox
2
/* Voice Processor (VP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
* Volume Envelope
* Pitch / Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
=== Envelopes ===
* Delay = Time where envelope stays at 0% until attack
* Attack = Rate at which the envelope goes from 0 to 100%
* Hold = Time the envelope stays at 100%
* Decay = Rate at which the envelope goes from 100% to sustain level
* Sustain = Level at which the envelope stays while the voice is being played
* Release = Rate at which the envelope goes from current level to 0%
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
800acc38380859f9a25e84372dac27245c14a4fb
5807
5806
2017-06-30T20:26:18Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
* Volume Envelope
* Pitch / Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
* Delay = Time where envelope stays at 0% until attack
* Attack = Rate at which the envelope goes from 0 to 100%
* Hold = Time the envelope stays at 100%
* Decay = Rate at which the envelope goes from 100% to sustain level
* Sustain = Level at which the envelope stays while the voice is being played
* Release = Rate at which the envelope goes from current level to 0%
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
024096d4816bc87bded65780208f206986f1084e
5808
5807
2017-06-30T21:01:22Z
JayFoxRox
2
Filter modes.. holy shit
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
* Volume Envelope
* Pitch / Cutoff Envelope
* Optionally one of the following filters modes:
* For 2D Mono:
* DLS2 Low-Pass
* Parametric Equalizer
* DLS2 Low-Pass + Parametric Equalizer
* For 2D Stereo:
* DLS2 Low-Pass
* Parametric Equalizer
* For 3D:
* DLS2 Low-Pass + I3DL2 Reverb
* Parametric Equalizer + I3DL2 Reverb
* I3DL2 Reverb
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
* Delay = Time where envelope stays at 0% until attack
* Attack = Rate at which the envelope goes from 0 to 100%
* Hold = Time the envelope stays at 100%
* Decay = Rate at which the envelope goes from 100% to sustain level
* Sustain = Level at which the envelope stays while the voice is being played
* Release = Rate at which the envelope goes from current level to 0%
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Related notes ==
* [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
* [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
* [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
f428914bd7d64983685e9111558e3dd1d07b18f1
5809
5808
2017-06-30T21:01:59Z
JayFoxRox
2
/* Voice Processor (VP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / Cutoff Envelope
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
* Delay = Time where envelope stays at 0% until attack
* Attack = Rate at which the envelope goes from 0 to 100%
* Hold = Time the envelope stays at 100%
* Decay = Rate at which the envelope goes from 100% to sustain level
* Sustain = Level at which the envelope stays while the voice is being played
* Release = Rate at which the envelope goes from current level to 0%
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Related notes ==
* [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
* [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
* [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
767bacca8cb74af0235fa2f029c1636c725f9df3
5810
5809
2017-06-30T21:05:51Z
JayFoxRox
2
/* Related notes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / Cutoff Envelope
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
* Delay = Time where envelope stays at 0% until attack
* Attack = Rate at which the envelope goes from 0 to 100%
* Hold = Time the envelope stays at 100%
* Decay = Rate at which the envelope goes from 100% to sustain level
* Sustain = Level at which the envelope stays while the voice is being played
* Release = Rate at which the envelope goes from current level to 0%
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/apu.py Script to inspect APU registers and voice buffers]
624ff2eb17dc3bedc5280be852b8fb94cdf66dae
5811
5810
2017-06-30T21:06:29Z
JayFoxRox
2
/* Related */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / Cutoff Envelope
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
* Delay = Time where envelope stays at 0% until attack
* Attack = Rate at which the envelope goes from 0 to 100%
* Hold = Time the envelope stays at 100%
* Decay = Rate at which the envelope goes from 100% to sustain level
* Sustain = Level at which the envelope stays while the voice is being played
* Release = Rate at which the envelope goes from current level to 0%
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
be6693a0e23360af9abc29197997c097a3c13500
5812
5811
2017-07-01T13:12:34Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / Cutoff Envelope
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
005a10a77d26fb73c2405f2a67b1ff0b88978b1d
5813
5812
2017-07-01T13:13:29Z
JayFoxRox
2
/* Voice Processor (VP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
b3010e48bd10e40b18d8b8057d41f31172d6b982
5814
5813
2017-07-01T13:49:26Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz{{citation needed|reason=Derived from the following formulas, but probably correct as 48000/3 = 1500 = good clock divider}}.
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
5002e35cde2cdb160cdce36ce500c119de792a07
5815
5814
2017-07-01T13:50:03Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz{{citation needed|reason=Derived from the following formulas, but probably correct as 48000/3 = 1500 = good clock divider}}.
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
411511435e87277b71d004e98eed6e7d4d4ecf0d
5816
5815
2017-07-01T14:25:23Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz{{citation needed|reason=Derived from the following formulas, but probably correct as 48000/32 = 1500 = good clock divider}}.
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
e936e9c247869428538af29ce13e5d312c58e6db
5818
5816
2017-07-01T14:58:47Z
JayFoxRox
2
Measured the actual speeds and visualized the results
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
c0c3c2ddc50f9641ed7a29f5af29ceafb507b2ae
5819
5818
2017-07-01T15:25:29Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
{{FIXME|reason=Research}}
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
a1334060ef050f9c78865baaf71aaa47e7e50ae6
5821
5819
2017-07-01T15:54:46Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
{{FIXME|reason=Add units and graphics}}
==== Volume Envelope ====
The volume envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Pitch / Cutoff Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
c23f57b22d168fadf5877b558ba8db1991498dc0
5824
5821
2017-07-01T16:30:41Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Volume Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Volume Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
==== Volume Envelope ====
The volume envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
bb7e5d118802f6d933ded6750d9135a9fef7ff2d
5825
5824
2017-07-01T17:05:40Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
a32646253024583e67740e5c02a3fe1f38b1c410
5826
5825
2017-07-01T18:18:39Z
JayFoxRox
2
/* Voice Processor (VP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
{{FIXME|reason=Untested. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c: Cutoff frequency
* r: Resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
a65740937f7de95b35e151aeb882f4eeade1bc29
5827
5826
2017-07-01T20:09:19Z
JayFoxRox
2
/* DLS2 */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices{{citation needed}} and 64{{citation needed}} of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
226a7a47ed656ff3e45f826c2a0872d4e77fc519
5828
5827
2017-07-01T20:50:03Z
Codeasm
2480
/* Voice Processor (VP) */ Source link for number of voices
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices[https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
c7ba0fa009167b39b153443f376bd6e8a86fda47
5830
5828
2017-07-01T21:09:38Z
Codeasm
2480
/* Voice Processor (VP) */ sound guy needs to be there somewhere. www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
3cd0f121dbc7cb1f27be0390c9f1bbf31078e7e9
5831
5830
2017-07-01T22:15:08Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
b1843fad320ed72f70cf9a2b71cb96cf23d1b753
5832
5831
2017-07-01T22:31:47Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* 8 target bins, each with a custom volume for this voice
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}{{FIXME|reason=At which COUNT does this start, at which level does this end? Where would an amplitude be stored?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
e7b0a7d46e3a007a641387195ec33d55d9f239cd
5833
5832
2017-07-01T22:38:48Z
JayFoxRox
2
/* Voice Processor (VP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this:
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}{{FIXME|reason=At which COUNT does this start, at which level does this end? Where would an amplitude be stored?}}
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope hits the zero level during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
37ce5815955ae8e1123eea1809aa484770949bcd
5834
5833
2017-07-02T13:48:14Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register is 0
** LVL is continously updated to sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at the full releaserate, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** The actual output level is probably determined like: <code>max(COUNT - LVL, 0)</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
3b414c79db6080bbfb1f329fa6c4920aaddb027f
Talk:APU
1
3807
5817
2017-07-01T14:27:38Z
JayFoxRox
2
/* Envelope COUNT register clock */ new section
wikitext
text/x-wiki
== Envelope COUNT register clock ==
In my experiments, using the longest envelopes seems to use 1500 Hz (512 / 48000 Hz).
However, when doing shorter tests it seemed more like 1600 Hz (480 / 48000 Hz).
I'm thinking that one of the COUNT register bits actually controls this.
All tests were done with HOLD and ATTACK.
0b042f05e9a6927e5024a80f49de16e6f3cdc31b
5820
5817
2017-07-01T15:26:33Z
JayFoxRox
2
Resolved, I visualized the envelope running at 1500 Hz and the buffer at 48kHz, however, the buffer was actually at 44.1kHz = my visualization was wrong
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Template:FIXME
10
3747
5822
5443
2017-07-01T15:57:11Z
JayFoxRox
2
wikitext
text/x-wiki
<sup>''[<span title="This information is incomplete and needs more work or research. {{{reason}}}">FIXME</span>]''</sup><noinclude>
==Documentation==
''<nowiki>{{FIXME}}</nowiki>''
* Tells a visitors that something is missing.
* Displays: <sup>''[<span title="This information is incomplete and needs more work or research">FIXME</span>]''</sup><noinclude>
* If you see FIXME somewhere, try to add the missing information to it
<noinclude>
[[Category:Templates|{{PAGENAME}}]]</noinclude>
8e85a91c3fbaf2431d9f14baf6176c3419b778b3
5823
5822
2017-07-01T15:58:21Z
JayFoxRox
2
wikitext
text/x-wiki
<sup>''[<span title="{{{reason|This information is incomplete and needs more work or research.}}}">FIXME</span>]''</sup><noinclude>
==Documentation==
''<nowiki>{{FIXME}}</nowiki>''
* Tells a visitors that something is missing.
* Displays: <sup>''[<span title="This information is incomplete and needs more work or research">FIXME</span>]''</sup><noinclude>
* If you see FIXME somewhere, try to add the missing information to it
<noinclude>
[[Category:Templates|{{PAGENAME}}]]</noinclude>
e356d6b5a2aacbb02ac0070aea24350ea1ca35dc
MCPX
0
3671
5829
5763
2017-07-01T20:52:23Z
Codeasm
2480
added source links, altho those arent 100% complete or correct (56K modems arent in the MCPX at all)
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
The MCPX is also the home to the secret [[MCPX ROM]].
f817e7698c6fa90f3c2891b4a798220818d1ac70
Xbe
0
3706
5835
5566
2017-07-02T21:58:44Z
Wayo
2479
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blitz Games
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR ||
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
78d4141b980a4b6648f3969d38083d88b3162477
Exploits
0
3751
5836
5721
2017-07-03T07:23:59Z
Codeasm
2480
/* Savegames */ Added the Frogger exploit (as seen in presentations) and recent addition THPS4 (grimdoomers work)
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310]
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
391af3fbad66618ba0f54669a240b3dce7bcc1a5
Xbe
0
3706
5837
5835
2017-07-03T07:32:05Z
Wayo
2479
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR ||
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
6a14218db3e0f445b7da9cf046ca611a4a223036
5842
5837
2017-07-03T16:51:48Z
Wayo
2479
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
6afc5544e8bf19c962b1a1bd0557310fceb3027e
Exploits
0
3751
5838
5836
2017-07-03T07:43:34Z
Codeasm
2480
/* Tony Hawk's Pro Skater 4 */ added grimdoomers exploit (also chat snippet I had from him.)
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
9b2f115fc0cee98f99c90c9aa4287f6830b608df
5839
5838
2017-07-03T07:44:14Z
Codeasm
2480
/* Tony Hawk's Pro Skater 4 */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
defef64838e4e6d5f731ced28dd6b62ccf45923e
5840
5839
2017-07-03T08:12:36Z
Codeasm
2480
/* Savegames */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
d5f15656dfdb4e1038c1883e41885d97efe94e20
5893
5840
2017-07-16T14:18:58Z
JayFoxRox
2
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Unsure what data it is yet (can only be dumped to AC3 but I have no AC3 / Toslink sniffer)
* APU: Untested
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is likely to be lost. However, this was not tested in praxis.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be risky as harddisk contents have to be modified for the temporary softmod.
| Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
63ad8ba4cfa778b626f56228ef41e55beff00685
Xbox Game Disc
0
3700
5841
5717
2017-07-03T12:51:46Z
Codeasm
2480
/* Dumping */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middel the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unkown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
f02a5fa1a29a27380d771d5b6ba1724b6da2e825
Talk:Microsoft XDK
1
3808
5843
2017-07-03T19:07:21Z
Codeasm
2480
Created page with "Some versions now are considered just lib versions and not xdk or kernel. further research needs to be done, ill keep this wiki in check with my new findings aswell to preven..."
wikitext
text/x-wiki
Some versions now are considered just lib versions and not xdk or kernel.
further research needs to be done, ill keep this wiki in check with my new findings aswell to prevent mistakes due my list
when I started to look into wich XDKs where leaked or a complete list of known kernels and NOT any hacked ones.
I do hope my search and my work are helpfull and any suggestions are welcome. I did get some ppl who asked to get their names removed or complete versions, but so far I managed to find proof for most versions to have excisted in some way. most are either a kernel or Lib inside an xbe.
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 12:07, 3 July 2017 (PDT)
ede6a4b695024f3da74ba81f96f30f76c3efeab9
5844
5843
2017-07-03T19:30:45Z
Codeasm
2480
5933/5911 weirdness
wikitext
text/x-wiki
== CodeAsms kernel/lib/XDK list ==
Some versions now are considered just lib versions and not xdk or kernel. I yet have to make a change to my version files to reflect wich are what.
it might else lead to people believe there where more kernels or XDK than MS officialy made (they could have iterated internaly a certain library but never builded a full SDK, kernel or Dashboard for that particular version. it became very clear my list had shortcommings making the 360 and Xbox one list.
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 12:07, 3 July 2017 (PDT)
== 5933/5911 ==
XBOX XDK 5933 is known to be leaked by WAM. there are sofar no known games wich are compiled using 5911 libs or a entire SDK unless someone comes forward with it. I did find Cxbx-reloaded to mention it on line: 1766 of Convert.h [https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/blob/master/src/CxbxKrnl/EmuD3D8/Convert.h#L1766 ] but this seemed a backport done by espes. --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 12:30, 3 July 2017 (PDT)
0722e6fd682c0e60cc90b4692dd15751cde41b2c
Microsoft XDK
0
12
5845
5242
2017-07-03T19:32:15Z
Codeasm
2480
/* List of known versions */
wikitext
text/x-wiki
The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times.
== List of known versions ==
{| class="wikitable"
! Version
! Comments
|-
! 3424
| April 2001 XDK and SDK (03.01.01 - New for April XDK release)
|-
! 3521
| May XDK 2001
|-
! 3911
| August XDK 2001 (( Final Hardware Recovery) (build on WIN2000 5. 2134/2195 ? 5.1.2258.400)(*)
|-
! 3925
| Retail? XDK(*)
|-
! 3936
| (*)
|-
! 3937
| (*)
|-
! 3941
| (*)
|-
! 3948
| (*)
|-
! 3950
| (*)
|-
! 4020
| Seen on an official Xbox recovery tool
|-
! 4034
| (*)
|-
! 4039
| (*)
|-
! 4134
| December 2001 XDK (*)
|-
! 4242
| February 2002 XDK (*)
|-
! 4361
| March 2002 XDK
|-
! 4400
| rare
|-
! 4432
| April 2002 XDK
|-
! 4531
| May 2002 XDK
|-
! 4627
| June 2002 XDK
|-
! 4721
| July 2002 XDK
|-
! 4831
| August 2002 XDK
|-
! 4928
| September 2002 XDK
|-
! 5028
| October 2002 XDK
|-
! 5120
| November 2002 XDK
|-
! 5233
| December 2002 XDK
|-
! 5344
| February 2003 XDK
|-
! 5455
| April 2003 XDK
|-
! 5558
| June 2003 XDK
|-
! 5659
| August 2003 XDK
|-
! 5788
| November 2003 XDK
|-
! 5849
| December 2003 XDK
|-
! 5849
| .16
|-
! 5933
| uncertain number - Dxbx code mentions 5911 (wich seemed incorrect)
|-
! 5960
| last official dashboard
|}
(*) : Earlier XDK's contained libraries with different versions numbers. Before or around XDK version 4361, all libraries in the XDK were given the same version number.
Note : An even more complete listing can be found here : http://codeasm.com/xbox/files/Xbox%20Kernel_Dash_XDK%20versions.txt
223737ec4fdf11b9bc85a65d17e70f6a04874a75
APU
0
3799
5846
5834
2017-07-03T20:32:17Z
JayFoxRox
2
More details
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at the full releaserate, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>max(COUNT - LVL, 0)</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
b5b6f6ed664a553e3ddcb19cb4672e3eaec4f169
5847
5846
2017-07-03T20:46:22Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at the full releaserate, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>max(COUNT - LVL, 0)</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
c45becd1027f4f2dec8bda80328e19e81f7e8d8f
5848
5847
2017-07-04T11:01:21Z
JayFoxRox
2
/* Related notes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down.
** When sustain level is reached the decay section is over
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at the full releaserate, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>max(COUNT - LVL, 0)</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
1ccfc76ff17459ee29fb3ab026a1cb57b760c396
5849
5848
2017-07-04T16:41:05Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** When sustain level is reached the decay section is over
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
7a159ede9a0547e7aa1089677c4b8eb338aa73b0
5850
5849
2017-07-04T16:42:40Z
JayFoxRox
2
/* Voice Processor (VP) */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** When sustain level is reached the decay section is over
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
cd2b4cb4e6dd71bd426df609c94b1e785f8cf271
5851
5850
2017-07-04T20:30:06Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate sections of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** When sustain level is reached the decay section is over
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this, but writes go through? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
3f0c767c718b691520ffb21c229628777bbe4927
5852
5851
2017-07-04T20:41:32Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate segments of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** The best approximation I could come up with so far is: <code>255*pow(0.99988799,(DECAYRATE*16-COUNT)*4096/DECAYRATE)</code>.
** When the output level reaches the sustain level the decay section is over (In my example above, this happens when the output level is less than 0.2 away from the sustain level; so if sustain is 0, the voice would switch to the sustain segment when a value below 0.2 is reached)
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this, but writes go through? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
be3ff82c2715361f32287d3a77c243d9e8423db6
5853
5852
2017-07-04T20:45:23Z
JayFoxRox
2
/* Envelopes */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate segments of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** The best approximation I could come up with so far is: <code>255*pow(0.99988799,(DECAYRATE*16-COUNT)*4096/DECAYRATE)</code>.
** When the output level (not LVL!) reaches the sustain level the decay section is over (In my example above, this happens when the output level is less than 0.2 away from the sustain level; so if sustain is 0, the voice would switch to the sustain segment when a value below 0.2 is reached)
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this, but writes go through? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
ba6f1309686e3fb00c5a3cc8c4bf7ad4c4528b29
5859
5853
2017-07-05T16:37:49Z
JayFoxRox
2
/* Usage in DirectSound */
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate segments of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** The best approximation I could come up with so far is: <code>255*pow(0.99988799,(DECAYRATE*16-COUNT)*4096/DECAYRATE)</code>.
** When the output level (not LVL!) reaches the sustain level the decay section is over (In my example above, this happens when the output level is less than 0.2 away from the sustain level; so if sustain is 0, the voice would switch to the sustain segment when a value below 0.2 is reached)
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this, but writes go through? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound APIs.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
073387540aea42478d50d89bbe89354a727c0046
BIOS
0
3672
5854
5723
2017-07-05T08:01:57Z
KaosEngineer
2482
Hex goes to F not 9 just a little correction 0x00 - 0x7F instead of 0x79 for unknown address range
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! Unknown
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| 0x0619C || || || || || || ||
|-
! Kernel Data Segment
| 0x3944C || || || || || || ||
|-
! 2BL <br> ''Always 0x6000 bytes''
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL <br> ''Always 0x2880 bytes''
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x00000007F
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
0dedc79b87028a0e8473c363a6ca78bdc1186dfe
5855
5854
2017-07-05T08:04:59Z
KaosEngineer
2482
8 nibbles instead of 9 for 0x0000007F Unknown region address range
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash]]. The BIOS image is actually 256KiB, duplicated 4 times to fill the 1MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! Unknown
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| 0x0619C || || || || || || ||
|-
! Kernel Data Segment
| 0x3944C || || || || || || ||
|-
! 2BL <br> ''Always 0x6000 bytes''
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL <br> ''Always 0x2880 bytes''
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x0000007F
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
216f130de0965fea4afd3131b0a55985a1a6867b
MCPX ROM
0
3670
5856
5727
2017-07-05T08:11:41Z
KaosEngineer
2482
/* MCPX 1.0 */ typo BL2 change to 2BL
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1.
1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL.
For 1.1 Microsoft switched to a TEA algorithm.
The code on the chips is largely the same, but for those two differences{{citation needed}}.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it.
See [[Exploits#MCPX|MCPX exploits]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the 2BL from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. Microsoft implemented a TEA algorithm to create a hash of the FBL and if that was correct, it would jump to 0xffffd400. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
* [https://github.com/JayFoxRox/xqemu-tools/blob/master/disassemble-mcpx.sh disassemble-mcpx.sh: A bash-script to disassemble/annotate MCPX 1.0 dumps]
3b3548ce7ae8626a271b240fbc48e1bda82cdece
5857
5856
2017-07-05T08:14:53Z
KaosEngineer
2482
/* MCPX 1.1 */ typo FBL to 2BL "...to create a hash of the FBL and if that was correct..." and jump address lower to upper case HEX.
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1.
1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL.
For 1.1 Microsoft switched to a TEA algorithm.
The code on the chips is largely the same, but for those two differences{{citation needed}}.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it.
See [[Exploits#MCPX|MCPX exploits]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the 2BL from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. Microsoft implemented a TEA algorithm to create a hash of the FBL and if that was correct, it would jump to 0xFFFFD400. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
* [https://github.com/JayFoxRox/xqemu-tools/blob/master/disassemble-mcpx.sh disassemble-mcpx.sh: A bash-script to disassemble/annotate MCPX 1.0 dumps]
ececccb1e6d7abbbdd132227cb60fe286f57d811
5858
5857
2017-07-05T10:41:48Z
JayFoxRox
2
/* References */
wikitext
text/x-wiki
The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1.
1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL.
For 1.1 Microsoft switched to a TEA algorithm.
The code on the chips is largely the same, but for those two differences{{citation needed}}.
== Dumping the MCPX ROM ==
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:
<pre>
mov eax,0x80000880
mov dx,0xcf8
out dx,eax
</pre>
This turns off the MCPX ROM, making it invisible to anything trying to read it.
See [[Exploits#MCPX|MCPX exploits]] for more details.
== MCPX Common ==
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.
== MCPX 1.0 ==
The 1.0 ROM runs an RC4 algorithm to decrypt the 2BL from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.
== MCPX 1.1 ==
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. Microsoft implemented a TEA algorithm to create a hash of the FBL and if that was correct, it would jump to 0xFFFFD400. This isn't in Memory, but rather in the BIOS. Otherwise it would error.
== Error Handling ==
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.
== See Also ==
* [[MCPX HLE]]
== References ==
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]
* [https://github.com/JayFoxRox/xbox-tools/ mcpx-tool: A bash-script to disassemble/annotate MCPX dumps]
fd243799017141e581f1709a28111a56a6aed004
User talk:KaosEngineer
3
3809
5860
2017-07-09T08:59:18Z
KaosEngineer
2482
Hard Drive Contents reformat presentation as there are a multitude of versions.
wikitext
text/x-wiki
Hard Drive Contents page.
Should this set of pages be formatted to have a main page that lists the various versions of Xbox dashboards as there are many.
The final 5960 and a lot of previous minor and major updates from the initial release on Xbox v1.0's.
I've found a list of versions at two different web sites but the content is not listed for all the HDD files.
1. http://codeasm.com/xbox/Kernel_Dash_versions.htm
2. http://toogam.bespin.org/xboxmod/site/versions.htm
Still looking for archives of all the various versions. A complete list of all files listed for each dashboard version instead of one with all the differences. The main page would list all the major/minor releases of dashboards that a user can select to see the full contents of each version.
9f488c9877a67b231b7bb31057ba7d7a80066298
5861
5860
2017-07-09T09:17:11Z
KaosEngineer
2482
wikitext
text/x-wiki
Hard Drive Contents page.
Should this set of pages be formatted to have a main page that lists the various versions of Xbox dashboards as there are many.
The final 5960 and a lot of previous minor and major updates from the initial release on Xbox v1.0's.
I've found a list of versions at two different web sites but the content is not listed for all the HDD files.
1. http://codeasm.com/xbox/Kernel_Dash_versions.htm
2. http://toogam.bespin.org/xboxmod/site/versions.htm
`Dashboard Versions
3944 (referenced)
I think this version number may not be displayed on the System Info screen under the Settings option of the dashboard's main menu.
4034 (referenced)
4817 (referenced)
1.00.4920.01 revision 10027100 (referenced)
Contains a "C:\xboxdashdata.10027100" directory
Known to be bundled with an Xbox using 4817 kernel
4920 revision 1012a700 (referenced)
Contains a "C:\xboxdashdata.1012a700" directory
Bundled with Slayer's EvoX Auto-Installer v2.5 CD which is just over 100MB large.
1.00.4960.01 w/ 17cdc100 directory
Contains a "C:\xboxdashdata.1012a700" directory
Obtained by using Dash 4920 revision 10027100 and getting an "Xbox Live!" update. The dash was updated to this version and a dialog box said the system needed to restart to obtain the latest dashboard, and then I rebooted and saw this instead of pushing OK in the dialog box and continuing to update. The following files were different:
The C:\xboxdashdata.1012a700 was renamed to C:\17cdc100
xboxdash.xbe was different (slightly larger)
Files under C:\xodash\ were updated, including the two XBE files.
None of the XBE files were dated later than August of 2003, even though I downloaded the files later. Sorry, this isn't a salvation for Kernel 5713 users.
1.00.5659.03 revision 17F14D00
I believe this came from updating using Ninja Gaiden.
1.00.5659.03 revision 17e4cd00 (referenced)
Sealed the security breaches that let old font hacks and audio hacks work. (All newer versions also will not work with the old hacks.)
5960 (referenced)
sylver77 has concluded that dashboard 4627 does not exist which is why it is never tested in any of the homebrew software. I have seen references to an XDK dashboard version 4627, so I suppose the official XDK developers have some sort of thing called the "XDK Dashboard".
Some/all of these dashboard versions were simply taken from the MS Dashboard DVD Region Free Patch compatibility list. `
Still looking for archives of all the various versions. A complete list of all files listed for each dashboard version instead of one with all the differences. The main page would list all the major/minor releases of dashboards that a user can select to see the full contents of each version.
5c8091c46d96d5c029b17d1c15876abe93de8a97
5862
5861
2017-07-09T09:18:01Z
KaosEngineer
2482
wikitext
text/x-wiki
Hard Drive Contents page.
Should this set of pages be formatted to have a main page that lists the various versions of Xbox dashboards as there are many.
The final 5960 and a lot of previous minor and major updates from the initial release on Xbox v1.0's.
I've found a list of versions at two different web sites but the content is not listed for all the HDD files.
1. http://codeasm.com/xbox/Kernel_Dash_versions.htm
2. http://toogam.bespin.org/xboxmod/site/versions.htm
`Dashboard Versions from source 2:
3944 (referenced)
I think this version number may not be displayed on the System Info screen under the Settings option of the dashboard's main menu.
4034 (referenced)
4817 (referenced)
1.00.4920.01 revision 10027100 (referenced)
Contains a "C:\xboxdashdata.10027100" directory
Known to be bundled with an Xbox using 4817 kernel
4920 revision 1012a700 (referenced)
Contains a "C:\xboxdashdata.1012a700" directory
Bundled with Slayer's EvoX Auto-Installer v2.5 CD which is just over 100MB large.
1.00.4960.01 w/ 17cdc100 directory
Contains a "C:\xboxdashdata.1012a700" directory
Obtained by using Dash 4920 revision 10027100 and getting an "Xbox Live!" update. The dash was updated to this version and a dialog box said the system needed to restart to obtain the latest dashboard, and then I rebooted and saw this instead of pushing OK in the dialog box and continuing to update. The following files were different:
The C:\xboxdashdata.1012a700 was renamed to C:\17cdc100
xboxdash.xbe was different (slightly larger)
Files under C:\xodash\ were updated, including the two XBE files.
None of the XBE files were dated later than August of 2003, even though I downloaded the files later. Sorry, this isn't a salvation for Kernel 5713 users.
1.00.5659.03 revision 17F14D00
I believe this came from updating using Ninja Gaiden.
1.00.5659.03 revision 17e4cd00 (referenced)
Sealed the security breaches that let old font hacks and audio hacks work. (All newer versions also will not work with the old hacks.)
5960 (referenced)
sylver77 has concluded that dashboard 4627 does not exist which is why it is never tested in any of the homebrew software. I have seen references to an XDK dashboard version 4627, so I suppose the official XDK developers have some sort of thing called the "XDK Dashboard".
Some/all of these dashboard versions were simply taken from the MS Dashboard DVD Region Free Patch compatibility list. `
Still looking for archives of all the various versions. A complete list of all files listed for each dashboard version instead of one with all the differences. The main page would list all the major/minor releases of dashboards that a user can select to see the full contents of each version.
cb62b0ac20c4673571c08d64ee8d44b2858dee91
5863
5862
2017-07-09T09:31:27Z
KaosEngineer
2482
wikitext
text/x-wiki
Hard Drive Contents page.
Should this set of pages be formatted to have a main page that lists the various versions of Xbox dashboards as there are many.
The final 5960 and a lot of previous minor and major updates from the initial release on Xbox v1.0's.
I've found a list of versions at two different web sites but the content is not listed for all the HDD files.
1. http://codeasm.com/xbox/Kernel_Dash_versions.htm
2. http://toogam.bespin.org/xboxmod/site/versions.htm
```Dashboard Versions from source 2: (all but 1 referenced links were on www.xbox-scene.com)
3944 (referenced)
I think this version number may not be displayed on the System Info screen under the Settings option of the dashboard's main menu.
4034 (referenced)
4817 (referenced)
1.00.4920.01 revision 10027100 (referenced)
Contains a "C:\xboxdashdata.10027100" directory
Known to be bundled with an Xbox using 4817 kernel
4920 revision 1012a700 (referenced)
Contains a "C:\xboxdashdata.1012a700" directory
Bundled with Slayer's EvoX Auto-Installer v2.5 CD which is just over 100MB large.
1.00.4960.01 w/ 17cdc100 directory
Contains a "C:\xboxdashdata.1012a700" directory
Obtained by using Dash 4920 revision 10027100 and getting an "Xbox Live!" update. The dash was updated to this version and a dialog box said the system needed to restart to obtain the latest dashboard, and then I rebooted and saw this instead of pushing OK in the dialog box and continuing to update. The following files were different:
The C:\xboxdashdata.1012a700 was renamed to C:\17cdc100
xboxdash.xbe was different (slightly larger)
Files under C:\xodash\ were updated, including the two XBE files.
None of the XBE files were dated later than August of 2003, even though I downloaded the files later. Sorry, this isn't a salvation for Kernel 5713 users.
1.00.5659.03 revision 17F14D00
I believe this came from updating using Ninja Gaiden.
1.00.5659.03 revision 17e4cd00 (referenced)
Sealed the security breaches that let old font hacks and audio hacks work. (All newer versions also will not work with the old hacks.)
5960 (referenced)
sylver77 has concluded that dashboard 4627 does not exist which is why it is never tested in any of the homebrew software. I have seen references to an XDK dashboard version 4627, so I suppose the official XDK developers have some sort of thing called the "XDK Dashboard".
Some/all of these dashboard versions were simply taken from the MS Dashboard DVD Region Free Patch compatibility list. `
Still looking for archives of all the various versions. A complete list of all files listed for each dashboard version instead of one with all the differences. The main page would list all the major/minor releases of dashboards that a user can select to see the full contents of each version.
4e23960db9b0f9ac1b4dc845ffce23a243f17748
5864
5863
2017-07-09T09:42:43Z
KaosEngineer
2482
Converted copied data from source web to markdown via MS Word paste as the links were lost in direct paste to wiki.
wikitext
text/x-wiki
Hard Drive Contents page.
Should this set of pages be formatted to have a main page that lists the various versions of Xbox dashboards as there are many.
The final 5960 and a lot of previous minor and major updates from the initial release on Xbox v1.0's.
I've found a list of versions at two different web sites but the content is not listed for all the HDD files.
1. http://codeasm.com/xbox/Kernel_Dash_versions.htm
2. http://toogam.bespin.org/xboxmod/site/versions.htm
Dashboard Versions
- 3944
([referenced](http://www.xbox-scene.org/tools/tools.php?page=xipxap#newsitemEpykEEFEAZZwfWLZRF))
- I think this version number may not be displayed on the System Info
screen under the Settings option of the dashboard's main menu.
- 4034
([referenced](http://www.xbox-scene.org/tools/tools.php?page=xipxap#newsitemEpykEEFEAZZwfWLZRF))
- 4817
([referenced](http://www.xbox-scene.org/tools/tools.php?page=xipxap#newsitemEpykEEFEAZZwfWLZRF))
- 1.00.4920.01 revision 10027100
([referenced](http://www.xbox-scene.org/tools/tools.php?page=xipxap#newsitemEpykEEFEAZZwfWLZRF))
- Contains a "C:\\xboxdashdata.10027100" directory
- Known to be bundled with an Xbox using 4817 kernel
- 4920 revision 1012a700
([referenced](http://www.xbox-scene.org/tools/tools.php?page=xipxap#newsitemEpykEEFEAZZwfWLZRF))
- Contains a "C:\\xboxdashdata.1012a700" directory
- Bundled with [Slayer's EvoX Auto-Installer
v2.5](http://www.xboxstation.com/modules.php?name=News&file=article&sid=82)
CD which is just over 100MB large.
- 1.00.4960.01 w/ 17cdc100 directory
- Contains a "C:\\xboxdashdata.1012a700" directory
- Obtained by using Dash 4920 revision 10027100 and getting an "Xbox
Live!" update. The dash was updated to this version and a dialog box
said the system needed to restart to obtain the latest dashboard, and
then I rebooted and saw this instead of pushing OK in the dialog box and
continuing to update. The following files were different:
- The C:\\xboxdashdata.1012a700 was renamed to C:\\17cdc100
- xboxdash.xbe was different (slightly larger)
- Files under C:\\xodash\\ were updated, including the two XBE files.
- None of the XBE files were dated later than August of 2003, even
though I downloaded the files later. Sorry, this isn't a salvation
for Kernel 5713 users.
- 1.00.5659.03 revision 17F14D00
- I believe this came from updating using Ninja Gaiden.
- 1.00.5659.03 revision 17e4cd00
([referenced](http://www.xbox-scene.org/tools/tools.php?page=xipxap#newsitemEpykEEFEAZZwfWLZRF))
- Sealed the security breaches that let old font hacks and audio hacks
work. (All newer versions also will not work with the old hacks.)
- 5960 ([referenced](http://forums.xbox-scene.com/index.php?showtopic=227528))
- [sylver77 has concluded that dashboard 4627 does not
exist](http://forums.xbox-scene.com/index.php?act=ST&f=40&t=96118) which is
why it is never tested in any of the homebrew software. I have seen
references to an XDK dashboard version 4627, so I suppose the official XDK
developers have some sort of thing called the "XDK Dashboard".
- Some/all of these dashboard versions were simply taken from the [MS
Dashboard DVD Region Free Patch compatibility
list](http://www.xbox-scene.org/tools/tools.php?page=xipxap#newsitemEpykEEFEAZZwfWLZRF).
(Word to Markdown plugin writage-1.11.msi from http://www.writage.com/)
ad23ded45ab81f034fc63d7ca6ee4c3b87e90359
Emulators
0
3703
5865
5713
2017-07-09T17:13:07Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|HLE
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|Unknown
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|Unknown
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|Dead
|Unknown
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|
|Windows
|
|
|-
|Dead
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|{{No}}
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|Maintained
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|[[Xbox One Backward Compatibility]]
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
6e5253652fb6d989c47a66cf2ef14b9d6413b415
5866
5865
2017-07-09T17:34:14Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|Maintained
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|Maintained
|HLE
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|Dead
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|Dead
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|Unknown
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|Unknown
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|Unknown
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|Unknown
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|Dead
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|Unknown
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|Unknown
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|Unknown
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|Maintained
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|Dead
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Windows
|
|
|-
|Dead
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|Dead
|LLE/HLE Hybrid
|{{No}}
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|Maintained
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|[[Xbox One Backward Compatibility]]
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
104051e87019f60002c8a058aeec7fdc25cd6144
5874
5866
2017-07-13T15:22:31Z
DaveX
2487
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Windows
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|[[Xbox 360 Backward Compatibility]]
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|[[Xbox One Backward Compatibility]]
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
eabe4faf9126dcc805af9aca6ddc718411f38269
Template:Unknown
10
3813
5870
2017-07-13T15:20:25Z
DaveX
2487
Created page with "<noinclude>{| class="wikitable" |- |</noinclude>style="background:#CFCFCF;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|✔ Unk..."
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#CFCFCF;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|✔ Unknown}}}<noinclude>
|}
{{documentation}}
</noinclude>
d6e8d6473a99a599d670f5912efcb243fac25b37
5890
5870
2017-07-16T13:12:08Z
DaveX
2487
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#CFCFCF;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|Unknown}}}<noinclude>
|}
{{documentation}}
</noinclude>
62367fab6d428750ff543ac66d5200a64d2b1afe
Talk:BIOS Dumping
1
3815
5875
2017-07-13T22:22:54Z
JayFoxRox
2
/* Use of the word "BIOS" is misleading */ new section
wikitext
text/x-wiki
== Use of the word "BIOS" is misleading ==
The article speaks about "BIOS" which is not very well defined term for Xbox.
It could very well be interpreted that it refers to the MCPX ROM.
We should create links to http://xboxdevwiki.net/Flash and make very clear which parts can be dumped and which parts can not be dumped
Maybe it's safer to just call this "Flash dumping" instead and just mention that some people call this "BIOS dumping"
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 15:22, 13 July 2017 (PDT)
40c5ec1b9a65bdddb5fe52ee4746e2adb4954cfa
NV2A/Vertex Shader
0
9
5876
5069
2017-07-13T23:45:52Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
!Index
!GL Name
!D3D Name
!Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
!Meaning
!Word
!Offset (bits)
!Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
!Value
!Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
=== Functional units ===
==== Inverse Logic Unit (ILU) ====
{| class="wikitable"
|+ILU Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|RCP
|-
|3
|RCC
|-
|4
|RSQ
|-
|5
|EXP
|-
|6
|LOG
|-
|7
|LIT
|}
==== Multiply-Accumulate (MAC) ====
{| class="wikitable"
|+MAC Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|MUL
|-
|3
|ADD
|-
|4
|MAD
|-
|5
|DP3
|-
|6
|DPH
|-
|7
|DP4
|-
|8
|DST
|-
|9
|MIN
|-
|10
|MAX
|-
|11
|SLT
|-
|12
|SGE
|-
|13
|ARL
|}
== Related links ==
- [https://github.com/envytools/envytools/blob/master/nvhw/pgraph_celsius_xfrm.c Code which appears to implement bit-accurate emulation of some instructions{{FIXME|reason=Unconfirmed, needs testing}}]
7c491ef33d50df4002c4912500c448e2ec519834
5877
5876
2017-07-13T23:46:11Z
JayFoxRox
2
/* Related links */
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
!Index
!GL Name
!D3D Name
!Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
!Meaning
!Word
!Offset (bits)
!Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
!Value
!Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
=== Functional units ===
==== Inverse Logic Unit (ILU) ====
{| class="wikitable"
|+ILU Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|RCP
|-
|3
|RCC
|-
|4
|RSQ
|-
|5
|EXP
|-
|6
|LOG
|-
|7
|LIT
|}
==== Multiply-Accumulate (MAC) ====
{| class="wikitable"
|+MAC Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|MUL
|-
|3
|ADD
|-
|4
|MAD
|-
|5
|DP3
|-
|6
|DPH
|-
|7
|DP4
|-
|8
|DST
|-
|9
|MIN
|-
|10
|MAX
|-
|11
|SLT
|-
|12
|SGE
|-
|13
|ARL
|}
== Related links ==
- [https://github.com/envytools/envytools/blob/master/nvhw/pgraph_celsius_xfrm.c Code which appears to implement bit-accurate emulation of some instructions]{{FIXME|reason=Unconfirmed, needs testing}}
9fc357ac6be3bfd345a856315ee51ceacf7dc20d
5878
5877
2017-07-13T23:46:38Z
JayFoxRox
2
/* Related links */
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
!Index
!GL Name
!D3D Name
!Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
!Meaning
!Word
!Offset (bits)
!Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
!Value
!Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
=== Functional units ===
==== Inverse Logic Unit (ILU) ====
{| class="wikitable"
|+ILU Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|RCP
|-
|3
|RCC
|-
|4
|RSQ
|-
|5
|EXP
|-
|6
|LOG
|-
|7
|LIT
|}
==== Multiply-Accumulate (MAC) ====
{| class="wikitable"
|+MAC Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|MUL
|-
|3
|ADD
|-
|4
|MAD
|-
|5
|DP3
|-
|6
|DPH
|-
|7
|DP4
|-
|8
|DST
|-
|9
|MIN
|-
|10
|MAX
|-
|11
|SLT
|-
|12
|SGE
|-
|13
|ARL
|}
== Related links ==
* [https://github.com/envytools/envytools/blob/master/nvhw/pgraph_celsius_xfrm.c Code which appears to implement bit-accurate emulation of some instructions]{{FIXME|reason=Unconfirmed, needs testing}}
6cdcadf23dbc18b562f38cd36482e56abcc39386
MotoGP: Ultimate Racing Technology
0
3816
5879
2017-07-14T03:29:05Z
JayFoxRox
2
Created page with "{{game}} === Related links === * https://blogs.msdn.microsoft.com/shawnhar/2009/06/03/motogp-curved-surfaces/ * http://www.gamasutra.com/view/feature/2987/tool_postmortem_cli..."
wikitext
text/x-wiki
{{game}}
=== Related links ===
* https://blogs.msdn.microsoft.com/shawnhar/2009/06/03/motogp-curved-surfaces/
* http://www.gamasutra.com/view/feature/2987/tool_postmortem_climax_brightons_.php
a37bd7bb6ef6ec4553c153a1abbd17f2b0d895b2
5880
5879
2017-07-14T22:59:55Z
JayFoxRox
2
/* Related links */
wikitext
text/x-wiki
{{game}}
=== Related links ===
* http://www.gamasutra.com/view/feature/2987/tool_postmortem_climax_brightons_.php
* http://www.shawnhargreaves.com/motogp/
* [https://blogs.msdn.microsoft.com/shawnhar/ Blog with many MotoGP posts, most from 2008-2010.] Posts marked explicitly as MotoGP (there are others too about MotoGP too):
** https://blogs.msdn.microsoft.com/shawnhar/2009/12/30/motogp-ai-coordinate-systems/
** https://blogs.msdn.microsoft.com/shawnhar/2009/06/05/motogp-lod-selection/
** https://blogs.msdn.microsoft.com/shawnhar/2009/06/04/motogp-mind-the-gap/
** https://blogs.msdn.microsoft.com/shawnhar/2009/06/03/motogp-curved-surfaces/
** https://blogs.msdn.microsoft.com/shawnhar/2009/06/02/motogp-the-price-is-right/
** https://blogs.msdn.microsoft.com/shawnhar/2009/05/05/motogp-debug-cameras/
** https://blogs.msdn.microsoft.com/shawnhar/2009/05/04/motogp-run-slow-step-step-stop/
** https://blogs.msdn.microsoft.com/shawnhar/2009/05/01/motogp-tweakables/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/10/motogp-lightning-flashes/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/01/motogp-wet-weather-effects/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/02/motogp-cloudy-with-poor-visibility/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/07/motogp-spray-and-wakes/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/17/motogp-road-reflections/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/13/motogp-raindrops-keep-falling-on-my-lens/
** https://blogs.msdn.microsoft.com/shawnhar/2009/03/20/motogp-replays/
** https://blogs.msdn.microsoft.com/shawnhar/2009/03/13/motogp-skidmarks/
** https://blogs.msdn.microsoft.com/shawnhar/2009/03/02/motogp-custom-paint-jobs/
** https://blogs.msdn.microsoft.com/shawnhar/2009/02/27/motogp-localization/
** https://blogs.msdn.microsoft.com/shawnhar/2009/02/17/motogp-particles/
** https://blogs.msdn.microsoft.com/shawnhar/2009/02/04/motogp-the-power-of-blu-tack/
** https://blogs.msdn.microsoft.com/shawnhar/2009/01/30/motogp-crash-camera/
** https://blogs.msdn.microsoft.com/shawnhar/2009/01/29/motogp-bike-damage/
** https://blogs.msdn.microsoft.com/shawnhar/2009/01/29/motogp-the-sun/
0f218fccfa0eaa55d038c80701b869498bb8ec2f
5881
5880
2017-07-15T12:56:20Z
JayFoxRox
2
/* Related links */
wikitext
text/x-wiki
{{game}}
=== Related links ===
* http://www.gamasutra.com/view/feature/2987/tool_postmortem_climax_brightons_.php
* http://www.shawnhargreaves.com/motogp/
* [https://blogs.msdn.microsoft.com/shawnhar/ Blog with many MotoGP posts, most from 2008-2010.] Posts marked explicitly as MotoGP (there are others about MotoGP too):
** https://blogs.msdn.microsoft.com/shawnhar/2009/12/30/motogp-ai-coordinate-systems/
** https://blogs.msdn.microsoft.com/shawnhar/2009/06/05/motogp-lod-selection/
** https://blogs.msdn.microsoft.com/shawnhar/2009/06/04/motogp-mind-the-gap/
** https://blogs.msdn.microsoft.com/shawnhar/2009/06/03/motogp-curved-surfaces/
** https://blogs.msdn.microsoft.com/shawnhar/2009/06/02/motogp-the-price-is-right/
** https://blogs.msdn.microsoft.com/shawnhar/2009/05/05/motogp-debug-cameras/
** https://blogs.msdn.microsoft.com/shawnhar/2009/05/04/motogp-run-slow-step-step-stop/
** https://blogs.msdn.microsoft.com/shawnhar/2009/05/01/motogp-tweakables/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/10/motogp-lightning-flashes/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/01/motogp-wet-weather-effects/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/02/motogp-cloudy-with-poor-visibility/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/07/motogp-spray-and-wakes/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/17/motogp-road-reflections/
** https://blogs.msdn.microsoft.com/shawnhar/2009/04/13/motogp-raindrops-keep-falling-on-my-lens/
** https://blogs.msdn.microsoft.com/shawnhar/2009/03/20/motogp-replays/
** https://blogs.msdn.microsoft.com/shawnhar/2009/03/13/motogp-skidmarks/
** https://blogs.msdn.microsoft.com/shawnhar/2009/03/02/motogp-custom-paint-jobs/
** https://blogs.msdn.microsoft.com/shawnhar/2009/02/27/motogp-localization/
** https://blogs.msdn.microsoft.com/shawnhar/2009/02/17/motogp-particles/
** https://blogs.msdn.microsoft.com/shawnhar/2009/02/04/motogp-the-power-of-blu-tack/
** https://blogs.msdn.microsoft.com/shawnhar/2009/01/30/motogp-crash-camera/
** https://blogs.msdn.microsoft.com/shawnhar/2009/01/29/motogp-bike-damage/
** https://blogs.msdn.microsoft.com/shawnhar/2009/01/29/motogp-the-sun/
42c766b0610e8e7a58df435bc3e2e548f20dc00c
AV Cables
0
3817
5882
2017-07-15T18:26:46Z
JayFoxRox
2
Created page with "Microsoft released a handful of AV packs for the Xbox. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console. == Connector == {{F..."
wikitext
text/x-wiki
Microsoft released a handful of AV packs for the Xbox. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
{| class="wikitable"
! Pin || Description
|-
| 1 || Audio Right
|-
| 2 || Audio Right GND
|-
| 3 || SPDIF Digital Audio
|-
| 4 || V-Sync (VGA Mode)
|-
| 5 || Mode GND
|-
| 6 || Mode GND
|-
| 7 || Mode GND
|-
| 8 || GND
|-
| 9 || Variable
|-
| 10 || Pin 9 GND
|-
| 11 || Variable
|-
| 12 || Pin 11 GND
|}
{| class="wikitable"
! Pin || Description
|-
| 13 || Vcc
|-
| 14 || Audio Left
|-
| 15 || Audio Left GND
|-
| 16 || H Sync (VGA Mode)
|-
| 17 || Mode Select 1
|-
| 18 || Mode Select 2
|-
| 19 || Mode Select 3
|-
| 20 || +12V
|-
| 21 || Pin 22 GND
|-
| 22 || Variable
|-
| 23 || Pin 24 GND
|-
| 24 || Variable
|}
{{FIXME|reason=Show tables side by side?}}
== Supported signals / AV cables ==
Below is a table which lists all known officially AV cables released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! 19 || 18 || 17 || Official Microsoft product name || Signal || 24 || 22 || 11 || 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || Advanced SCART Cable || SCART (15 kHz RGB) || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || High Definition AV Pack || Component || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || ''Not officially available / supported'' || VGA (31 kHz RGB) || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || RF Adapter || NTSC Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || Advanced AV Pack || PAL Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || ''Not officially available / supported'' || PAL/Secam Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || Standard AV Cable || NTSC Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || ''No cable connected'' || - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation-needed|reason=Are these still connected to Vcc maybe?}}
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm List of signals and pinout]
1b89800324bc5bd2592d21bae3748faa57c79605
5884
5882
2017-07-15T18:29:54Z
JayFoxRox
2
/* Supported signals / AV cables */
wikitext
text/x-wiki
Microsoft released a handful of AV packs for the Xbox. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
{| class="wikitable"
! Pin || Description
|-
| 1 || Audio Right
|-
| 2 || Audio Right GND
|-
| 3 || SPDIF Digital Audio
|-
| 4 || V-Sync (VGA Mode)
|-
| 5 || Mode GND
|-
| 6 || Mode GND
|-
| 7 || Mode GND
|-
| 8 || GND
|-
| 9 || Variable
|-
| 10 || Pin 9 GND
|-
| 11 || Variable
|-
| 12 || Pin 11 GND
|}
{| class="wikitable"
! Pin || Description
|-
| 13 || Vcc
|-
| 14 || Audio Left
|-
| 15 || Audio Left GND
|-
| 16 || H Sync (VGA Mode)
|-
| 17 || Mode Select 1
|-
| 18 || Mode Select 2
|-
| 19 || Mode Select 3
|-
| 20 || +12V
|-
| 21 || Pin 22 GND
|-
| 22 || Variable
|-
| 23 || Pin 24 GND
|-
| 24 || Variable
|}
{{FIXME|reason=Show tables side by side?}}
== Supported signals / AV cables ==
Below is a table which lists all known officially AV cables released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! 19 || 18 || 17 || SMC Constant || Official Microsoft product name || Signal || 24 || 22 || 11 || 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || Advanced SCART Cable || SCART (15 kHz RGB) || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || High Definition AV Pack || Component || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || ''Not officially available / supported'' || VGA (31 kHz RGB) || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || RF Adapter || NTSC Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || Advanced AV Pack || PAL Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || ''Not officially available / supported'' || PAL/Secam Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || Standard AV Cable || NTSC Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || ''No cable connected'' || - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation-needed|reason=Are these still connected to Vcc maybe?}}
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm List of signals and pinout]
ace6817bf67010bcc9a47407e02bb0cb16b4e444
5885
5884
2017-07-15T19:37:21Z
JayFoxRox
2
/* Supported signals / AV cables */
wikitext
text/x-wiki
Microsoft released a handful of AV packs for the Xbox. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
{| class="wikitable"
! Pin || Description
|-
| 1 || Audio Right
|-
| 2 || Audio Right GND
|-
| 3 || SPDIF Digital Audio
|-
| 4 || V-Sync (VGA Mode)
|-
| 5 || Mode GND
|-
| 6 || Mode GND
|-
| 7 || Mode GND
|-
| 8 || GND
|-
| 9 || Variable
|-
| 10 || Pin 9 GND
|-
| 11 || Variable
|-
| 12 || Pin 11 GND
|}
{| class="wikitable"
! Pin || Description
|-
| 13 || Vcc
|-
| 14 || Audio Left
|-
| 15 || Audio Left GND
|-
| 16 || H Sync (VGA Mode)
|-
| 17 || Mode Select 1
|-
| 18 || Mode Select 2
|-
| 19 || Mode Select 3
|-
| 20 || +12V
|-
| 21 || Pin 22 GND
|-
| 22 || Variable
|-
| 23 || Pin 24 GND
|-
| 24 || Variable
|}
{{FIXME|reason=Show tables side by side?}}
== Supported signals / AV cables ==
Below is a table which lists all known officially AV cables released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! 19 || 18 || 17 || SMC Constant || Region || Official Microsoft product name
! Signal || 24 || 22 || 11 || 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || PAL || [https://web.archive.org/web/20040216131316/http://www.xbox.com:80/en-gb/hardware/scartcable.htm Advanced SCART Cable]
| SCART (15 kHz RGB) Stereo || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || NTSC || [https://web.archive.org/web/20040210040422/http://www.xbox.com:80/en-US/hardware/highdefinitionavpack.htm High Definition AV Pack]
| Component SPDIF || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || - || ''Not officially available / supported''
| VGA (31 kHz RGB) Stereo || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || NTSC / PAL || [https://web.archive.org/web/20040319001330/http://www.xbox.com:80/en-us/hardware/rfadapter.htm RF Adapter]
| RF Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || NTSC || [https://web.archive.org/web/20040319001247/http://www.xbox.com:80/en-us/hardware/advancedavpack.htm Advanced AV Pack]
| S-Video Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || PAL / SECAM || ''Not officially available / supported''
| RF Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || PAL || [https://web.archive.org/web/20040216130745/http://www.xbox.com:80/en-gb/hardware/avcable.htm Standard AV Cable]
| Composite Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || - || ''No cable connected''
| - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation needed|reason=Are these still connected to Vcc maybe?}}
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm List of signals and pinout]
9347f49cd491001c4ec970afa2fbf36b0dfda3c6
5886
5885
2017-07-15T19:44:47Z
JayFoxRox
2
/* Supported signals / AV cables */
wikitext
text/x-wiki
Microsoft released a handful of AV packs for the Xbox. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
{| class="wikitable"
! Pin || Description
|-
| 1 || Audio Right
|-
| 2 || Audio Right GND
|-
| 3 || SPDIF Digital Audio
|-
| 4 || V-Sync (VGA Mode)
|-
| 5 || Mode GND
|-
| 6 || Mode GND
|-
| 7 || Mode GND
|-
| 8 || GND
|-
| 9 || Variable
|-
| 10 || Pin 9 GND
|-
| 11 || Variable
|-
| 12 || Pin 11 GND
|}
{| class="wikitable"
! Pin || Description
|-
| 13 || Vcc
|-
| 14 || Audio Left
|-
| 15 || Audio Left GND
|-
| 16 || H Sync (VGA Mode)
|-
| 17 || Mode Select 1
|-
| 18 || Mode Select 2
|-
| 19 || Mode Select 3
|-
| 20 || +12V
|-
| 21 || Pin 22 GND
|-
| 22 || Variable
|-
| 23 || Pin 24 GND
|-
| 24 || Variable
|}
{{FIXME|reason=Show tables side by side?}}
== Supported signals / AV cables ==
Below is a table which lists all known officially AV cables released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! 19 || 18 || 17 || SMC Constant || Region || Official Microsoft product name
! Signal || 24 || 22 || 11 || 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || PAL || [https://web.archive.org/web/20040216131316/http://www.xbox.com:80/en-gb/hardware/scartcable.htm Advanced SCART Cable]
| SCART (15 kHz RGB) Stereo || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || NTSC || [https://web.archive.org/web/20040210040422/http://www.xbox.com:80/en-US/hardware/highdefinitionavpack.htm High Definition AV Pack]
| Component SPDIF || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || - || ''Not officially available / supported''
| VGA (31 kHz RGB) Stereo || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || NTSC / PAL || [https://web.archive.org/web/20040319001330/http://www.xbox.com:80/en-us/hardware/rfadapter.htm RF Adapter]
| RF Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || NTSC || [https://web.archive.org/web/20040319001247/http://www.xbox.com:80/en-us/hardware/advancedavpack.htm Advanced AV Pack]
| S-Video Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || PAL / SECAM || ''Not officially available / supported''
| RF Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || PAL || [https://web.archive.org/web/20040216130745/http://www.xbox.com:80/en-gb/hardware/avcable.htm Standard AV Cable]
| Composite Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || - || ''No cable connected''
| - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation needed|reason=Are these still connected to Vcc maybe?}}
The region only identifies which territory the cable was originally available / intended for. The kernel still might support other video-standards (PAL / NTSC / SECAM) using the same cable.
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm List of signals and pinout]
002703e3b520774c5948fe66d8192fd0705a6db4
5887
5886
2017-07-15T20:03:58Z
JayFoxRox
2
/* Supported signals / AV cables */
wikitext
text/x-wiki
Microsoft released a handful of AV packs for the Xbox. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
{| class="wikitable"
! Pin || Description
|-
| 1 || Audio Right
|-
| 2 || Audio Right GND
|-
| 3 || SPDIF Digital Audio
|-
| 4 || V-Sync (VGA Mode)
|-
| 5 || Mode GND
|-
| 6 || Mode GND
|-
| 7 || Mode GND
|-
| 8 || GND
|-
| 9 || Variable
|-
| 10 || Pin 9 GND
|-
| 11 || Variable
|-
| 12 || Pin 11 GND
|}
{| class="wikitable"
! Pin || Description
|-
| 13 || Vcc
|-
| 14 || Audio Left
|-
| 15 || Audio Left GND
|-
| 16 || H Sync (VGA Mode)
|-
| 17 || Mode Select 1
|-
| 18 || Mode Select 2
|-
| 19 || Mode Select 3
|-
| 20 || +12V
|-
| 21 || Pin 22 GND
|-
| 22 || Variable
|-
| 23 || Pin 24 GND
|-
| 24 || Variable
|}
{{FIXME|reason=Show tables side by side?}}
== Supported signals / AV cables ==
Below is a table which lists all known officially AV cables released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! 19 || 18 || 17 || SMC Constant || Region || Official Microsoft product name
! Signal || 24 || 22 || 11 || 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || PAL || [https://web.archive.org/web/20040216131316/http://www.xbox.com:80/en-gb/hardware/scartcable.htm Advanced SCART Cable]
| SCART (15 kHz RGB) Stereo || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || NTSC || [https://web.archive.org/web/20040210040422/http://www.xbox.com:80/en-US/hardware/highdefinitionavpack.htm High Definition AV Pack]
| Component SPDIF || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || - || ''Not officially available / supported''
| VGA (31 kHz RGB) Stereo || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || NTSC / PAL || [https://web.archive.org/web/20040319001330/http://www.xbox.com:80/en-us/hardware/rfadapter.htm RF Adapter]
| RF Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || NTSC || [https://web.archive.org/web/20040319001247/http://www.xbox.com:80/en-us/hardware/advancedavpack.htm Advanced AV Pack]
| S-Video Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || PAL / SECAM || ''Not officially available / supported''
| RF Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || PAL || [https://web.archive.org/web/20040216130745/http://www.xbox.com:80/en-gb/hardware/avcable.htm Standard AV Cable]
| Composite Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || - || ''No cable connected''
| - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation needed|reason=Are these still connected to Vcc maybe?}}
The region only identifies which territory the cable was originally available / intended for. The kernel still might support other video-standards (NTSC / PAL / SECAM) using the same cable.
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm List of signals and pinout]
1094e010a43610fc754e4f2a1923a39c46cf3954
Main Page
0
1
5883
5732
2017-07-15T18:27:20Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[DVD-IR Internals]]
* [[Power Supply]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
bf2816a93d327b1cf9ae823e73efca58b185d092
XQEMU
0
3695
5888
5189
2017-07-16T01:13:56Z
JayFoxRox
2
wikitext
text/x-wiki
xqemu is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes[https://github.com/espes/xqemu/commit/d823f5802e7c4c84163aea8b4d924044951c705e].
The official homepage can be found at [http://xqemu.com xqemu.com]
== Compatiblity list ==
The following list was almost entirely created by [https://www.youtube.com/user/pcmaker2 pcmaker (also known as John Godgames)] around 2015.
Meaning of the status fields:
{| class="wikitable"
!Status
!Meaning
|-
|Nothing
|Not showing anything due to error
|-
|Intro
|Shows something as Intro / Menu
|-
|Ingame
|Ingame (Graphical bugs)
|-
|Playable*
|Partially playable or expected to be fully playable but not tested completly yet
|-
|Playable
|Partially playable / Fully playable
|}
{{:XQEMU/Compatibility List}}
== XQEMU-JFR ==
XQEMU-JFR is a now defunct fork of XQEMU by JayFoxRox.
Most of the changes have since been integrated back into the official version of XQEMU.
The archived version can be found at https://github.com/JayFoxRox/xqemu-jfr
eb67875379c72e82071579458c227874724cb02b
Power Supply
0
3818
5891
2017-07-16T13:23:59Z
JayFoxRox
2
Created page with "It's a delta electronics power{{citation needed}} == Connector pinout == === Xbox 1.0 and 1.1 === {| class="wikitable" ! Pin || Usage |- | Pin 1 || +12V |- | Pin 2 || +5V |..."
wikitext
text/x-wiki
It's a delta electronics power{{citation needed}}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
cd44d23718851d560ca897d8a6a3f2938c38d03b
Talk:Power Supply
1
3819
5892
2017-07-16T14:04:43Z
Codeasm
2480
Created page with "There are pinout pictures for some difernet xbox psu, but wich ones where actualy shipped from MS factories? maybe they where used in refurbed xboxes? Delta is somewhat realy..."
wikitext
text/x-wiki
There are pinout pictures for some difernet xbox psu, but wich ones where actualy shipped from MS factories?
maybe they where used in refurbed xboxes? Delta is somewhat realy confirmed to be a Shipped psu for most generations but whatabout
== Foxlink ==
Found in PSU replacement shops and pinout pages, but did they come within stock xboxes?
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 07:04, 16 July 2017 (PDT)
abf72e7bf29e57c991d30bad93657b3062abeeb0
Main Page
0
1
5894
5883
2017-07-16T14:32:11Z
JayFoxRox
2
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[DVD-IR Internals]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
0eeaa2250c8ad9cb2fbc875f525391fbfc5046ba
5908
5894
2017-07-16T16:13:59Z
Codeasm
2480
/* Development Kits and Tools */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[DVD-IR Internals]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* Find random stuff in [[Resources]]
0c28f8406f620dc8b0b3806425f1b7b3e0a1dca4
5938
5908
2017-07-31T07:35:44Z
Haxar
2485
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[DVD-IR Internals]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
db9344913150fae2bf8be13cba42e4c8614ff77f
Super I/O
0
3820
5895
2017-07-16T14:36:39Z
JayFoxRox
2
Dummy page
wikitext
text/x-wiki
The Super I/O board is a feature of [[Development Kits]]. The board is build around a SMSC LPC47M157 chip. A datasheet for a close relative can be found at http://datasheet.seekic.com/PdfFile/LPC/LPC47M140NC_SMSC_SMSC_Corporation.pdf
The board provides the following ports:
* {{FIXME|reason=someone should add this}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
8fcff959938dae504d932f51debcf34e944bfb60
5902
5895
2017-07-16T15:20:01Z
Codeasm
2480
Added some rumoured details of the serial IO board
wikitext
text/x-wiki
The Super I/O board is a feature of [[Development Kits]]. The board is build around a SMSC LPC47M157 chip. A datasheet for a close relative can be found at http://datasheet.seekic.com/PdfFile/LPC/LPC47M140NC_SMSC_SMSC_Corporation.pdf (a working link seems to be: http://pdf-file.ic37.com/pdf1/SMSC/LPC47M140_datasheet_138298/225601/LPC47M140_datasheet.pdf)
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not the same as [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS2 mouse and keyboard{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flashrom bios (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
aa90bb7475dbb134e686ce1503f2c8081cae9fb9
5905
5902
2017-07-16T15:38:32Z
JayFoxRox
2
wiki keeps a history = can just replace links + reworded
wikitext
text/x-wiki
The Super I/O board is a feature of [[Development Kits]]. The board is build around a SMSC LPC47M157 chip. A datasheet for a close relative can be found at http://pdf-file.ic37.com/pdf1/SMSC/LPC47M140_datasheet_138298/225601/LPC47M140_datasheet.pdf
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
08fefa9f573fa6d5c2f9766103ce2351e23e5756
DVD Emulator
0
3821
5896
2017-07-16T14:37:59Z
JayFoxRox
2
Created page with "The DVD emulator is a feature of [[Development Kits]]. {{FIXME|reason=Describe the purpose}} [http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact..."
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
{{FIXME|reason=Describe the purpose}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
5fdffe4c59b6e4c734b01b893e5d9e38f9392bb2
5907
5896
2017-07-16T16:12:11Z
Codeasm
2480
first draft of text
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding witch files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and posibly potencial faults that could occur.
The Hardware required for this where a Developement kit (with the DVD emulation board) a sort of scsi cable and a XDK-Raptor card.{{citation needed}}
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
For development it wasnt the fastest way to get an executable to the xbox, and for homebrew its pretty useless.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
b096f276d5de3ed0cd72fb509295c596e9683ef4
Talk:Power Supply
1
3819
5897
5892
2017-07-16T14:56:26Z
Codeasm
2480
/* Foxlink */
wikitext
text/x-wiki
There are pinout pictures for some difernet xbox psu, but wich ones where actualy shipped from MS factories?
maybe they where used in refurbed xboxes? Delta is somewhat realy confirmed to be a Shipped psu for most generations but whatabout
== Foxlink ==
Found in PSU replacement shops and pinout pages, but did they come within stock xboxes?
Found 3 in my xboxes that where secondhand, too often for being just replacements I gues.
''Model: FTPS-0002'' 96Watt
a Rev B, and Rev H
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 07:04, 16 July 2017 (PDT)
98191a25e9827825feb86cefbe42f8dc26c858cb
5898
5897
2017-07-16T15:01:51Z
Codeasm
2480
/* Foxlink */
wikitext
text/x-wiki
There are pinout pictures for some difernet xbox psu, but wich ones where actualy shipped from MS factories?
maybe they where used in refurbed xboxes? Delta is somewhat realy confirmed to be a Shipped psu for most generations but whatabout
== Foxlink ==
Found in PSU replacement shops and pinout pages, but did they come within stock xboxes?
Found 3 in my PAL, 220 volt xboxes that where secondhand, too often for being just replacements I gues.
''Model: FTPS-0002'' 96Watt
a Rev B, and Rev H (all 3 where in 220 pal xboxes)
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 07:04, 16 July 2017 (PDT)
57f8623df96b07c54f19ef0578339de347335f92
Hardware Revisions
0
3669
5899
5648
2017-07-16T15:03:43Z
Codeasm
2480
wikitext
text/x-wiki
There are 7{{citation needed|reason=What about debug kits? mcpx revisions? RAM changes? .. should we even try to count?}}retail Xbox revisions
== 1.0 ==
* Made in Hungary
* USB controller is on a separate PCB
* GPU has a fan on the heat sink
* MCPX 1.0 ROM
* Thomson DVD Drive
* Seagate Hard Drive
* Conexant [[Video Encoder]]
== 1.1 ==
Same as 1.0, except:
* Made in Hungary or Mexico
* USB controller moved onto the motherboard
* Fan removed from the GPU heat sink
* MCPX 1.1 ROM
== 1.2 ==
Same as 1.1, except:
* Made in China
* Philips DVD Drive
* Western Digital Hard Drive
== 1.3 ==
Same as 1.2, except:
* Samsung DVD Drive
* Seagate Hard Drive
== 1.4 ==
Same as 1.3, except:
* Western Digital Hard Drive
* Focus video chip
== 1.5 ==
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== 1.6 ==
Same as 1.4, except:
* Made in China or Taiwan
* Removed data and power lines from LPC port
* Xcalibur video chip
* Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
Microsoft later switched to lower quality Hynix RAM.
These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
e48b6093bed8a71eeb3610834d1e6d3461bd4d49
Power Supply
0
3818
5900
5891
2017-07-16T15:05:24Z
Obcd
2489
wikitext
text/x-wiki
It's a delta electronics power{{citation needed}}
On a 1.0 xbox supply, there seems to be 2 types for the US 120V and EU 240V market.
The marks are on the PCB with a check next to them
DPSN-96-AP-1 should be the EU 240V one
DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V
it also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check
if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
3V3 Standby 0.075A
3V3 4.8A
5V 13.2A
12V 1.2A
A pc ATX supply needs a line pulled to GND to turn on the supply. The xbox supply needs a voltage (3V3?) on it's power on line to turn the supply on.
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
c10f00cfe1da7c8eea2abb26f1f3d5f0eb3efa53
5901
5900
2017-07-16T15:09:15Z
Codeasm
2480
foxlinks love
wikitext
text/x-wiki
It's either a delta electronics power supply or foxlink{{citation needed}}
On a 1.0 xbox supply, there seems to be 2 types for the US 120V and EU 240V market.
The marks are on the PCB with a check next to them
DPSN-96-AP-1 should be the EU 240V one
DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V
it also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check
if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
3V3 Standby 0.075A
3V3 4.8A
5V 13.2A
12V 1.2A
A pc ATX supply needs a line pulled to GND to turn on the supply. The xbox supply needs a voltage (3V3?) on it's power on line to turn the supply on.
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
b055b2bdb9f80ab1db0649518f2faa1a1246f192
5903
5901
2017-07-16T15:32:42Z
JayFoxRox
2
Removed sentence about PC ATX + reworded
wikitext
text/x-wiki
It's either a delta electronics power supply or foxlink{{citation needed}}
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall?}} types for the US 120V and EU 240V market.
The marks are on the PCB with a check next to them:
* DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
06d18853397eae0a4a600307ac393c680ac356ec
5904
5903
2017-07-16T15:34:33Z
JayFoxRox
2
Be more precise about manufacturers
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall?}} types for the US 120V and EU 240V market.
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
941fb6361e10c1783972828b3d229f7067d16e70
5925
5904
2017-07-18T13:11:18Z
Codeasm
2480
Foxlink details I found, also Minebea and
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {citation needed} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {citation needed} (240V)
* MODEL: FTPS-0007 REV:B {citation needed} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {citation needed} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
According to an older Xbox-scene article, Foxlink powersupplies tend to have a bad powerplug connector on the back and where installed in 1.0 and 1.1 xboxes.{citation needed}{citation needed}. Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
=== Samsung "TUSCANNY ===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===TUSCANY
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
32d068bac925bca3b0c9483270621fdc8c186c2e
5926
5925
2017-07-18T13:13:29Z
Codeasm
2480
/* Samsung "TUSCANY */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {citation needed} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {citation needed} (240V)
* MODEL: FTPS-0007 REV:B {citation needed} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {citation needed} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
According to an older Xbox-scene article, Foxlink powersupplies tend to have a bad powerplug connector on the back and where installed in 1.0 and 1.1 xboxes.{citation needed}{citation needed}. Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
=== Samsung "TUSCANy"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===TUSCANY
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
073ac5d247e1e9b933b43d8ee6841776028b2418
5927
5926
2017-07-18T13:13:53Z
Codeasm
2480
/* Samsung "TUSCANy" */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {citation needed} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {citation needed} (240V)
* MODEL: FTPS-0007 REV:B {citation needed} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {citation needed} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
According to an older Xbox-scene article, Foxlink powersupplies tend to have a bad powerplug connector on the back and where installed in 1.0 and 1.1 xboxes.{citation needed}{citation needed}. Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===TUSCANY
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
51bdf7d3fb5f1061e5d9082b77e5447334a29895
5928
5927
2017-07-18T13:35:49Z
Codeasm
2480
/* power cord recall */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {citation needed} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {citation needed} (240V)
* MODEL: FTPS-0007 REV:B {citation needed} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {citation needed} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what apeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 xboxes.{citation needed}.
'''Does my console require a replacement cord?'''
If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.
source: [https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7 Xbox powercord recall program faq]
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===TUSCANY
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
f5e3da40f52cca803bd9094c2031235ece8482ad
5929
5928
2017-07-18T13:38:44Z
Codeasm
2480
/* Connector pinout */ woops, fixed me copy error
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {citation needed} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {citation needed} (240V)
* MODEL: FTPS-0007 REV:B {citation needed} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {citation needed} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what apeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 xboxes.{citation needed}.
'''Does my console require a replacement cord?'''
If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.
source: [https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7 Xbox powercord recall program faq]
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
1f15d9940d8c261279e499ee8a351610b6f0718b
5930
5929
2017-07-18T13:41:41Z
Codeasm
2480
/* power cord recall */ yt
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {citation needed} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {citation needed} (240V)
* MODEL: FTPS-0007 REV:B {citation needed} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {citation needed} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what apeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 xboxes.{citation needed}.
'''Does my console require a replacement cord?'''
If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.
source: [https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7 Xbox powercord recall program faq]
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
An more in detail video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
8ffba186e6b56d70859fbec056c2c0ea0f560b04
Development Kits
0
3822
5906
2017-07-16T16:00:40Z
Codeasm
2480
Alpha and devkits added, hope my gramar and such is fine. correct me if wrong please
wikitext
text/x-wiki
There are a few hardware diferences and software diferences between development kits, but generaly the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are diferences internaly from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the developement kits and debugkits.
Some rare boards are found with diferent MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unkown port) its been rumoured that the blocked USB port (unblocked on DVT3) on the back of Developement kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel. consisting of:
=== Alpha I ===
* Intel VC820, running a prerelease Bios
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforece3 NV20 prerelease hardware? {{FIXME| What hardware was this one? or was it just the firmware that got upgraded?}}
* An OPTI 82C861 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
These where then programmed by use of a recovery disk that "recovered"
=== Apha II ===
The Alpha II was a upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN{{FIXME|SL3XN for sure in true alpha?}}
* Nvidia Geforce3 NV20 (64MB ram) with a Preretail firmware
An supplied Recovery made the nececairy firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha/
Same hardware as a Alpha I/II, but you dont seem to need the preretail firmwares or bioses.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out suboard isnt nececairy, as VGA seems to work fine. color or diferent kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).
All functions a debug with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
e13007ad19a2d3c5a91c2b6be70c9d9454802e65
5940
5906
2017-08-08T15:25:24Z
Codeasm
2480
/* Franken Alpha */ Kernel error solutions
wikitext
text/x-wiki
There are a few hardware diferences and software diferences between development kits, but generaly the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are diferences internaly from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the developement kits and debugkits.
Some rare boards are found with diferent MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unkown port) its been rumoured that the blocked USB port (unblocked on DVT3) on the back of Developement kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel. consisting of:
=== Alpha I ===
* Intel VC820, running a prerelease Bios
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforece3 NV20 prerelease hardware? {{FIXME| What hardware was this one? or was it just the firmware that got upgraded?}}
* An OPTI 82C861 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
These where then programmed by use of a recovery disk that "recovered"
=== Apha II ===
The Alpha II was a upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN{{FIXME|SL3XN for sure in true alpha?}}
* Nvidia Geforce3 NV20 (64MB ram) with a Preretail firmware
An supplied Recovery made the nececairy firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha/
Same hardware as a Alpha I/II, but you dont seem to need the preretail firmwares or bioses.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out suboard isnt nececairy, as VGA seems to work fine. color or diferent kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha ====
'''IDEX: hard disk not configured (status=51).'''
HDD too small
'''IDEX: hard disk not configured (status=ff).'''
HDD on the wrong bus, put on primairy channel.
(maybe wrong place on the cable itself)
'''IDEX: hard disk not found (status=7f).'''
HDD not connected
'''MP: No video output because you are using an older video card.'''
Well, insert a Geforce3 card (NV20 based)
'''WRN[XNET]: EnetInitialize failed: 0x801f0001'''
Logo loads, with a halt when the sparkly bit is on the B of Xbox.
The network card is missing, insert a GD82559 based intel network card
FCC: EJMNPDALBANY (worked for me)
'''[XNET]: NicExecuteActionCmdAndWait failed!
WRN[XNET]: EnetInitialize failed: 0x801f0001'''
Network on wrong pci lane or no screen
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas or only for my particular motherboard
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).
All functions a debug with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
24dc46c04c576bf0d664ec208acebe260dcb48f3
5941
5940
2017-08-08T16:25:32Z
Codeasm
2480
/* Posible solutions on fixing a (franken) alpha */ formating
wikitext
text/x-wiki
There are a few hardware diferences and software diferences between development kits, but generaly the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are diferences internaly from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the developement kits and debugkits.
Some rare boards are found with diferent MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unkown port) its been rumoured that the blocked USB port (unblocked on DVT3) on the back of Developement kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel. consisting of:
=== Alpha I ===
* Intel VC820, running a prerelease Bios
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforece3 NV20 prerelease hardware? {{FIXME| What hardware was this one? or was it just the firmware that got upgraded?}}
* An OPTI 82C861 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
These where then programmed by use of a recovery disk that "recovered"
=== Apha II ===
The Alpha II was a upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN{{FIXME|SL3XN for sure in true alpha?}}
* Nvidia Geforce3 NV20 (64MB ram) with a Preretail firmware
An supplied Recovery made the nececairy firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha/
Same hardware as a Alpha I/II, but you dont seem to need the preretail firmwares or bioses.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out suboard isnt nececairy, as VGA seems to work fine. color or diferent kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while on purpose incorrectly installed or configured the computer.
These results may vary with official parts, configs, bios or firmware. Or due to diferences in hardware.
these are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primairy channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas or only for the particular motherboard that was under test.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).
All functions a debug with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
f7393b75d1f21e7270182d4aeabdd5931bbfaec3
5942
5941
2017-08-08T16:48:38Z
Codeasm
2480
/* Posible solutions on fixing a (franken) alpha(2) */
wikitext
text/x-wiki
There are a few hardware diferences and software diferences between development kits, but generaly the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are diferences internaly from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the developement kits and debugkits.
Some rare boards are found with diferent MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unkown port) its been rumoured that the blocked USB port (unblocked on DVT3) on the back of Developement kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel. consisting of:
=== Alpha I ===
* Intel VC820, running a prerelease Bios
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforece3 NV20 prerelease hardware? {{FIXME| What hardware was this one? or was it just the firmware that got upgraded?}}
* An OPTI 82C861 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
These where then programmed by use of a recovery disk that "recovered"
=== Apha II ===
The Alpha II was a upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN{{FIXME|SL3XN for sure in true alpha?}}
* Nvidia Geforce3 NV20 (64MB ram) with a Preretail firmware
An supplied Recovery made the nececairy firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha/
Same hardware as a Alpha I/II, but you dont seem to need the preretail firmwares or bioses.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out suboard isnt nececairy, as VGA seems to work fine. color or diferent kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while on purpose incorrectly installed or configured the computer.
These results may vary with official parts, configs, bios or firmware. Or due to diferences in hardware.
these are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primairy channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen connected (VGA or S-video)
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas or only for the particular motherboard that was under test.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).
All functions a debug with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
e2ca45ec09eb9bb098e05eb3ba9b0df8b065e268
Kernel Debug
0
3823
5909
2017-07-16T16:17:58Z
Codeasm
2480
Created page with "Only enabled in debug kernels, a Xbox with serial port can be kernel debugged with windbg. only executables that have debugging switched on can be debugged over serial aswell(..."
wikitext
text/x-wiki
Only enabled in debug kernels, a Xbox with serial port can be kernel debugged with windbg.
only executables that have debugging switched on can be debugged over serial aswell(?) {{citation needed}}
{FIXME| Explain with more details ;) }
Xqemu emulates this serial port, wich uses a [[Super_I/O | LPC chip ].
{FIXME| some example kernel output}
d1c918362b080f3b75e4e43e76ed96e7a8591456
AV Cables
0
3817
5910
5887
2017-07-16T16:32:51Z
JayFoxRox
2
wikitext
text/x-wiki
Microsoft released a handful of AV packs for the Xbox. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
{| class="wikitable"
! Pin || Description
|-
| 1 || Audio Right
|-
| 2 || Audio Right GND
|-
| 3 || SPDIF Digital Audio
|-
| 4 || V-Sync (VGA Mode)
|-
| 5 || Mode GND
|-
| 6 || Mode GND
|-
| 7 || Mode GND
|-
| 8 || GND
|-
| 9 || Variable
|-
| 10 || Pin 9 GND
|-
| 11 || Variable
|-
| 12 || Pin 11 GND
|}
{| class="wikitable"
! Pin || Description
|-
| 13 || Vcc
|-
| 14 || Audio Left
|-
| 15 || Audio Left GND
|-
| 16 || H Sync (VGA Mode)
|-
| 17 || Mode Select 1
|-
| 18 || Mode Select 2
|-
| 19 || Mode Select 3
|-
| 20 || +12V
|-
| 21 || Pin 22 GND
|-
| 22 || Variable
|-
| 23 || Pin 24 GND
|-
| 24 || Variable
|}
{{FIXME|reason=Show tables side by side?}}
== Supported signals / AV cables ==
Below is a table which lists all known officially AV cables released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! 19 || 18 || 17 || SMC Constant || Region || Official Microsoft product name
! Signal || 24 || 22 || 11 || 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || PAL || [https://web.archive.org/web/20040216131316/http://www.xbox.com:80/en-gb/hardware/scartcable.htm Advanced SCART Cable]
| SCART (15 kHz RGB) Stereo || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || NTSC || [https://web.archive.org/web/20040210040422/http://www.xbox.com:80/en-US/hardware/highdefinitionavpack.htm High Definition AV Pack]
| Component SPDIF || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || - || ''Not officially available / supported''
| VGA (31 kHz RGB) Stereo || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || NTSC / PAL || [https://web.archive.org/web/20040319001330/http://www.xbox.com:80/en-us/hardware/rfadapter.htm RF Adapter]
| RF Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || NTSC || [https://web.archive.org/web/20040319001247/http://www.xbox.com:80/en-us/hardware/advancedavpack.htm Advanced AV Pack]
| S-Video Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || - || ''Not officially available / supported''
| Unknown Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || PAL || [https://web.archive.org/web/20040216130745/http://www.xbox.com:80/en-gb/hardware/avcable.htm Standard AV Cable]
| Composite Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || - || ''No cable connected''
| - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation needed|reason=Are these still connected to Vcc maybe?}}
The region only identifies which territory the cable was originally available / intended for. The kernel still might support other video-standards (NTSC / PAL / SECAM) using the same cable.
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm List of signals and pinout]
c81946cc0abf59e3b61f41c5165ecd6af0f954ab
Boot Process
0
3683
5911
5689
2017-07-16T19:46:48Z
JayFoxRox
2
Added patent link! TIL
wikitext
text/x-wiki
This article describes the boot sequence of the Xbox.
A large portion of it is patended in [https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US6907522.pdf Patent "US 6,907,522 B2"]
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL (MCPX 1.0 only) ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8f000 to 0x850FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== TEA Decryption of the FBL (MCPX 1.1 only) ===
{{FIXME}}
== FBL (MCPX 1.1 only) ==
The Flash Boot Loader was added in MCPX 1.1, it connects the MCPX ROM and the 2BL.{{FIXME}}
It is not part of the MCPX ROM, but part of the flash.
== 2BL ==
{{FIXME|reason=Certain parts are still missing.}}
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
6191a72131b8fb2c388d3f320760eafc3106b15f
User:Codeasm
2
3729
5912
5359
2017-07-16T20:36:41Z
Codeasm
2480
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Game list ===
To be added, still working on it.
ecb09c6b96efae15f38bdb3d84107bca52e57b40
Patents
0
3824
5913
2017-07-16T20:42:59Z
PatrickvL
2473
Created page with "Here a list of patents that might be related to the NV2A GPU for the original Xbox: * Filed 1997-11-25 by nVidia: https://www.google.com/patents/US6697063 "Rendering pipeline..."
wikitext
text/x-wiki
Here a list of patents that might be related to the NV2A GPU for the original Xbox:
* Filed 1997-11-25 by nVidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by nVidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by nVidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by nVidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by nVidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by nVidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-06-19 by nVidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader " (mentions the NV2A directly)
706d4620590b3ba5b1329470edf60f80d4808443
5914
5913
2017-07-16T20:56:23Z
PatrickvL
2473
Additional patents
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by nVidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by nVidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by nVidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by nVidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by nVidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by nVidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2001-06-19 by nVidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions the NV2A directly)
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
58f7ca2b91fde6103896846739eb33ab48d788ec
5915
5914
2017-07-16T21:22:31Z
PatrickvL
2473
Added a few more patents
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by Nvidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by Nvidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2001-06-19 by Nvidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions "NV2A")
* Filed 2005-01-04 by Nvidia: https://www.google.com/patents/US7916149 "Block linear memory ordering of texture data"
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
* Filed 2005-05-17 by Nvidia: https://www.google.com/patents/US7793029 "Translation device apparatus for configuring printed circuit board connectors " (describes coupling two PCI Express connectors, possibly for the secondary Chihiro board, mentions "Xbox")
https://www.google.com/patents/US8641525
Possibly unrelated :
* Filed 1989-12-29 by Dolby Laboratories: https://www.google.com/patents/US5109417 "Low bit rate transform coder, decoder, and encoder/decoder for high-quality audio"
* Filed 2008-01-15 by Microsoft: https://www.google.nl/patents/US8607324 "Untrusted gaming system access to online gaming service" (describes part of Xbox online)
* Filed 2011-06-17 by Microsoft: https://www.google.com/patents/US8641525 "Controller for video game console" (one of the 51 patents comprising the Xbox One controller)
* Filed 2011-09-07 by Microsoft: https://www.google.nl/patents/US8597125 "System and method for configuring game data about players"
* Filed 2012-01-13 by Microsoft: https://www.google.nl/patents/US8602897 "Extended and editable gamer profile"
16ed8b8f1619b334c9b5b74462f40a88a3e28458
5918
5915
2017-07-16T21:40:24Z
PatrickvL
2473
.com, not .nl
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by Nvidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by Nvidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2001-06-19 by Nvidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions "NV2A")
* Filed 2005-01-04 by Nvidia: https://www.google.com/patents/US7916149 "Block linear memory ordering of texture data"
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
* Filed 2005-05-17 by Nvidia: https://www.google.com/patents/US7793029 "Translation device apparatus for configuring printed circuit board connectors " (describes coupling two PCI Express connectors, possibly for the secondary Chihiro board, mentions "Xbox")
Possibly unrelated :
* Filed 1989-12-29 by Dolby Laboratories: https://www.google.com/patents/US5109417 "Low bit rate transform coder, decoder, and encoder/decoder for high-quality audio"
* Filed 2008-01-15 by Microsoft: https://www.google.com/patents/US8607324 "Untrusted gaming system access to online gaming service" (describes part of Xbox online)
* Filed 2011-06-17 by Microsoft: https://www.google.com/patents/US8641525 "Controller for video game console" (one of the 51 patents comprising the Xbox One controller)
* Filed 2011-09-07 by Microsoft: https://www.google.com/patents/US8597125 "System and method for configuring game data about players"
* Filed 2012-01-13 by Microsoft: https://www.google.com/patents/US8602897 "Extended and editable gamer profile"
7a75637fd9941228c805dbaa7ade04a1f24c1ffe
5920
5918
2017-07-17T02:34:41Z
Haxar
2485
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by Nvidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by Nvidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2001-06-19 by Nvidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions "NV2A")
* Filed 2003-08-21 by Friendtech: https://www.google.com/patents/US20050282621 "CPU upgrading adapter for a Microsoft XboxTM game machine"
* Filed 2005-01-04 by Nvidia: https://www.google.com/patents/US7916149 "Block linear memory ordering of texture data"
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
* Filed 2005-05-17 by Nvidia: https://www.google.com/patents/US7793029 "Translation device apparatus for configuring printed circuit board connectors " (describes coupling two PCI Express connectors, possibly for the secondary Chihiro board, mentions "Xbox")
Possibly unrelated :
* Filed 1989-12-29 by Dolby Laboratories: https://www.google.com/patents/US5109417 "Low bit rate transform coder, decoder, and encoder/decoder for high-quality audio"
* Filed 2008-01-15 by Microsoft: https://www.google.com/patents/US8607324 "Untrusted gaming system access to online gaming service" (describes part of Xbox online)
* Filed 2011-06-17 by Microsoft: https://www.google.com/patents/US8641525 "Controller for video game console" (one of the 51 patents comprising the Xbox One controller)
* Filed 2011-09-07 by Microsoft: https://www.google.com/patents/US8597125 "System and method for configuring game data about players"
* Filed 2012-01-13 by Microsoft: https://www.google.com/patents/US8602897 "Extended and editable gamer profile"
ddac36d1ff9f5ad3ef5d3610e1e2af6c7c7502ec
5923
5920
2017-07-18T10:34:27Z
Codeasm
2480
Breakaway cable
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by Nvidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by Nvidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2001-06-19 by Nvidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions "NV2A")
* Filed 2003-08-21 by Friendtech: https://www.google.com/patents/US20050282621 "CPU upgrading adapter for a Microsoft XboxTM game machine"
* Filed 2005-01-04 by Nvidia: https://www.google.com/patents/US7916149 "Block linear memory ordering of texture data"
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
* Filed 2005-05-17 by Nvidia: https://www.google.com/patents/US7793029 "Translation device apparatus for configuring printed circuit board connectors " (describes coupling two PCI Express connectors, possibly for the secondary Chihiro board, mentions "Xbox")
* Filed 2001-04-30 by Microsoft: https://www.google.com/patents/US20020160654 "Breakaway cable connector" (filed by Microsofts attorneys)
Possibly unrelated :
* Filed 1989-12-29 by Dolby Laboratories: https://www.google.com/patents/US5109417 "Low bit rate transform coder, decoder, and encoder/decoder for high-quality audio"
* Filed 2008-01-15 by Microsoft: https://www.google.com/patents/US8607324 "Untrusted gaming system access to online gaming service" (describes part of Xbox online)
* Filed 2011-06-17 by Microsoft: https://www.google.com/patents/US8641525 "Controller for video game console" (one of the 51 patents comprising the Xbox One controller)
* Filed 2011-09-07 by Microsoft: https://www.google.com/patents/US8597125 "System and method for configuring game data about players"
* Filed 2012-01-13 by Microsoft: https://www.google.com/patents/US8602897 "Extended and editable gamer profile"
1687ffdb5e77c20e99c7db1bc5ae1a0fc77213ff
5924
5923
2017-07-18T10:56:31Z
Codeasm
2480
More chatpads and relation between em
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by Nvidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by Nvidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452534 "Portion of an electronic housing" (not a dupe, its the top X shape in detail)
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2003-05-09 by Microsoft: https://www.google.com/patents/US8493326 "Controller with removably attachable text input device" (an early keypad, later revered to by the 360 keypad patent)
* Filed 2003-05-09 by Micorsoft: https://www.google.com/patents/US7116311 "Embedded text input " (reffered to by the 360 chatpad)
* Filed 2006-07-03 by Micorsoft: https://www.google.com/patents/US7804484 "Embedded text input " (probably a corrected version of US7116311, reffered to by the 360 chatpad)
* Filed 2001-06-19 by Nvidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions "NV2A")
* Filed 2003-08-21 by Friendtech: https://www.google.com/patents/US20050282621 "CPU upgrading adapter for a Microsoft XboxTM game machine"
* Filed 2005-01-04 by Nvidia: https://www.google.com/patents/US7916149 "Block linear memory ordering of texture data"
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
* Filed 2005-05-17 by Nvidia: https://www.google.com/patents/US7793029 "Translation device apparatus for configuring printed circuit board connectors " (describes coupling two PCI Express connectors, possibly for the secondary Chihiro board, mentions "Xbox")
* Filed 2001-04-30 by Microsoft: https://www.google.com/patents/US20020160654 "Breakaway cable connector" (filed by Microsofts attorneys)
Possibly unrelated :
* Filed 1989-12-29 by Dolby Laboratories: https://www.google.com/patents/US5109417 "Low bit rate transform coder, decoder, and encoder/decoder for high-quality audio"
* Filed 2008-01-15 by Microsoft: https://www.google.com/patents/US8607324 "Untrusted gaming system access to online gaming service" (describes part of Xbox online)
* Filed 2011-06-17 by Microsoft: https://www.google.com/patents/US8641525 "Controller for video game console" (one of the 51 patents comprising the Xbox One controller)
* Filed 2011-09-07 by Microsoft: https://www.google.com/patents/US8597125 "System and method for configuring game data about players"
* Filed 2012-01-13 by Microsoft: https://www.google.com/patents/US8602897 "Extended and editable gamer profile"
* Filed 2007-12-07 by Microsoft: https://www.google.com/patents/US8487876 "Ergonomic hand-held text input device " (The xbox 360 chatpad, wich mentions the OG textpad US8493326 and US7116311 ;) )
67b8fb7f7cbad192388779b0f08acd45335abdc8
5939
5924
2017-08-01T14:01:32Z
Codeasm
2480
Baretta prototype chatpad
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by Nvidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by Nvidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452534 "Portion of an electronic housing" (not a dupe, its the top X shape in detail)
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2003-05-09 by Microsoft: https://www.google.com/patents/US8493326 "Controller with removably attachable text input device" (an early keypad, later revered to by the 360 keypad patent)
* Filed 2003-05-09 by Micorsoft: https://www.google.com/patents/US7116311 "Embedded text input " (reffered to by the 360 chatpad)
* Filed 2006-07-03 by Micorsoft: https://www.google.com/patents/US7804484 "Embedded text input " (probably a corrected version of US7116311, reffered to by the 360 chatpad, a picture of the "Baretta" chatpad, https://assemblergames.com/threads/xbox-chatpad-unreleased.54523/
* Filed 2001-06-19 by Nvidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions "NV2A")
* Filed 2003-08-21 by Friendtech: https://www.google.com/patents/US20050282621 "CPU upgrading adapter for a Microsoft XboxTM game machine"
* Filed 2005-01-04 by Nvidia: https://www.google.com/patents/US7916149 "Block linear memory ordering of texture data"
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
* Filed 2005-05-17 by Nvidia: https://www.google.com/patents/US7793029 "Translation device apparatus for configuring printed circuit board connectors " (describes coupling two PCI Express connectors, possibly for the secondary Chihiro board, mentions "Xbox")
* Filed 2001-04-30 by Microsoft: https://www.google.com/patents/US20020160654 "Breakaway cable connector" (filed by Microsofts attorneys)
Possibly unrelated :
* Filed 1989-12-29 by Dolby Laboratories: https://www.google.com/patents/US5109417 "Low bit rate transform coder, decoder, and encoder/decoder for high-quality audio"
* Filed 2008-01-15 by Microsoft: https://www.google.com/patents/US8607324 "Untrusted gaming system access to online gaming service" (describes part of Xbox online)
* Filed 2011-06-17 by Microsoft: https://www.google.com/patents/US8641525 "Controller for video game console" (one of the 51 patents comprising the Xbox One controller)
* Filed 2011-09-07 by Microsoft: https://www.google.com/patents/US8597125 "System and method for configuring game data about players"
* Filed 2012-01-13 by Microsoft: https://www.google.com/patents/US8602897 "Extended and editable gamer profile"
* Filed 2007-12-07 by Microsoft: https://www.google.com/patents/US8487876 "Ergonomic hand-held text input device " (The xbox 360 chatpad, wich mentions the OG textpad US8493326 and US7116311 ;) )
bea5c2fd5f5f4189f046095e6701c1de32ba4bb2
User:PatrickvL
2
3825
5916
2017-07-16T21:23:17Z
PatrickvL
2473
Created page with "Scan of Microsoft's Original Xbox (PAL) manual : http://www.videogameconsolelibrary.com/images/Manuals/01_Microsoft_Xbox_(PAL)-Manual.pdf"
wikitext
text/x-wiki
Scan of Microsoft's Original Xbox (PAL) manual :
http://www.videogameconsolelibrary.com/images/Manuals/01_Microsoft_Xbox_(PAL)-Manual.pdf
49bc3b1a9f4cf382ef220371ba353b3fd9985896
5917
5916
2017-07-16T21:36:09Z
PatrickvL
2473
wikitext
text/x-wiki
Scan of the instruction manual for Microsoft's Original Xbox (PAL) :
http://www.videogameconsolelibrary.com/images/Manuals/01_Microsoft_Xbox_(PAL)-Manual.pdf
Scan of the user manual for the Mad Catz MC2 Racing Wheel :
http://downloads.madcatzhosting.com/support/mcz/manuals/6320UG.pdf
1dd391fcb3c96d73cd8f17bfe3cd834ca8a60481
Network
0
3692
5919
5544
2017-07-16T21:41:09Z
PatrickvL
2473
.com, not .de
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
f5419d44867b06ca038aec1b1eb7632e28332018
CPU
0
3681
5921
5567
2017-07-17T02:47:32Z
Haxar
2485
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium 3 running at 733MHz. The 'custom' part of this was that that the Pentium 3 in the Xbox was that it had only 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [http://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/28365403.pdf Mobile Intel® Celeron® Processor (0.18μ) in BGA2 and Micro-PGA2 Packages] (This datasheet is for the mobile version Coppermine with 256kB L2 cache. It does not contain the Xbox Coppermine-128 with 128kB L2 cache at 733MHz (S-Spec SL5SN). No such datasheet exists. Both differences are pin compatible.
* [https://www.google.com/patents/US20050282621 CPU upgrading adapter for a Microsoft XboxTM game machine] US Patent Application 20050282621 by Friendtech, filed 2003-08-21.
d2f1631d5309b5ae066b01d50810f6651d1bc7d9
Kernel
0
3678
5922
5726
2017-07-17T04:08:11Z
Haxar
2485
Calling conventions are x86 specific.
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot kernel initialization as described [[Boot_Process#Initialization|here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!x86 Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExTimerObjectType]]
|31
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|
|Variable: ULONG
|-
|[[Kernel/HalDiskModelNumber]]
|41
|
|Variable: STRING
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|
|Variable: STRING
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFileObjectType]]
|71
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|
|Variable: BOOLEAN
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|
|Variable: BOOLEAN
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|
|Variable: MMGLOBALDATA
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|
|Variable: ULONG
|-
|[[Kernel/KeTimeIncrement]]
|157
|
|Variable: ULONG
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|
|Variable: ULONG_PTR[5]
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|
|Variable: PLAUNCH_DATA_PAGE
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|
|Variable: OBJECT_HANDLE_TABLE
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxHardwareInfo]]
|322
|
|Variable: XBOX_HARDWARE_INFO
|-
|[[Kernel/XboxHDKey]]
|323
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxKrnlVersion]]
|324
|
|Variable: XBOX_KRNL_VERSION
|-
|[[Kernel/XboxSignatureKey]]
|325
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XeImageFileName]]
|326
|
|Variable: OBJECT_STRING
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|
|Variable: XBOX_KEY_DATA[XBEIMAGE_ALTERNATE_TITLE_ID_COUNT]
|-
|[[Kernel/XePublicKeyData]]
|355
|
|Variable: UCHAR[XC_PUBLIC_KEYDATA_SIZE]
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|
|Variable: ULONG
|-
|[[Kernel/IdexChannelObject]]
|357
|
|Variable: IDE_CHANNEL_OBJECT
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|
|370
|
|Unused?
|-
|
|371
|
|Unused?
|-
|
|372
|
|Unused?
|-
|
|373
|
|Unused?
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
2ac8f0c5e0853b1f7d5487f4e5be3a6e308c35b2
Talk:CPU
1
3684
5931
5043
2017-07-18T23:33:50Z
JayFoxRox
2
/* CPU upgrade patent */ new section
wikitext
text/x-wiki
We should get output from cpuid here --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 06:19, 29 March 2017 (PDT)
== CPU upgrade patent ==
I think it should be made more clear that this is a patent for an unoffical / unlicensed third party mod.
I'm not sure how to do this best though.
The wiki should be focused on official content and information. The emulation section is the only exception currently and it's cleanly seperated from the rest.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 16:33, 18 July 2017 (PDT)
014de8019ed1e628962e6594c6294251fca7fc28
Exploits
0
3751
5932
5893
2017-07-19T14:16:23Z
JayFoxRox
2
Measured my AC97 attack with poor line-in = not promising
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Untested
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is likely to be lost. However, this was not tested in praxis.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be risky as harddisk contents have to be modified for the temporary softmod.
| Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
5d8aca8ab56df6859dee1b11b831b2d400343c3b
Xbe
0
3706
5933
5842
2017-07-19T17:06:04Z
Codeasm
2480
XE format for Alpha executables
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Xbox Alpha executable format==
Currently no emulator tries to read Alpha executables and no public known tools can read them. Commonly they warn you that the Xbe magic isnt correct.
This is due to the first few bytes in the retail executables read 'XBEH" while the Alpha executables only read 'XE'. The format is rumoured to look more like the windows PE structure. {citation needed}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
e1615322868fdad517c43894d164242f0749185f
5935
5933
2017-07-20T12:53:27Z
JayFoxRox
2
Removed non-interesting information and made clear what 'alpha' even is
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Xbox Alpha executable format==
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
87b8f3d992c4564093892c7161c1a459c77f6e79
I/O
0
3826
5934
2017-07-20T11:31:35Z
JayFoxRox
2
Created page with "{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}} {| class="wikitable" ! Ports || Purpose |- | 0000-001f || dma1 |- | 0020-003f || pic1 |- | 0040-0043 || ti..."
wikitext
text/x-wiki
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable"
! Ports || Purpose
|-
| 0000-001f || dma1
|-
| 0020-003f || pic1
|-
| 0040-0043 || timer0
|-
| 0050-0053 || timer1
|-
| 0060-006f || keyboard
|-
| 0070-007f || rtc
|-
| 0080-008f || dma page reg
|-
| 00a0-00bf || pic2
|-
| 00c0-00df || dma2
|-
| 00f0-00ff || fpu
|-
| 01f0-01f7 || ide0
|-
| 03c0-03df || vesafb
|-
| 03f6-03f6 || ide0
|-
| 0cf8-0cff || PCI conf1
|-
| 1000-100f || nVidia Corporation nForce PCI System Management
|-
| 1080-10ff || nVidia Corporation Intel 537 [nForce MC97 Modem]
|-
| 1400-14ff || nVidia Corporation Intel 537 [nForce MC97 Modem]
|-
| c000-c00f || nVidia Corporation nForce PCI System Management (amd756-smbus)
|-
| c200-c21f || nVidia Corporation nForce PCI System Management
|-
| d000-d0ff || nVidia Corporation nForce Audio
|-
| d200-d27f || nVidia Corporation nForce Audio
|-
| e000-e007 || nVidia Corporation nForce Ethernet Controller
|-
| ff60-ff6f || nVidia Corporation nForce IDE
|-
| ff60-ff67 || ide0
|}
2372c1d7018af9f92c9319e440d3b63a0d2c8ec1
Xbox ADPCM
0
3804
5936
5799
2017-07-26T21:08:02Z
JayFoxRox
2
The original compression ratio did not respect the sample width: 65 samples (16 bit PCM) = 130 bytes, will be compressed in 36 bytes (ADPCM). 1-(36/130) = 72.3%
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode data using [[Wikipedia:Adaptive differential pulse-code modulation|ADPCM]]. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (130:36 compression ratio = 72.3% compressed).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" width="20%" | W0
| colspan="8" width="20%" | W1
| colspan="8" width="20%" | W2
| rowspan="3" width="5%" | ...
| colspan="8" width="20%" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
|-
! {{no-select}} | 0
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8{{hc}}
|-
! {{no-select}} | 8
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
! {{no-select}} | +8
! {{no-select}} | +9
|-
! {{no-select}} | 0
| 7{{hc}} || 8{{hc}} || 9{{hc}} || 10{{hc}} || 11{{hc}} || 12{{hc}} || 13{{hc}} || 14{{hc}} || 16{{hc}} || 17{{hc}}
|-
! {{no-select}} | 10
| 19{{hc}} || 21{{hc}} || 23{{hc}} || 25{{hc}} || 28{{hc}} || 31{{hc}} || 34{{hc}} || 37{{hc}} || 41{{hc}} || 45{{hc}}
|-
! {{no-select}} | 20
| 50{{hc}} || 55{{hc}} || 60{{hc}} || 66{{hc}} || 73{{hc}} || 80{{hc}} || 88{{hc}} || 97{{hc}} || 107{{hc}} || 118{{hc}}
|-
! {{no-select}} | 30
| 130{{hc}} || 143{{hc}} || 157{{hc}} || 173{{hc}} || 190{{hc}} || 209{{hc}} || 230{{hc}} || 253{{hc}} || 279{{hc}} || 307{{hc}}
|-
! {{no-select}} | 40
| 337{{hc}} || 371{{hc}} || 408{{hc}} || 449{{hc}} || 494{{hc}} || 544{{hc}} || 598{{hc}} || 658{{hc}} || 724{{hc}} || 796{{hc}}
|-
! {{no-select}} | 50
| 876{{hc}} || 963{{hc}} || 1060{{hc}} || 1166{{hc}} || 1282{{hc}} || 1411{{hc}} || 1552{{hc}} || 1707{{hc}} || 1878{{hc}} || 2066{{hc}}
|-
! {{no-select}} | 60
| 2272{{hc}} || 2499{{hc}} || 2749{{hc}} || 3024{{hc}} || 3327{{hc}} || 3660{{hc}} || 4026{{hc}} || 4428{{hc}} || 4871{{hc}} || 5358{{hc}}
|-
! {{no-select}} | 70
| 5894{{hc}} || 6484{{hc}} || 7132{{hc}} || 7845{{hc}} || 8630{{hc}} || 9493{{hc}} || 10442{{hc}} || 11487{{hc}} || 12635{{hc}} || 13899{{hc}}
|-
! {{no-select}} | 80
| 15289{{hc}} || 16818{{hc}} || 18500{{hc}} || 20350{{hc}} || 22385{{hc}} || 24623{{hc}} || 27086{{hc}} || 29794{{hc}} || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
b4d6ddeb7ad69cb7f1391ccfdd3b60b9e0579c3a
NV2A
0
3675
5937
5421
2017-07-29T21:24:58Z
JayFoxRox
2
Using archived doc now
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
** [https://web.archive.org/web/20070105072020/http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/nv30specs.pdf Backup of nv30specs: List of implemented GL extensions for NV10-NV30]
b6dc5275584d1b8669eaaf01fc7ecccfe83b42c6
Xbox Input Devices
0
11
5943
5712
2017-08-09T06:30:35Z
Haxar
2485
/* USB Adapters */ Replaced Amazon link to the right Xbox to USB-A cable. These are the right ones, while the old link gave me USB-A to Xbox cables.
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || Directional Pad ||
|-
| Trigger || A || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || B
|-
| A || X
|-
| B || Y
|-
| START || Start ||
|-
| SE/BA || Back ||
|-
| Aim Left / Right || Negative / Positive on left thumbstick X axis || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || Positive / Negative on left thumbstick Y axis
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps A pressed while trigger is held
* Turbo mode 1 toggles A rapidly while trigger is held
* Turbo mode 2 toggles A rapidly and once in a while B while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
361c548b4222923901ef636adf2a79f91e586790
Development Kits
0
3822
5944
5942
2017-08-11T20:55:39Z
Codeasm
2480
/* Alpha */ more info
wikitext
text/x-wiki
There are a few hardware diferences and software diferences between development kits, but generaly the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are diferences internaly from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the developement kits and debugkits.
Some rare boards are found with diferent MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unkown port) its been rumoured that the blocked USB port (unblocked on DVT3) on the back of Developement kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel.
The alpha hardware allowed kernel debuging to be done over one of the rs232 ports and standard WinDBG software can make these messages and control work.
This allows of carefull debugging of the running kernel and diagnose occuring faults or errors. At early boot of the recovery software an network ip adress is attempted to setup probbaly for another way of diagnosing and remote control using the availeble software like later xdk software.
The Alpha is build with the following parts or software:
=== Alpha I ===
* Intel VC820, running a prerelease Bios
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforece3 NV20 prerelease hardware? {{FIXME| What hardware was this one? or was it just the firmware that got upgraded?}}
* An OPTI 82C861 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
These where then programmed by use of a recovery disk that "recovered"
=== Apha II ===
The Alpha II was a upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN{{FIXME|SL3XN for sure in true alpha?}}
* Nvidia Geforce3 NV20 (64MB ram) with a Preretail firmware
An supplied Recovery made the nececairy firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha/
Same hardware as a Alpha I/II, but you dont seem to need the preretail firmwares or bioses.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out suboard isnt nececairy, as VGA seems to work fine. color or diferent kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while on purpose incorrectly installed or configured the computer.
These results may vary with official parts, configs, bios or firmware. Or due to diferences in hardware.
these are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primairy channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen connected (VGA or S-video)
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas or only for the particular motherboard that was under test.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).
All functions a debug with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
cf82d83bc071c704778bab386982e58bb6b4d623
5945
5944
2017-08-11T21:03:03Z
Codeasm
2480
/* DVT3/DVT4 */ more details I found in notes.
wikitext
text/x-wiki
There are a few hardware diferences and software diferences between development kits, but generaly the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are diferences internaly from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the developement kits and debugkits.
Some rare boards are found with diferent MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unkown port) its been rumoured that the blocked USB port (unblocked on DVT3) on the back of Developement kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel.
The alpha hardware allowed kernel debuging to be done over one of the rs232 ports and standard WinDBG software can make these messages and control work.
This allows of carefull debugging of the running kernel and diagnose occuring faults or errors. At early boot of the recovery software an network ip adress is attempted to setup probbaly for another way of diagnosing and remote control using the availeble software like later xdk software.
The Alpha is build with the following parts or software:
=== Alpha I ===
* Intel VC820, running a prerelease Bios
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforece3 NV20 prerelease hardware? {{FIXME| What hardware was this one? or was it just the firmware that got upgraded?}}
* An OPTI 82C861 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
These where then programmed by use of a recovery disk that "recovered"
=== Apha II ===
The Alpha II was a upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN{{FIXME|SL3XN for sure in true alpha?}}
* Nvidia Geforce3 NV20 (64MB ram) with a Preretail firmware
An supplied Recovery made the nececairy firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha/
Same hardware as a Alpha I/II, but you dont seem to need the preretail firmwares or bioses.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out suboard isnt nececairy, as VGA seems to work fine. color or diferent kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while on purpose incorrectly installed or configured the computer.
These results may vary with official parts, configs, bios or firmware. Or due to diferences in hardware.
these are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primairy channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen connected (VGA or S-video)
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas or only for the particular motherboard that was under test.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).DVT3 seems to have the back USB port to be uncovered and a slightly more glossy or shinier jewel on the top of the case. According to some sources, the DVT3 cannot be updated to further kernels/dashboards than 3911, the lowest/oldest being 3823.1(Borman said this?){{citation needed}}
All functions a debug with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
1ec140e011af8708a93a6b79ad35dbc7055be7b6
Super I/O
0
3820
5946
5905
2017-08-16T17:34:56Z
JayFoxRox
2
wikitext
text/x-wiki
The Super I/O board is a feature of [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet])
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
702216ac2e65de171c61007170552529396cf9b0
5948
5946
2017-08-17T20:02:10Z
Codeasm
2480
Primairely work on schematics and pinlistings
wikitext
text/x-wiki
The Super I/O board is a feature of [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet])
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probablu ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
Maybe someday it will look better, but for now here are the listings of wich pin goes where:
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and GND
|
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
44202b5fbdc640776b80aebad92921d6393f6b0d
5949
5948
2017-08-17T20:23:25Z
Codeasm
2480
/* Schematic */ some updates
wikitext
text/x-wiki
The Super I/O board is a feature of [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet])
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probablu ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
Maybe someday it will look better, but for now here are the listings of wich pin goes where:
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and ?
|(not finished)
|-
|U1 pin 6,7
|C17(down) and GND
|Both U1 pins yes)
|-
|}
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|J9 pin 1
|
|(not finished)
|-
|J9 pin 2
|GND
|
|-
|J9 pin 3
|
|(not finished)
|-
|J9 pin 4
|NC
|no pin
|-
|J9 pin 5
|
|RST(not finished)
|-
|J9 pin 6
|C12(e),C13(S),C15(S),U3 p11.
|5V(not finished)
|-
|J9 pin 7
|
|LAD3(not finished)
|-
|J9 pin 8
|
|LAD2(not finished)
|-
|J9 pin 9
|3.3V
|(not finished)
|-
|J9 pin 10
|
|LAD1(not finished)
|-
|J9 pin 11
|
|LAD0(not finished)
|-
|J9 pin 12
|GND
|
|-
|J9 pin 13
|
|SCL(not finished)
|-
|J9 pin 14
|
|SDA(not finished)
|-
|J9 pin 15
|3.3V
|(not finished)
|-
|J9 pin 16
|
|(not finished)
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
0ef5e38dd48dfad056f91a0a80b3dbfaea8f00e4
5950
5949
2017-08-17T21:13:40Z
Codeasm
2480
/* Schematic */ done for today. will continue soon
wikitext
text/x-wiki
The Super I/O board is a feature of [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet])
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U1 SMsC LPC ic ===
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and ?
|(not finished)
|-
|U1 pin 6,7
|C17(down) and GND
|Both U1 pins yes)
|-
|U1 p24
|J9 pin 3
|LFrame
|-
|U1 p29
|J9 pin 1
|LClk
|-
|U1 p30
|J9 pin 16
|(unkown function)
|-
|U1 P84
|U3 ???
|RX
|-
|U1 P85
|U3 ???
|TX
|}
=== J9 LPC header===
Not finished
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|J9 pin 1
|U1 p29
|
|-
|J9 pin 2
|GND
|
|-
|J9 pin 3
|U1 p24
|LFrame
|-
|J9 pin 4
|NC
|no pin
|-
|J9 pin 5
|
|RST
|-
|J9 pin 6
|C12(e),C13(S),C15(S),U3 p11.
|5V
|-
|J9 pin 7
|
|LAD3
|-
|J9 pin 8
|
|LAD2
|-
|J9 pin 9
|3.3V
|
|-
|J9 pin 10
|
|LAD1
|-
|J9 pin 11
|
|LAD0
|-
|J9 pin 12
|GND
|
|-
|J9 pin 13
|U1 p104
|SCL
|-
|J9 pin 14
|U1 p103
|SDA
|-
|J9 pin 15
|3.3V
|
|-
|J9 pin 16
|U1 p30
|(unkown function)
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
c36c830fb3dc318e1c1b9f22bc9cbf5e0a01f518
DVD Emulator
0
3821
5947
5907
2017-08-17T19:15:28Z
Codeasm
2480
added images link, if I can upload I want and will. images are CC0
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding witch files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and posibly potencial faults that could occur.
The Hardware required for this where a Developement kit (with the DVD emulation board) a sort of scsi cable and a XDK-Raptor card.{{citation needed}}
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
For development it wasnt the fastest way to get an executable to the xbox, and for homebrew its pretty useless.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
== Resources ==
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the DVD emulation board]
03ff8ea27da0fc4ceb58f285baff0a266456ca24
Xbox DVD Movie Playback Kit
0
3768
5951
5589
2017-08-20T20:16:18Z
JayFoxRox
2
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
5547e9469381f31b1ad64d0134c2b0aed8269903
5952
5951
2017-08-20T20:17:36Z
JayFoxRox
2
JayFoxRox moved page [[DVD-IR Internals]] to [[DVD Movie Playback Kit]] without leaving a redirect
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
5547e9469381f31b1ad64d0134c2b0aed8269903
5953
5952
2017-08-20T20:22:17Z
JayFoxRox
2
/* Dongle */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable"
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 70d4b5f8e073b05610fba9e9617d7356196b61ff
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
76f21be51c3c2d49d8e64cb43c47ec89e308d5ec
5954
5953
2017-08-20T20:24:30Z
JayFoxRox
2
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable"
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || 70d4b5f8e073b05610fba9e9617d7356196b61ff
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
4835be1f6ec2ae1fc74984ae03167eb80b8324b9
5955
5954
2017-08-20T20:34:33Z
JayFoxRox
2
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || 70d4b5f8e073b05610fba9e9617d7356196b61ff
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
88b4284493f4fd59e8648f33bedc091df27403fa
5957
5955
2017-08-20T20:36:30Z
JayFoxRox
2
JayFoxRox moved page [[DVD Movie Playback Kit]] to [[Xbox DVD Movie Playback Kit]] without leaving a redirect
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || 70d4b5f8e073b05610fba9e9617d7356196b61ff
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
88b4284493f4fd59e8648f33bedc091df27403fa
5958
5957
2017-08-21T05:54:12Z
Ernegien
2491
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || 70d4b5f8e073b05610fba9e9617d7356196b61ff
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || 73814aa736d83d636380f5c6b1c291441b35354d
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
85ca2036ea5f9aed1fa18623d092814611ab1f90
5959
5958
2017-08-21T05:55:30Z
Ernegien
2491
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || 70d4b5f8e073b05610fba9e9617d7356196b61ff
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
88b4284493f4fd59e8648f33bedc091df27403fa
5960
5959
2017-08-21T05:56:07Z
Ernegien
2491
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || 70d4b5f8e073b05610fba9e9617d7356196b61ff
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || 73814aa736d83d636380f5c6b1c291441b35354d
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
043657743cd6678e88c161ed74b68afb95164ba1
5961
5960
2017-08-21T14:53:43Z
JayFoxRox
2
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code>
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code>
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
53a40b1a243d95d43d252014a0eddc39ea71f2c6
5962
5961
2017-08-21T14:56:45Z
JayFoxRox
2
/* References */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code>
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code>
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
56c34335a9bbab85bb5724744263b8ca6a0a014e
5963
5962
2017-08-21T15:12:02Z
JayFoxRox
2
/* Components */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code>
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code>
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
==== X08-25387-002 (PCB: X01469-100) ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (from Xbox Linux) ====
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
db403dc22470c4da3078178bfd96dac4a5594809
5964
5963
2017-08-21T15:12:39Z
JayFoxRox
2
/* Components */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code>
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code>
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: X01469-100) ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (from Xbox Linux) ====
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
fdc84958bf0f200b36fb15f28da590f5f94a87fb
5968
5964
2017-08-21T15:49:35Z
JayFoxRox
2
/* Unknown version (from Xbox Linux) */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code>
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code>
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: X01469-100) ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (from Xbox Linux) ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
710d8e1979b0cb76da7dd26c9a277415815d259c
5969
5968
2017-08-21T16:31:01Z
JayFoxRox
2
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: X01469-100) ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (from Xbox Linux) ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
13033c8b2fc3a1cae244fc378f665c1ed95e03c4
5970
5969
2017-08-21T16:34:25Z
JayFoxRox
2
/* Unknown version (from Xbox Linux) */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: X01469-100) ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
6b5effd25d5456f7b666dc2b9ba3b81f5bd4e1d1
5971
5970
2017-08-21T16:35:49Z
JayFoxRox
2
/* X08-25387-002 (PCB: X01469-100) */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Additionally the Dongle contains an IR receiver to receive commands from the Remote control
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (PCB: "IR DONGLE REV B") ====
{{FIXME|reason=See http://wiki.tolabaki.gr/mediawiki/images/d/db/Xbox_rc_vanilla.jpg . Needs more pics}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM. It is assumed that it contains the DVD player application. WHY? Why would they not just put this little 512kb max. application on the harddisk? Why another ROM which contains the program?
: One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
047e8a80530a614acbda6dedb636039639b599f4
5972
5971
2017-08-21T17:26:15Z
JayFoxRox
2
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (PCB: "IR DONGLE REV B") ====
{{FIXME|reason=See http://wiki.tolabaki.gr/mediawiki/images/d/db/Xbox_rc_vanilla.jpg . Needs more pics}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
99774dd21a5bcb4602b335eb2f8fa9e3772f9278
5979
5972
2017-08-22T06:00:52Z
Ernegien
2491
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (PCB: "IR DONGLE REV B") ====
{{FIXME|reason=See http://wiki.tolabaki.gr/mediawiki/images/d/db/Xbox_rc_vanilla.jpg . Needs more pics}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
ba73e0fafb4aee6169b767aef20e3c9fa750860a
5980
5979
2017-08-22T06:07:26Z
Ernegien
2491
/* Known versions */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (PCB: "IR DONGLE REV B") ====
{{FIXME|reason=See http://wiki.tolabaki.gr/mediawiki/images/d/db/Xbox_rc_vanilla.jpg . Needs more pics}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
8ca22f1586220e6b52021c60ced87bdd212b2b76
5986
5980
2017-08-22T22:06:42Z
Espes
2484
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== Unknown version (PCB: "IR DONGLE REV B") ====
{{FIXME|reason=See http://wiki.tolabaki.gr/mediawiki/images/d/db/Xbox_rc_vanilla.jpg . Needs more pics}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
638e2d3fc7e3b95977f9735e7360b450f99cdd8d
Main Page
0
1
5956
5938
2017-08-20T20:36:09Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
d08b9a7798a6295a265f30093963fb567c6f0226
File:Xbox-linux-dvd-dongle-back.jpg
6
3827
5965
2017-08-21T15:42:43Z
JayFoxRox
2
Backside of DVD Dongle.
Originally by Xbox-Linux
wikitext
text/x-wiki
Backside of DVD Dongle.
Originally by Xbox-Linux
ba20bdc235344f24086db7fdcffb59a5b21cffde
5966
5965
2017-08-21T15:42:59Z
JayFoxRox
2
JayFoxRox moved page [[File:Xbox-linux-dvd-donge-back.jpg]] to [[File:Xbox-linux-dvd-dongle-back.jpg]] without leaving a redirect: Typo
wikitext
text/x-wiki
Backside of DVD Dongle.
Originally by Xbox-Linux
ba20bdc235344f24086db7fdcffb59a5b21cffde
File:Xbox-linux-dvd-dongle-front.jpg
6
3828
5967
2017-08-21T15:43:28Z
JayFoxRox
2
Frontside of DVD Dongle.
Originally by Xbox-Linux
wikitext
text/x-wiki
Frontside of DVD Dongle.
Originally by Xbox-Linux
603a3832771393aebd21bc2b9e00039da7a0e0c7
Xbox Live Communicator
0
3829
5973
2017-08-21T18:46:27Z
JayFoxRox
2
Created page with "The Xbox Live Communicator is the headset which is used for Xbox Live. == Protocol == === USB Descriptor === <pre> Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Com..."
wikitext
text/x-wiki
The Xbox Live Communicator is the headset which is used for Xbox Live.
== Protocol ==
=== USB Descriptor ===
<pre>
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 45
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Microphone ===
{{FIXME}}
=== Speaker ===
{{FIXME}}
f540b5989bdce3211cc512bb6b05c602a4faee73
5975
5973
2017-08-22T01:21:59Z
DaveX
2487
added pic
wikitext
text/x-wiki
The Xbox Live Communicator is the headset which is used for Xbox Live.
[[File:Xbox_Live_Communicator.png|thumb|200px|Headset / Xbox Live Communicator]]
== Protocol ==
=== USB Descriptor ===
<pre>
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 45
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Microphone ===
{{FIXME}}
=== Speaker ===
{{FIXME}}
135d3375e53f6fbfa296ad69933b8aa098d4de0e
File:Xbox Live Communicator.png
6
3830
5974
2017-08-22T01:18:34Z
DaveX
2487
The Xbox Live Communicator looks roughly like this.
wikitext
text/x-wiki
The Xbox Live Communicator looks roughly like this.
4b38e0d2b0dc4b54a6cd8087957ef387bc2644a4
5976
5974
2017-08-22T01:26:37Z
DaveX
2487
DaveX uploaded a new version of [[File:Xbox Live Communicator.png]]
wikitext
text/x-wiki
The Xbox Live Communicator looks roughly like this.
4b38e0d2b0dc4b54a6cd8087957ef387bc2644a4
5977
5976
2017-08-22T01:28:13Z
DaveX
2487
DaveX uploaded a new version of [[File:Xbox Live Communicator.png]]
wikitext
text/x-wiki
The Xbox Live Communicator looks roughly like this.
4b38e0d2b0dc4b54a6cd8087957ef387bc2644a4
5978
5977
2017-08-22T01:28:53Z
DaveX
2487
DaveX uploaded a new version of [[File:Xbox Live Communicator.png]]
wikitext
text/x-wiki
The Xbox Live Communicator looks roughly like this.
4b38e0d2b0dc4b54a6cd8087957ef387bc2644a4
Xtf
0
3831
5981
2017-08-22T18:43:16Z
JayFoxRox
2
Created page with "xtf is a font file format used in the [[Dashboard]]. It became famous for being [[Exploits#Font hacks|exploited]]. === File format === {{FIXME}}"
wikitext
text/x-wiki
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
=== File format ===
{{FIXME}}
d5326be6dadc016befa2ead8ab4bcfc22ff11562
Exploits
0
3751
5982
5932
2017-08-22T18:44:03Z
JayFoxRox
2
/* Font hacks */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Untested
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is likely to be lost. However, this was not tested in praxis.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be risky as harddisk contents have to be modified for the temporary softmod.
| Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
7733978aeaaa0905e6a9b26597b523a82848df09
Talk:Xtf
1
3832
5983
2017-08-22T18:45:23Z
JayFoxRox
2
/* Merge with dashboard article */ new section
wikitext
text/x-wiki
== Merge with dashboard article ==
I think it makes sense to merge this with the dashboard article or even move such file format stuff to other wikis.
However, I'm not sure how to integrate it best with the dashboard article, and I'm not aware of any wikis where this would fit.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:45, 22 August 2017 (PDT)
cf8fe229b5485372c576a21a038819b2465f59d9
5984
5983
2017-08-22T18:49:11Z
JayFoxRox
2
/* Add file format info */ new section
wikitext
text/x-wiki
== Merge with dashboard article ==
I think it makes sense to merge this with the dashboard article or even move such file format stuff to other wikis.
However, I'm not sure how to integrate it best with the dashboard article, and I'm not aware of any wikis where this would fit.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:45, 22 August 2017 (PDT)
== Add file format info ==
from #xqemu irc channel
JayFoxRox: I looked at the file, it seems to be a 2D mesh format, indices, followed by vertices
JayFoxRox: header is XTF0, then, then 4 bytes length for the following name of font [should be 32 bytes]
JayFoxRox: seemingly this is used too: https://msdn.microsoft.com/en-us/library/dd144956(v=vs.85).aspx
JayFoxRox: or at least there is a 4 byte length prefix again
JayFoxRox: near end of file it's very surely <code>u16 icount, u16 vcount, u16 indices[icount] { float x,y; }[vcount]</code>
JayFoxRox: if there are any structures between those 2? no idea.
JayFoxRox: apparently the last structure [with mesh data] keeps repeating towards the end, so it's probably each glyph seperately
JayFoxRox: I don't have more time for doing this now - I already did more than I wanted by sourcing the Xbox.xtf and Xbox Book.xtf and looking at it with hexedit and googling for MS structures :P
JayFoxRox: I think there are degenerates, so looks like tri-strip
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:49, 22 August 2017 (PDT)
aa3ca7c50dbf6c066a6e8dcbf799457e6aca1392
5985
5984
2017-08-22T18:49:35Z
JayFoxRox
2
/* Add file format info */
wikitext
text/x-wiki
== Merge with dashboard article ==
I think it makes sense to merge this with the dashboard article or even move such file format stuff to other wikis.
However, I'm not sure how to integrate it best with the dashboard article, and I'm not aware of any wikis where this would fit.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:45, 22 August 2017 (PDT)
== Add file format info ==
from #xqemu irc channel
* JayFoxRox: I looked at the file, it seems to be a 2D mesh format, indices, followed by vertices
* JayFoxRox: header is XTF0, then, then 4 bytes length for the following name of font [should be 32 bytes]
* JayFoxRox: seemingly this is used too: https://msdn.microsoft.com/en-us/library/dd144956(v=vs.85).aspx
* JayFoxRox: or at least there is a 4 byte length prefix again
* JayFoxRox: near end of file it's very surely <code>u16 icount, u16 vcount, u16 indices[icount] { float x,y; }[vcount]</code>
* JayFoxRox: if there are any structures between those 2? no idea.
* JayFoxRox: apparently the last structure [with mesh data] keeps repeating towards the end, so it's probably each glyph seperately
* JayFoxRox: I don't have more time for doing this now - I already did more than I wanted by sourcing the Xbox.xtf and Xbox Book.xtf and looking at it with hexedit and googling for MS structures :P
* JayFoxRox: I think there are degenerates, so looks like tri-strip
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:49, 22 August 2017 (PDT)
7b231ae4af073f317d5c3d3cded56fde1fa5b556
5992
5985
2017-08-23T19:57:46Z
JayFoxRox
2
/* Add file format info */
wikitext
text/x-wiki
== Merge with dashboard article ==
I think it makes sense to merge this with the dashboard article or even move such file format stuff to other wikis.
However, I'm not sure how to integrate it best with the dashboard article, and I'm not aware of any wikis where this would fit.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:45, 22 August 2017 (PDT)
== Add file format info ==
from #xqemu irc channel
* JayFoxRox: I looked at the file, it seems to be a 2D mesh format, indices, followed by vertices
* JayFoxRox: header is XTF0, then, then 4 bytes length for the following name of font [should be 32 bytes]
* JayFoxRox: seemingly this is used too: https://msdn.microsoft.com/en-us/library/dd144956(v=vs.85).aspx
* JayFoxRox: or at least there is a 4 byte length prefix again
* JayFoxRox: near end of file it's very surely <code>u16 icount, u16 vcount, u16 indices[icount] { float x,y; }[vcount]</code>
* JayFoxRox: if there are any structures between those 2? no idea.
* JayFoxRox: apparently the last structure [with mesh data] keeps repeating towards the end, so it's probably each glyph seperately
* JayFoxRox: I don't have more time for doing this now - I already did more than I wanted by sourcing the Xbox.xtf and Xbox Book.xtf and looking at it with hexedit and googling for MS structures :P
* JayFoxRox: I think there are degenerates, so looks like tri-strip << edit: actually those are just tris!
Update: source code for partially converting to svg font: https://gist.github.com/JayFoxRox/3749698d1ae590608433672bffecba5a
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:49, 22 August 2017 (PDT)
6fb1c7b7d8081fc46db93505cd752e51bf8fcc86
Xbox Input Devices
0
11
5987
5943
2017-08-22T22:10:15Z
Espes
2484
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || Directional Pad ||
|-
| Trigger || A || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || B
|-
| A || X
|-
| B || Y
|-
| START || Start ||
|-
| SE/BA || Back ||
|-
| Aim Left / Right || Negative / Positive on left thumbstick X axis || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || Positive / Negative on left thumbstick Y axis
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps A pressed while trigger is held
* Turbo mode 1 toggles A rapidly while trigger is held
* Turbo mode 2 toggles A rapidly and once in a while B while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
=== Related links ===
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
a5548a610b5d03df981e3c152bc07f2ce44d47de
5988
5987
2017-08-22T22:10:55Z
Espes
2484
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|DPAD_UP
|2
|0x01
|
|-
|DPAD_DOWN
|2
|0x02
|
|-
|DPAD_LEFT
|2
|0x04
|
|-
|DPAD_RIGHT
|2
|0x08
|
|-
|START
|2
|0x10
|
|-
|BACK
|2
|0x20
|
|-
|LEFT_THUMB
|2
|0x40
|
|-
|RIGHT_THUMB
|2
|0x80
|
|-
|A
|4
|0xFF
|Button is analog
|-
|B
|5
|0xFF
|Button is analog
|-
|X
|6
|0xFF
|Button is analog
|-
|Y
|7
|0xFF
|Button is analog
|-
|BLACK
|8
|0xFF
|Button is analog
|-
|WHITE
|9
|0xFF
|Button is analog
|-
|LEFT_TRIGGER
|10
|0xFF
|Trigger is analog
|-
|RIGHT_TRIGGER
|11
|0xFF
|Trigger is analog
|-
|sThumbLX
|12
|0xFFFF
|
|-
|sThumbLY
|14
|0xFFFF
|
|-
|sThumbRX
|16
|0xFFFF
|
|-
|sThumbRY
|18
|0xFFFF
|
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || Directional Pad ||
|-
| Trigger || A || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || B
|-
| A || X
|-
| B || Y
|-
| START || Start ||
|-
| SE/BA || Back ||
|-
| Aim Left / Right || Negative / Positive on left thumbstick X axis || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || Positive / Negative on left thumbstick Y axis
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps A pressed while trigger is held
* Turbo mode 1 toggles A rapidly while trigger is held
* Turbo mode 2 toggles A rapidly and once in a while B while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
f7cf9811a69e0cb388f77d4fff0985b7ca978336
Kernel/XboxEEPROMKey
0
3833
5989
2017-08-23T04:50:49Z
JayFoxRox
2
Created page with "The 16 byte RC4 key used to decrypt parts of the [[EEPROM]]. The key is passed to kernel from from 2BL. It is only initialized on cold-boot. If an XBE is loaded which is not..."
wikitext
text/x-wiki
The 16 byte RC4 key used to decrypt parts of the [[EEPROM]].
The key is passed to kernel from from 2BL.
It is only initialized on cold-boot.
If an XBE is loaded which is not allowed to run in the manufacturing region, the Microsoft Kernels will set the EEPROM key to all zeros.
As the key is not re-initialized, this means running the first non-manufacturing XBE (such as a game or [[Dashboard]]{{FIXME|reason=confirm the dash is not running in manufacturing}}), will make the key unretrievable until a reboot.
6271ebf6326f9f7eefd7b6f3bdd411bec4817a56
5991
5989
2017-08-23T05:06:23Z
JayFoxRox
2
Reluctantly moved the chihiro key here.
wikitext
text/x-wiki
The 16 byte RC4 key used to decrypt parts of the [[EEPROM]].
The key is passed to kernel from from 2BL.
It is only initialized on cold-boot.
If an XBE is loaded which is not allowed to run in the manufacturing region, the Microsoft Kernels will set the EEPROM key to all zeros.
As the key is not re-initialized, this means running the first non-manufacturing XBE (such as a game or [[Dashboard]]{{FIXME|reason=confirm the dash is not running in manufacturing}}), will make the key unretrievable until a reboot.
The Chihiro EEPROM key is <code>7B 35 A8 B7 27 ED 43 7A A0 BA FB 8F A4 38 61 80</code>
9125826930a83fa14670ff56618ebfaf1ac2650e
EEPROM
0
3742
5990
5538
2017-08-23T05:05:51Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x5C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xA8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
d6c8ffe19263449294cbeeec09e60f55b2730e08
Video Encoder
0
3750
5993
5474
2017-08-24T18:39:42Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox does not use an ordinary [https://web.archive.org/web/20100617022211/http://en.wikipedia.org/wiki/RAMDAC RAMDAC] for video output. Instead, it employs a <em>video encoder</em>.
Video encoder is a chip that converts a digital pixel data stream (coming from the nVidia NV2A graphics processor) into analog video signal, just like a RAMDAC would. An ordinary RAMDAC, however, can only output VGA-style RGB signal. The video encoder used in the Xbox is more flexible, and can generate several different types of signals that adhere to various video standards and color formats. These include, but are not necessarily limited to:
* VGA-style >31 kHz RGB, though only with Sync-on-Green sync signals. (If needed, separate HSYNC and VSYNC signals can be obtained from the motherboard, or by building a special video cable with active electronics for stripping and separating the Sync-on-Green sync signal. In any case, separate HSYNC and VSYNC are not available directly through the AV connector.)
* TV-compatible 15 kHz RGB (with composite sync) – suitable for European-style SCART RGB output (are progressive 625/50 signals supported?)
* Component (Y'PbPr) signal, both in SDTV and HDTV resolutions; suitable for American-style "component" output
* PAL color signal with typical PAL timings (including PAL60), in both composite (CVBS) and s-video (Y/C) formats
* SECAM color signal with typical SECAM timings, in both composite (CVBS) and s-video (Y/C) formats
* NTSC color signal with typical NTSC timings, in both composite (CVBS) and s-video (Y/C) formats
* Black and white composite video signal without a color carrier
The video encoder is also capable of PALplus style Line 23 Wide Screen Signalling (WSS), and the Xbox PIC is rigged with the capability of controlling Scart pin 8 (the ''function switching pin'', which is used as an alternative method of Wide Screen Signalling) and pin 16 (the ''fast switching pin''.)
The make and model of the video encoder has varied through the times – three different video encoders have been used this far. All three are very similar in their features; they support various modes and are flexible enough to be able to output a VGA compatible signal (which is not supported by the Xbox kernel.) They are, however, not register-compatible.
Two of the video encoders (namely, Conexant CX25871 and Focus FS454) also have extensive scaling and filtering functionality, which allows for [https://web.archive.org/web/20100617022211/http://scanline.ca/overscan/ overscan compensation] in desktop-style "TV out" usage. (This means that the GPU can output ordinary VGA resolutions with VGA timings and the video encoder can convert them to SDTV resolutions with TV-style timings on the fly, adding borders around the image so that a projection of the VGA framebuffer image falls within the "safe area" of the video signal.) The capabilities of the Xcalibur chip, however, remain a mystery in this regard: it is not known whether it has a scaler.
All video encoders are connected to (and controlled via) <a href="/web/20100617022211/http://www.xbox-linux.org/wiki/SMBus_Controller" title="SMBus Controller">IÃÂÃÂÃÂòC/SMBus</a>.
=== Conexant CX25871 ===
[https://web.archive.org/web/20100617022211/http://www.conexant.com:9000/cgi-bin/query?mss=srchprod&pg=q&i=IDXPRODSRCH&q=cx25870 Conexant CX25871] is a close relative of the Brooktree BT868/BT869. There is also a sister model (CX25870) without the Macrovision capability. This chip was used in Xbox versions v1.0 through v1.3. If you follow the link, you will find a product brief and a complete data sheet, with register-level programming information.
=== Focus FS454 ===
[https://web.archive.org/web/20100617022211/http://www.focusinfo.com/solutions/catalog.asp?id=30 Focus FS454] was used in v1.4 (and possibly v1.5) Xboxes. There is also a sister model (FS453) without the Macrovision capability. The data sheet containing the necessary programming information is available from the manufacturer by separate request. Copies of it have also been seen floating around the net.
=== Xcalibur ===
The "Xcalibur" video encoder is a custom chip manufactured for Microsoft. It was first used in the Xbox hardware revision 1.6.
The Xbox-Linux support the Xcalibur video encoders is very limited at present (see <a href="/web/20100617022211/http://www.xbox-linux.org/wiki/Xbox_v1.6_Issues" title="Xbox v1.6 Issues">Xbox v1.6 Issues</a>). The reason for this is that there is, at least currently, no official programming documentation available for this chip. It seems the only way to find out more is through reverse-engineering techniques.
Xboxes that contain the Xcalibur encoder have the firmware ROM and the PIC physically integrated into another MS-specific chip, named Xyclops.
c8c82d0bd507c7a97db76367aec50adc0b495b09
Xbox Hardware Overview
0
3767
5994
5588
2017-08-24T18:40:11Z
JayFoxRox
2
Moved to seperate page
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview}}
The Xbox is a standard PC, based on standard components, but extended with a some security solutions. This document gives an overview of the components the Xbox is made of.
= Overview =
Viewed by connection (similar to the Windows 2000 Device Manager
view), the Xbox system hardware looks like this:
Diagram modified by Fahad
<pre>Xbox V1.0-1.5
|
|-- Mobile Intel Pentium III 733mHz w/128kb Cache
|
|-- Flash ROM (V1.0/1.1 -
|
\-- PCI bus
|
|-- Programmable Interrupt Controller
|
|-- System Timer
|
|-- DMA Controller
|
|-- PCI Bridge Device - Host Bridge (0:0:0, 0x2a5)
|
|-- Memory Controller - SDRAM - Samsung K4D263238M-QC50 133mHz 16mb (0:0:3, 0x2a6)
| |
| |-- Top of Motherboard
| | |
| | |-- Pad 1 (closest to power connector) (empty)
| | |
| | |-- Pad 2 (left of Pad 1)
| | |
| | |-- Pad 3 (below Pad 4)
| | |
| | \-- Pad 4 (closest to AV connector) (empty)
| |
| \-- Bottom of Motherboard
| |
| |-- Pad 5 (paralell to Pad 1) (empty)
| |
| |-- Pad 6 (paralell to Pad 2)
| |
| |-- Pad 7 (paralell to Pad 3)
| |
| \-- Pad 8 (paralell to Pad 4) (empty)
|
|-- HUB Interface - ISA Bridge (0:1:0, 0x1b2) [nForce]
|
|-- SMBus Controller (0:1:1, 0x1b4) [nForce]
| |
| |-- PIC16LC
| |
| |-- Conexant 25871/Focus 454/Xcalibur Video Encoder
| |
| |-- ADM1032 System Temperature Monitor
| |
| \-- Serial EEPROM
|
|-- OHCI USB Controller (0:2:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 1 & 2)
|
|-- OHCI USB Controller (0:3:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 3 & 4)
|
|-- MCP-X V3 Southbridge
| |
| |-- MCP Networking Adapter (0:4:0, 0x1c3) [nForce]
| |
| \-- MCP APU (0:5:0, 0x1b0) [nForce]
|
|-- AC`97 Audio Codec Interface (0:6:0, 0x1b1) [nForce]
|
|-- Simple Communication Controller - Generic Modem (0:6:1, 0x1c1) [???]
|
|-- IDE Controller (0:9:0, 0x1bc) [nForce]
| |
| |-- Primary IDE Channel
| | |
| | |-- Seagate ST3210014ACE 10.2gb (8gb used)/Custom Western Digital WD80EB 8gb hard drive
| | |
| | \-- Custom Samsung/Phillips/Thompson/LG DVD Drive
| |
| \--- Secondary IDE Channel
|
|-- PCI Bridge (0:8:0, 0x1b8) [nForce]
|
\-- AGP Host to PCI Bridge (0:30:0, 0x1b7) [nForce]
|
\-- NV2A GeForce 3MX Integrated GPU/Northbridge 233mHz (1:0:0, 0x2a0)
</pre>
<br />
PCI devices have their Bus:Dev:Func numbers as well as the DevID
printed next to them. PCI devices with "[nForce]" have the same DevIDs as
their counterparts of the nForce chipset.
A derivative of the Xbox chipset is also available as the PC chipset
"nVidia nForce", which consists of a northbridge with the memory
interface and the GPU and the southbridge with the PCI bus and its
devices, just like the Xbox chipset. Many of the southbridge PCI devices
are the same on both versions, i.e. they have the same DevID.
= The Devices in Detail =
== Intel Pentium III CPU ==
The CPU is a standard Pentium III Coppermine mobile at 733 MHz. This CPU has been found to be a modified Pentium III, as it has many of the features a Celeron lacks. Therefore, it can be classified as a Pentium III with a smaller cache. (Regular has 256kb or more, XBox has 128kb)
== Flash ROM ==
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MB; 0xFFFC0000, if the ROM is 256 KB) into the but the Xbox kernel.
== PCI bus, Host Bridge, ISA Bridge, AGP Host to PCI Bridge, Memory Controller ==
These devices are identical to the corresponding devices contained in the nForce chipset. The PCI bus can be accessed like on any PC.
== Programmable Interrupt Controller, System Timer, DMA Controller ==
These legacy PC/AT system devices are fully PC-compatible, but the timer frequency is 6% higher than in a PC.
== SMBus Controller ==
Some low-speed devices are connected through the SMBus, so the
southbridge contains an SMBus controller, compatible to the SMBus
controller in the nVidia nForce chipset. Since nForce is based on AMD's original chipset for Athlon CPUs, the SMBus controller is AMD-756 compatible.
== PIC16LC ==
The PIC16LC is a small 8 bit processor running at 20 MHz with its
own ROM, RAM and I/O lines. It controls:
* Power button
* Eject button
* Power/error LED
* DVD tray status (through extra pins to DVD drive)
* Video cable type (3 pins)
The PIC is always running, even if the Xbox is turned off. When the
power cable is unplugged, it gets its energy from a capacitor for some
hours.
== Video Encoder ==
See [[Video Encoder]]
== ADM1032 System Temperature Monitor ==
The Analog Devices ADM1032 is an SMBus device that does temperature
measurement.
== Serial EEPROM ==
The Serial EEPROM holds some settings, such as time zone, language,
IP address etc., as well as the hard disk key and the Xbox serial number.
== OHCI USB Controller, IDE Controller ==
These devices are compatible to standard PC devices.
== MCP Networking Adapter, MCP APU, Audio Codec Interface ==
These are identical with the nForce devices.
== Simple Communication Controller - Generic Modem ==
Nothing is known about the purpose of this device. It never gets
used by the Xbox system software. It is probably there, because the nForce has a PCI softmodem, but in the Xbox, the corresponding lines of the Southbridge don't seem to be connected.
== NV2A GeForce3 Integrated GPU ==
The Xbox graphics hardware is VGA compatible and very similar to
existing nVidia graphics cards.
= Further Information =
Information about all chips and links to technical documentation can
be found at
[https://web.archive.org/web/20100617022211/http://www.console-dev.com/xbox.htm Pixel8's site]
somehting
42026be494ce08bdf4e5162932c7acefe3716b66
5996
5994
2017-08-25T13:40:28Z
JayFoxRox
2
/* Serial EEPROM */
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview}}
The Xbox is a standard PC, based on standard components, but extended with a some security solutions. This document gives an overview of the components the Xbox is made of.
= Overview =
Viewed by connection (similar to the Windows 2000 Device Manager
view), the Xbox system hardware looks like this:
Diagram modified by Fahad
<pre>Xbox V1.0-1.5
|
|-- Mobile Intel Pentium III 733mHz w/128kb Cache
|
|-- Flash ROM (V1.0/1.1 -
|
\-- PCI bus
|
|-- Programmable Interrupt Controller
|
|-- System Timer
|
|-- DMA Controller
|
|-- PCI Bridge Device - Host Bridge (0:0:0, 0x2a5)
|
|-- Memory Controller - SDRAM - Samsung K4D263238M-QC50 133mHz 16mb (0:0:3, 0x2a6)
| |
| |-- Top of Motherboard
| | |
| | |-- Pad 1 (closest to power connector) (empty)
| | |
| | |-- Pad 2 (left of Pad 1)
| | |
| | |-- Pad 3 (below Pad 4)
| | |
| | \-- Pad 4 (closest to AV connector) (empty)
| |
| \-- Bottom of Motherboard
| |
| |-- Pad 5 (paralell to Pad 1) (empty)
| |
| |-- Pad 6 (paralell to Pad 2)
| |
| |-- Pad 7 (paralell to Pad 3)
| |
| \-- Pad 8 (paralell to Pad 4) (empty)
|
|-- HUB Interface - ISA Bridge (0:1:0, 0x1b2) [nForce]
|
|-- SMBus Controller (0:1:1, 0x1b4) [nForce]
| |
| |-- PIC16LC
| |
| |-- Conexant 25871/Focus 454/Xcalibur Video Encoder
| |
| |-- ADM1032 System Temperature Monitor
| |
| \-- Serial EEPROM
|
|-- OHCI USB Controller (0:2:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 1 & 2)
|
|-- OHCI USB Controller (0:3:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 3 & 4)
|
|-- MCP-X V3 Southbridge
| |
| |-- MCP Networking Adapter (0:4:0, 0x1c3) [nForce]
| |
| \-- MCP APU (0:5:0, 0x1b0) [nForce]
|
|-- AC`97 Audio Codec Interface (0:6:0, 0x1b1) [nForce]
|
|-- Simple Communication Controller - Generic Modem (0:6:1, 0x1c1) [???]
|
|-- IDE Controller (0:9:0, 0x1bc) [nForce]
| |
| |-- Primary IDE Channel
| | |
| | |-- Seagate ST3210014ACE 10.2gb (8gb used)/Custom Western Digital WD80EB 8gb hard drive
| | |
| | \-- Custom Samsung/Phillips/Thompson/LG DVD Drive
| |
| \--- Secondary IDE Channel
|
|-- PCI Bridge (0:8:0, 0x1b8) [nForce]
|
\-- AGP Host to PCI Bridge (0:30:0, 0x1b7) [nForce]
|
\-- NV2A GeForce 3MX Integrated GPU/Northbridge 233mHz (1:0:0, 0x2a0)
</pre>
<br />
PCI devices have their Bus:Dev:Func numbers as well as the DevID
printed next to them. PCI devices with "[nForce]" have the same DevIDs as
their counterparts of the nForce chipset.
A derivative of the Xbox chipset is also available as the PC chipset
"nVidia nForce", which consists of a northbridge with the memory
interface and the GPU and the southbridge with the PCI bus and its
devices, just like the Xbox chipset. Many of the southbridge PCI devices
are the same on both versions, i.e. they have the same DevID.
= The Devices in Detail =
== Intel Pentium III CPU ==
The CPU is a standard Pentium III Coppermine mobile at 733 MHz. This CPU has been found to be a modified Pentium III, as it has many of the features a Celeron lacks. Therefore, it can be classified as a Pentium III with a smaller cache. (Regular has 256kb or more, XBox has 128kb)
== Flash ROM ==
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MB; 0xFFFC0000, if the ROM is 256 KB) into the but the Xbox kernel.
== PCI bus, Host Bridge, ISA Bridge, AGP Host to PCI Bridge, Memory Controller ==
These devices are identical to the corresponding devices contained in the nForce chipset. The PCI bus can be accessed like on any PC.
== Programmable Interrupt Controller, System Timer, DMA Controller ==
These legacy PC/AT system devices are fully PC-compatible, but the timer frequency is 6% higher than in a PC.
== SMBus Controller ==
Some low-speed devices are connected through the SMBus, so the
southbridge contains an SMBus controller, compatible to the SMBus
controller in the nVidia nForce chipset. Since nForce is based on AMD's original chipset for Athlon CPUs, the SMBus controller is AMD-756 compatible.
== PIC16LC ==
The PIC16LC is a small 8 bit processor running at 20 MHz with its
own ROM, RAM and I/O lines. It controls:
* Power button
* Eject button
* Power/error LED
* DVD tray status (through extra pins to DVD drive)
* Video cable type (3 pins)
The PIC is always running, even if the Xbox is turned off. When the
power cable is unplugged, it gets its energy from a capacitor for some
hours.
== Video Encoder ==
See [[Video Encoder]]
== ADM1032 System Temperature Monitor ==
The Analog Devices ADM1032 is an SMBus device that does temperature
measurement.
== Serial EEPROM ==
See [[EEPROM]]
== OHCI USB Controller, IDE Controller ==
These devices are compatible to standard PC devices.
== MCP Networking Adapter, MCP APU, Audio Codec Interface ==
These are identical with the nForce devices.
== Simple Communication Controller - Generic Modem ==
Nothing is known about the purpose of this device. It never gets
used by the Xbox system software. It is probably there, because the nForce has a PCI softmodem, but in the Xbox, the corresponding lines of the Southbridge don't seem to be connected.
== NV2A GeForce3 Integrated GPU ==
The Xbox graphics hardware is VGA compatible and very similar to
existing nVidia graphics cards.
= Further Information =
Information about all chips and links to technical documentation can
be found at
[https://web.archive.org/web/20100617022211/http://www.console-dev.com/xbox.htm Pixel8's site]
somehting
0d6db561bbe01d5efb365f3ea538073f3dc1b6ac
5998
5996
2017-08-25T13:42:54Z
JayFoxRox
2
/* PIC16LC */
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview}}
The Xbox is a standard PC, based on standard components, but extended with a some security solutions. This document gives an overview of the components the Xbox is made of.
= Overview =
Viewed by connection (similar to the Windows 2000 Device Manager
view), the Xbox system hardware looks like this:
Diagram modified by Fahad
<pre>Xbox V1.0-1.5
|
|-- Mobile Intel Pentium III 733mHz w/128kb Cache
|
|-- Flash ROM (V1.0/1.1 -
|
\-- PCI bus
|
|-- Programmable Interrupt Controller
|
|-- System Timer
|
|-- DMA Controller
|
|-- PCI Bridge Device - Host Bridge (0:0:0, 0x2a5)
|
|-- Memory Controller - SDRAM - Samsung K4D263238M-QC50 133mHz 16mb (0:0:3, 0x2a6)
| |
| |-- Top of Motherboard
| | |
| | |-- Pad 1 (closest to power connector) (empty)
| | |
| | |-- Pad 2 (left of Pad 1)
| | |
| | |-- Pad 3 (below Pad 4)
| | |
| | \-- Pad 4 (closest to AV connector) (empty)
| |
| \-- Bottom of Motherboard
| |
| |-- Pad 5 (paralell to Pad 1) (empty)
| |
| |-- Pad 6 (paralell to Pad 2)
| |
| |-- Pad 7 (paralell to Pad 3)
| |
| \-- Pad 8 (paralell to Pad 4) (empty)
|
|-- HUB Interface - ISA Bridge (0:1:0, 0x1b2) [nForce]
|
|-- SMBus Controller (0:1:1, 0x1b4) [nForce]
| |
| |-- PIC16LC
| |
| |-- Conexant 25871/Focus 454/Xcalibur Video Encoder
| |
| |-- ADM1032 System Temperature Monitor
| |
| \-- Serial EEPROM
|
|-- OHCI USB Controller (0:2:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 1 & 2)
|
|-- OHCI USB Controller (0:3:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 3 & 4)
|
|-- MCP-X V3 Southbridge
| |
| |-- MCP Networking Adapter (0:4:0, 0x1c3) [nForce]
| |
| \-- MCP APU (0:5:0, 0x1b0) [nForce]
|
|-- AC`97 Audio Codec Interface (0:6:0, 0x1b1) [nForce]
|
|-- Simple Communication Controller - Generic Modem (0:6:1, 0x1c1) [???]
|
|-- IDE Controller (0:9:0, 0x1bc) [nForce]
| |
| |-- Primary IDE Channel
| | |
| | |-- Seagate ST3210014ACE 10.2gb (8gb used)/Custom Western Digital WD80EB 8gb hard drive
| | |
| | \-- Custom Samsung/Phillips/Thompson/LG DVD Drive
| |
| \--- Secondary IDE Channel
|
|-- PCI Bridge (0:8:0, 0x1b8) [nForce]
|
\-- AGP Host to PCI Bridge (0:30:0, 0x1b7) [nForce]
|
\-- NV2A GeForce 3MX Integrated GPU/Northbridge 233mHz (1:0:0, 0x2a0)
</pre>
<br />
PCI devices have their Bus:Dev:Func numbers as well as the DevID
printed next to them. PCI devices with "[nForce]" have the same DevIDs as
their counterparts of the nForce chipset.
A derivative of the Xbox chipset is also available as the PC chipset
"nVidia nForce", which consists of a northbridge with the memory
interface and the GPU and the southbridge with the PCI bus and its
devices, just like the Xbox chipset. Many of the southbridge PCI devices
are the same on both versions, i.e. they have the same DevID.
= The Devices in Detail =
== Intel Pentium III CPU ==
The CPU is a standard Pentium III Coppermine mobile at 733 MHz. This CPU has been found to be a modified Pentium III, as it has many of the features a Celeron lacks. Therefore, it can be classified as a Pentium III with a smaller cache. (Regular has 256kb or more, XBox has 128kb)
== Flash ROM ==
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MB; 0xFFFC0000, if the ROM is 256 KB) into the but the Xbox kernel.
== PCI bus, Host Bridge, ISA Bridge, AGP Host to PCI Bridge, Memory Controller ==
These devices are identical to the corresponding devices contained in the nForce chipset. The PCI bus can be accessed like on any PC.
== Programmable Interrupt Controller, System Timer, DMA Controller ==
These legacy PC/AT system devices are fully PC-compatible, but the timer frequency is 6% higher than in a PC.
== SMBus Controller ==
Some low-speed devices are connected through the SMBus, so the
southbridge contains an SMBus controller, compatible to the SMBus
controller in the nVidia nForce chipset. Since nForce is based on AMD's original chipset for Athlon CPUs, the SMBus controller is AMD-756 compatible.
== PIC16LC ==
See [[System Management Controller]]
== Video Encoder ==
See [[Video Encoder]]
== ADM1032 System Temperature Monitor ==
The Analog Devices ADM1032 is an SMBus device that does temperature
measurement.
== Serial EEPROM ==
See [[EEPROM]]
== OHCI USB Controller, IDE Controller ==
These devices are compatible to standard PC devices.
== MCP Networking Adapter, MCP APU, Audio Codec Interface ==
These are identical with the nForce devices.
== Simple Communication Controller - Generic Modem ==
Nothing is known about the purpose of this device. It never gets
used by the Xbox system software. It is probably there, because the nForce has a PCI softmodem, but in the Xbox, the corresponding lines of the Southbridge don't seem to be connected.
== NV2A GeForce3 Integrated GPU ==
The Xbox graphics hardware is VGA compatible and very similar to
existing nVidia graphics cards.
= Further Information =
Information about all chips and links to technical documentation can
be found at
[https://web.archive.org/web/20100617022211/http://www.console-dev.com/xbox.htm Pixel8's site]
somehting
57487829a83dcf218c886144b44d57746b4bdb1e
6000
5998
2017-08-25T13:45:18Z
JayFoxRox
2
/* Flash ROM */
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview}}
The Xbox is a standard PC, based on standard components, but extended with a some security solutions. This document gives an overview of the components the Xbox is made of.
= Overview =
Viewed by connection (similar to the Windows 2000 Device Manager
view), the Xbox system hardware looks like this:
Diagram modified by Fahad
<pre>Xbox V1.0-1.5
|
|-- Mobile Intel Pentium III 733mHz w/128kb Cache
|
|-- Flash ROM (V1.0/1.1 -
|
\-- PCI bus
|
|-- Programmable Interrupt Controller
|
|-- System Timer
|
|-- DMA Controller
|
|-- PCI Bridge Device - Host Bridge (0:0:0, 0x2a5)
|
|-- Memory Controller - SDRAM - Samsung K4D263238M-QC50 133mHz 16mb (0:0:3, 0x2a6)
| |
| |-- Top of Motherboard
| | |
| | |-- Pad 1 (closest to power connector) (empty)
| | |
| | |-- Pad 2 (left of Pad 1)
| | |
| | |-- Pad 3 (below Pad 4)
| | |
| | \-- Pad 4 (closest to AV connector) (empty)
| |
| \-- Bottom of Motherboard
| |
| |-- Pad 5 (paralell to Pad 1) (empty)
| |
| |-- Pad 6 (paralell to Pad 2)
| |
| |-- Pad 7 (paralell to Pad 3)
| |
| \-- Pad 8 (paralell to Pad 4) (empty)
|
|-- HUB Interface - ISA Bridge (0:1:0, 0x1b2) [nForce]
|
|-- SMBus Controller (0:1:1, 0x1b4) [nForce]
| |
| |-- PIC16LC
| |
| |-- Conexant 25871/Focus 454/Xcalibur Video Encoder
| |
| |-- ADM1032 System Temperature Monitor
| |
| \-- Serial EEPROM
|
|-- OHCI USB Controller (0:2:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 1 & 2)
|
|-- OHCI USB Controller (0:3:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 3 & 4)
|
|-- MCP-X V3 Southbridge
| |
| |-- MCP Networking Adapter (0:4:0, 0x1c3) [nForce]
| |
| \-- MCP APU (0:5:0, 0x1b0) [nForce]
|
|-- AC`97 Audio Codec Interface (0:6:0, 0x1b1) [nForce]
|
|-- Simple Communication Controller - Generic Modem (0:6:1, 0x1c1) [???]
|
|-- IDE Controller (0:9:0, 0x1bc) [nForce]
| |
| |-- Primary IDE Channel
| | |
| | |-- Seagate ST3210014ACE 10.2gb (8gb used)/Custom Western Digital WD80EB 8gb hard drive
| | |
| | \-- Custom Samsung/Phillips/Thompson/LG DVD Drive
| |
| \--- Secondary IDE Channel
|
|-- PCI Bridge (0:8:0, 0x1b8) [nForce]
|
\-- AGP Host to PCI Bridge (0:30:0, 0x1b7) [nForce]
|
\-- NV2A GeForce 3MX Integrated GPU/Northbridge 233mHz (1:0:0, 0x2a0)
</pre>
<br />
PCI devices have their Bus:Dev:Func numbers as well as the DevID
printed next to them. PCI devices with "[nForce]" have the same DevIDs as
their counterparts of the nForce chipset.
A derivative of the Xbox chipset is also available as the PC chipset
"nVidia nForce", which consists of a northbridge with the memory
interface and the GPU and the southbridge with the PCI bus and its
devices, just like the Xbox chipset. Many of the southbridge PCI devices
are the same on both versions, i.e. they have the same DevID.
= The Devices in Detail =
== Intel Pentium III CPU ==
The CPU is a standard Pentium III Coppermine mobile at 733 MHz. This CPU has been found to be a modified Pentium III, as it has many of the features a Celeron lacks. Therefore, it can be classified as a Pentium III with a smaller cache. (Regular has 256kb or more, XBox has 128kb)
== Flash ROM ==
See [[Flash ROM]]
== PCI bus, Host Bridge, ISA Bridge, AGP Host to PCI Bridge, Memory Controller ==
These devices are identical to the corresponding devices contained in the nForce chipset. The PCI bus can be accessed like on any PC.
== Programmable Interrupt Controller, System Timer, DMA Controller ==
These legacy PC/AT system devices are fully PC-compatible, but the timer frequency is 6% higher than in a PC.
== SMBus Controller ==
Some low-speed devices are connected through the SMBus, so the
southbridge contains an SMBus controller, compatible to the SMBus
controller in the nVidia nForce chipset. Since nForce is based on AMD's original chipset for Athlon CPUs, the SMBus controller is AMD-756 compatible.
== PIC16LC ==
See [[System Management Controller]]
== Video Encoder ==
See [[Video Encoder]]
== ADM1032 System Temperature Monitor ==
The Analog Devices ADM1032 is an SMBus device that does temperature
measurement.
== Serial EEPROM ==
See [[EEPROM]]
== OHCI USB Controller, IDE Controller ==
These devices are compatible to standard PC devices.
== MCP Networking Adapter, MCP APU, Audio Codec Interface ==
These are identical with the nForce devices.
== Simple Communication Controller - Generic Modem ==
Nothing is known about the purpose of this device. It never gets
used by the Xbox system software. It is probably there, because the nForce has a PCI softmodem, but in the Xbox, the corresponding lines of the Southbridge don't seem to be connected.
== NV2A GeForce3 Integrated GPU ==
The Xbox graphics hardware is VGA compatible and very similar to
existing nVidia graphics cards.
= Further Information =
Information about all chips and links to technical documentation can
be found at
[https://web.archive.org/web/20100617022211/http://www.console-dev.com/xbox.htm Pixel8's site]
somehting
257ae61a0b93923c14b2eb772cd182263f941460
6005
6000
2017-08-25T13:54:01Z
JayFoxRox
2
/* Intel Pentium III CPU */
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview}}
The Xbox is a standard PC, based on standard components, but extended with a some security solutions. This document gives an overview of the components the Xbox is made of.
= Overview =
Viewed by connection (similar to the Windows 2000 Device Manager
view), the Xbox system hardware looks like this:
Diagram modified by Fahad
<pre>Xbox V1.0-1.5
|
|-- Mobile Intel Pentium III 733mHz w/128kb Cache
|
|-- Flash ROM (V1.0/1.1 -
|
\-- PCI bus
|
|-- Programmable Interrupt Controller
|
|-- System Timer
|
|-- DMA Controller
|
|-- PCI Bridge Device - Host Bridge (0:0:0, 0x2a5)
|
|-- Memory Controller - SDRAM - Samsung K4D263238M-QC50 133mHz 16mb (0:0:3, 0x2a6)
| |
| |-- Top of Motherboard
| | |
| | |-- Pad 1 (closest to power connector) (empty)
| | |
| | |-- Pad 2 (left of Pad 1)
| | |
| | |-- Pad 3 (below Pad 4)
| | |
| | \-- Pad 4 (closest to AV connector) (empty)
| |
| \-- Bottom of Motherboard
| |
| |-- Pad 5 (paralell to Pad 1) (empty)
| |
| |-- Pad 6 (paralell to Pad 2)
| |
| |-- Pad 7 (paralell to Pad 3)
| |
| \-- Pad 8 (paralell to Pad 4) (empty)
|
|-- HUB Interface - ISA Bridge (0:1:0, 0x1b2) [nForce]
|
|-- SMBus Controller (0:1:1, 0x1b4) [nForce]
| |
| |-- PIC16LC
| |
| |-- Conexant 25871/Focus 454/Xcalibur Video Encoder
| |
| |-- ADM1032 System Temperature Monitor
| |
| \-- Serial EEPROM
|
|-- OHCI USB Controller (0:2:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 1 & 2)
|
|-- OHCI USB Controller (0:3:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 3 & 4)
|
|-- MCP-X V3 Southbridge
| |
| |-- MCP Networking Adapter (0:4:0, 0x1c3) [nForce]
| |
| \-- MCP APU (0:5:0, 0x1b0) [nForce]
|
|-- AC`97 Audio Codec Interface (0:6:0, 0x1b1) [nForce]
|
|-- Simple Communication Controller - Generic Modem (0:6:1, 0x1c1) [???]
|
|-- IDE Controller (0:9:0, 0x1bc) [nForce]
| |
| |-- Primary IDE Channel
| | |
| | |-- Seagate ST3210014ACE 10.2gb (8gb used)/Custom Western Digital WD80EB 8gb hard drive
| | |
| | \-- Custom Samsung/Phillips/Thompson/LG DVD Drive
| |
| \--- Secondary IDE Channel
|
|-- PCI Bridge (0:8:0, 0x1b8) [nForce]
|
\-- AGP Host to PCI Bridge (0:30:0, 0x1b7) [nForce]
|
\-- NV2A GeForce 3MX Integrated GPU/Northbridge 233mHz (1:0:0, 0x2a0)
</pre>
<br />
PCI devices have their Bus:Dev:Func numbers as well as the DevID
printed next to them. PCI devices with "[nForce]" have the same DevIDs as
their counterparts of the nForce chipset.
A derivative of the Xbox chipset is also available as the PC chipset
"nVidia nForce", which consists of a northbridge with the memory
interface and the GPU and the southbridge with the PCI bus and its
devices, just like the Xbox chipset. Many of the southbridge PCI devices
are the same on both versions, i.e. they have the same DevID.
= The Devices in Detail =
== Intel Pentium III CPU ==
See [[CPU]]
== Flash ROM ==
See [[Flash ROM]]
== PCI bus, Host Bridge, ISA Bridge, AGP Host to PCI Bridge, Memory Controller ==
These devices are identical to the corresponding devices contained in the nForce chipset. The PCI bus can be accessed like on any PC.
== Programmable Interrupt Controller, System Timer, DMA Controller ==
These legacy PC/AT system devices are fully PC-compatible, but the timer frequency is 6% higher than in a PC.
== SMBus Controller ==
Some low-speed devices are connected through the SMBus, so the
southbridge contains an SMBus controller, compatible to the SMBus
controller in the nVidia nForce chipset. Since nForce is based on AMD's original chipset for Athlon CPUs, the SMBus controller is AMD-756 compatible.
== PIC16LC ==
See [[System Management Controller]]
== Video Encoder ==
See [[Video Encoder]]
== ADM1032 System Temperature Monitor ==
The Analog Devices ADM1032 is an SMBus device that does temperature
measurement.
== Serial EEPROM ==
See [[EEPROM]]
== OHCI USB Controller, IDE Controller ==
These devices are compatible to standard PC devices.
== MCP Networking Adapter, MCP APU, Audio Codec Interface ==
These are identical with the nForce devices.
== Simple Communication Controller - Generic Modem ==
Nothing is known about the purpose of this device. It never gets
used by the Xbox system software. It is probably there, because the nForce has a PCI softmodem, but in the Xbox, the corresponding lines of the Southbridge don't seem to be connected.
== NV2A GeForce3 Integrated GPU ==
The Xbox graphics hardware is VGA compatible and very similar to
existing nVidia graphics cards.
= Further Information =
Information about all chips and links to technical documentation can
be found at
[https://web.archive.org/web/20100617022211/http://www.console-dev.com/xbox.htm Pixel8's site]
somehting
df4672bbb978ae7018e7a9db0fcce6845559be2f
6007
6005
2017-08-25T13:55:53Z
JayFoxRox
2
/* NV2A GeForce3 Integrated GPU */
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/Xbox_Hardware_Overview}}
The Xbox is a standard PC, based on standard components, but extended with a some security solutions. This document gives an overview of the components the Xbox is made of.
= Overview =
Viewed by connection (similar to the Windows 2000 Device Manager
view), the Xbox system hardware looks like this:
Diagram modified by Fahad
<pre>Xbox V1.0-1.5
|
|-- Mobile Intel Pentium III 733mHz w/128kb Cache
|
|-- Flash ROM (V1.0/1.1 -
|
\-- PCI bus
|
|-- Programmable Interrupt Controller
|
|-- System Timer
|
|-- DMA Controller
|
|-- PCI Bridge Device - Host Bridge (0:0:0, 0x2a5)
|
|-- Memory Controller - SDRAM - Samsung K4D263238M-QC50 133mHz 16mb (0:0:3, 0x2a6)
| |
| |-- Top of Motherboard
| | |
| | |-- Pad 1 (closest to power connector) (empty)
| | |
| | |-- Pad 2 (left of Pad 1)
| | |
| | |-- Pad 3 (below Pad 4)
| | |
| | \-- Pad 4 (closest to AV connector) (empty)
| |
| \-- Bottom of Motherboard
| |
| |-- Pad 5 (paralell to Pad 1) (empty)
| |
| |-- Pad 6 (paralell to Pad 2)
| |
| |-- Pad 7 (paralell to Pad 3)
| |
| \-- Pad 8 (paralell to Pad 4) (empty)
|
|-- HUB Interface - ISA Bridge (0:1:0, 0x1b2) [nForce]
|
|-- SMBus Controller (0:1:1, 0x1b4) [nForce]
| |
| |-- PIC16LC
| |
| |-- Conexant 25871/Focus 454/Xcalibur Video Encoder
| |
| |-- ADM1032 System Temperature Monitor
| |
| \-- Serial EEPROM
|
|-- OHCI USB Controller (0:2:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 1 & 2)
|
|-- OHCI USB Controller (0:3:0, 0x1c2) [nForce]
| |
| \-- USB HUB (Controller Ports 3 & 4)
|
|-- MCP-X V3 Southbridge
| |
| |-- MCP Networking Adapter (0:4:0, 0x1c3) [nForce]
| |
| \-- MCP APU (0:5:0, 0x1b0) [nForce]
|
|-- AC`97 Audio Codec Interface (0:6:0, 0x1b1) [nForce]
|
|-- Simple Communication Controller - Generic Modem (0:6:1, 0x1c1) [???]
|
|-- IDE Controller (0:9:0, 0x1bc) [nForce]
| |
| |-- Primary IDE Channel
| | |
| | |-- Seagate ST3210014ACE 10.2gb (8gb used)/Custom Western Digital WD80EB 8gb hard drive
| | |
| | \-- Custom Samsung/Phillips/Thompson/LG DVD Drive
| |
| \--- Secondary IDE Channel
|
|-- PCI Bridge (0:8:0, 0x1b8) [nForce]
|
\-- AGP Host to PCI Bridge (0:30:0, 0x1b7) [nForce]
|
\-- NV2A GeForce 3MX Integrated GPU/Northbridge 233mHz (1:0:0, 0x2a0)
</pre>
<br />
PCI devices have their Bus:Dev:Func numbers as well as the DevID
printed next to them. PCI devices with "[nForce]" have the same DevIDs as
their counterparts of the nForce chipset.
A derivative of the Xbox chipset is also available as the PC chipset
"nVidia nForce", which consists of a northbridge with the memory
interface and the GPU and the southbridge with the PCI bus and its
devices, just like the Xbox chipset. Many of the southbridge PCI devices
are the same on both versions, i.e. they have the same DevID.
= The Devices in Detail =
== Intel Pentium III CPU ==
See [[CPU]]
== Flash ROM ==
See [[Flash ROM]]
== PCI bus, Host Bridge, ISA Bridge, AGP Host to PCI Bridge, Memory Controller ==
These devices are identical to the corresponding devices contained in the nForce chipset. The PCI bus can be accessed like on any PC.
== Programmable Interrupt Controller, System Timer, DMA Controller ==
These legacy PC/AT system devices are fully PC-compatible, but the timer frequency is 6% higher than in a PC.
== SMBus Controller ==
Some low-speed devices are connected through the SMBus, so the
southbridge contains an SMBus controller, compatible to the SMBus
controller in the nVidia nForce chipset. Since nForce is based on AMD's original chipset for Athlon CPUs, the SMBus controller is AMD-756 compatible.
== PIC16LC ==
See [[System Management Controller]]
== Video Encoder ==
See [[Video Encoder]]
== ADM1032 System Temperature Monitor ==
The Analog Devices ADM1032 is an SMBus device that does temperature
measurement.
== Serial EEPROM ==
See [[EEPROM]]
== OHCI USB Controller, IDE Controller ==
These devices are compatible to standard PC devices.
== MCP Networking Adapter, MCP APU, Audio Codec Interface ==
These are identical with the nForce devices.
== Simple Communication Controller - Generic Modem ==
Nothing is known about the purpose of this device. It never gets
used by the Xbox system software. It is probably there, because the nForce has a PCI softmodem, but in the Xbox, the corresponding lines of the Southbridge don't seem to be connected.
== NV2A GeForce3 Integrated GPU ==
See [[GPU]]
= Further Information =
Information about all chips and links to technical documentation can
be found at
[https://web.archive.org/web/20100617022211/http://www.console-dev.com/xbox.htm Pixel8's site]
somehting
5b43305a92045d7f31efa682925403d4c08b0747
EEPROM
0
3742
5995
5990
2017-08-25T04:49:48Z
KaosEngineer
2482
/* Contents */ Standard Timezone Start address wrong 5C should have been 6C
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xA8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
536452bc6cdfcc98efe2b54594d2940c7536fc4c
6008
5995
2017-08-25T14:04:51Z
JayFoxRox
2
/* Further Reading */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xA8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
8b429162c2014566d8f6ce69e35432e81a5f5e5b
6009
6008
2017-08-25T14:25:59Z
KaosEngineer
2482
/* Contents */ Other XBLive settings? typo 0xA8 should be 0xB8
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** 0x00014000 = NTSC, 0x00038000 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
fe261993c77b833c72c270d3436265a918edb525
6010
6009
2017-08-25T15:01:59Z
KaosEngineer
2482
/* Contents */ 0x58-0x5B Video Standard missing NTSC-J value and the byte ordering wrong should be for little endian not big endian - values for all three standards modified and added as needed.
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| ** Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
cfcbdfeefa707d092f69507b7bc1c15bcca44c75
6011
6010
2017-08-25T15:02:36Z
KaosEngineer
2482
/* Contents */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| 0=MAX rating
|-
| 0xA0
| 0xA3
| 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| 0=Max rating
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
d5bdd14e51ca839d67dfe17b52bbf2544b3fd2f3
6012
6011
2017-08-25T15:14:01Z
KaosEngineer
2482
/* Contents */ Offset 0x93-0xA7 - Three (3) Parental Control entry descriptions updated.
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| other Checksum of next
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
20143c427488f4e78da39aa5ae0d5e0a928bfcda
6014
6012
2017-08-25T15:27:19Z
KaosEngineer
2482
/* Contents */ Checksum2 and Checksum3 descriptions updated
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Bias?
|-
| 0x8C
| 0x8F
| Daylight Bias?
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
d5754ea5394f26c589b6800216998877642c55c8
6016
6014
2017-08-25T15:52:08Z
KaosEngineer
2482
/* Contents */ 0x78 Start Standard Time, 0x7C Start Daylight Saving Time Descriptions Updated
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias - Offset in # minutes from GMT
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST = Yes, 0xFFFFFFC4 (-60); if DST = No, 0x00000000 (0).
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
18cfa69438d03aa1d2646957396c67cd4e943ae8
6017
6016
2017-08-25T16:12:40Z
KaosEngineer
2482
/* Contents */ 0x94-0x97 Video Settings Description updated
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias?
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias - Offset in # minutes from GMT
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST = Yes, 0xFFFFFFC4 (-60); if DST = No, 0x00000000 (0).
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
25ccf3779db1c39a373bab55aedfedd65c126c21
6018
6017
2017-08-25T20:56:21Z
KaosEngineer
2482
/* Contents */ 0x88-8B Standard time zone bias - description updated not sure what this is used for but Zone Bias is offset from GMT to subtract (PIC clock set to GMT ?)
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes from GMT (0x0000168 = 360 = 6hr for GMT-06 Central) subtract value from GMT time
|-
| 0x68
| 0x6B
| Standard timezone
|-
| 0x6C
| 0x6F
| Daylight timezone
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias ?
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST = Yes, 0xFFFFFFC4 (-60); if DST = No, 0x00000000 (0).
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
5e2eecaea9f92a63ab9d8281a43d1659147968bf
6019
6018
2017-08-25T21:02:49Z
KaosEngineer
2482
/* Contents */ 0x68 and 0x6C description update for timezone strings
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes from GMT (0x0000168 = 360 = 6hr for GMT-06 Central) subtract value from GMT time
|-
| 0x68
| 0x6B
| Standard timezone - NULL terminated length 3 string (e.g., CST\0)
|-
| 0x6C
| 0x6F
| Daylight timezone - NULL terminated length 3 string (e.g., CDT\0)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias ? (0x00000000)
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST = Yes, 0xFFFFFFC4 (-60); if DST = No, 0x00000000 (0).
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
419c01b6c4ea32a71d3fa465d1df30f62338b09d
6020
6019
2017-08-25T21:27:23Z
KaosEngineer
2482
/* The Serial Number */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes from GMT (0x0000168 = 360 = 6hr for GMT-06 Central) subtract value from GMT time
|-
| 0x68
| 0x6B
| Standard timezone - NULL terminated length 3 string (e.g., CST\0)
|-
| 0x6C
| 0x6F
| Daylight timezone - NULL terminated length 3 string (e.g., CDT\0)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias ? (0x00000000)
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST = Yes, 0xFFFFFFC4 (-60); if DST = No, 0x00000000 (0).
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre>
1166356 20903
|\____/ |||||
| | |||||
| | |||||___ factory number (2 digits - 02 = Mexico, 03=Hungary, 05=China, 06=Taiwan)
| | |||
| | |||____ week of year (starting Mondays) (2 digits)
| | |______ last digit of year
| |
| |_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
a7d9388857cdaf10ddfdff237f1fe5f7eec28f30
6021
6020
2017-08-25T21:28:34Z
KaosEngineer
2482
/* The Serial Number */ reverted back to previous version
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes from GMT (0x0000168 = 360 = 6hr for GMT-06 Central) subtract value from GMT time
|-
| 0x68
| 0x6B
| Standard timezone - NULL terminated length 3 string (e.g., CST\0)
|-
| 0x6C
| 0x6F
| Daylight timezone - NULL terminated length 3 string (e.g., CDT\0)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias ? (0x00000000)
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST = Yes, 0xFFFFFFC4 (-60); if DST = No, 0x00000000 (0).
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
419c01b6c4ea32a71d3fa465d1df30f62338b09d
6022
6021
2017-08-25T21:41:39Z
KaosEngineer
2482
/* The Serial Number */ Testing wikimedia table generator format, adding in addition to current, can remove if it sucks!
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes from GMT (0x0000168 = 360 = 6hr for GMT-06 Central) subtract value from GMT time
|-
| 0x68
| 0x6B
| Standard timezone - NULL terminated length 3 string (e.g., CST\0)
|-
| 0x6C
| 0x6F
| Daylight timezone - NULL terminated length 3 string (e.g., CDT\0)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias ? (0x00000000)
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST = Yes, 0xFFFFFFC4 (-60); if DST = No, 0x00000000 (0).
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
79fd20b604c5dcb24849c62c846b69ed53844506
6023
6022
2017-08-25T21:46:32Z
KaosEngineer
2482
/* The Serial Number */ Added factory countries to wikimedia generator's table
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 156 bytes
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes from GMT (0x0000168 = 360 = 6hr for GMT-06 Central) subtract value from GMT time
|-
| 0x68
| 0x6B
| Standard timezone - NULL terminated length 3 string (e.g., CST\0)
|-
| 0x6C
| 0x6F
| Daylight timezone - NULL terminated length 3 string (e.g., CDT\0)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias ? (0x00000000)
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST = Yes, 0xFFFFFFC4 (-60); if DST = No, 0x00000000 (0).
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ?
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
6b3679afa3a7cdda2e4be519fbe9fc1388e6e8d6
6035
6023
2017-08-27T00:13:31Z
KaosEngineer
2482
/* Contents */ Corrections to a few entries, Checksum3 range, Standard Time zone bios, unknown region last 64 bytes (DO NOT modify content there)
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC-M, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 bytes (0x64-0xBF)
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes from GMT (0x0000168 = 360 = 6hr for GMT-06 Central) subtract value from GMT time
|-
| 0x68
| 0x6B
| Standard timezone - NULL terminated length 3 string (e.g., CST\0)
|-
| 0x6C
| 0x6F
| Daylight timezone - NULL terminated length 3 string (e.g., CDT\0)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias = if DST=No, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST=Yes, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A? see 10 too = Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
b8a3e03abc63519d4384ce76b2798b8d975c486a
6036
6035
2017-08-27T00:20:40Z
KaosEngineer
2482
/* Contents */ there was an = should have been a ; for 0x88-0x8F offset standard time zone bias description
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC-M, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 bytes (0x64-0xBF)
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes from GMT (0x0000168 = 360 = 6hr for GMT-06 Central) subtract value from GMT time
|-
| 0x68
| 0x6B
| Standard timezone - NULL terminated length 3 string (e.g., CST\0)
|-
| 0x6C
| 0x6F
| Daylight timezone - NULL terminated length 3 string (e.g., CDT\0)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| if DST=Yes, Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x7C
| 0x7F
| if DST=Yes, Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour); otherwise do not change time
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if DST=No, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST=Yes, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings Offset 0x96 value 0x4A? see 10 too = Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode - 4 button sequence - 7=X, 8=Y, B=LTrigger, C=RTrigger
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
eba4895291a91896047de5a6061a4114b3d93ade
6037
6036
2017-08-27T01:31:38Z
KaosEngineer
2482
/* Contents */ Descriptions updated for timezone standard and daylight start dates, parental passcode, video settings reverted most to original as not what I was seeing still need to test more settings here.
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC-M, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 bytes (0x64-0xBF)
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time (e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard timezone - 4 character Standard TZ name; NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight timezone - 4 character Daylight TZ name; NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings; Offset 0x96, 0x??=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (0x07=X, 0x08=Y, 0x0B=LTrigger, 0x0C=RTrigger) (0 = disabled)
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
7c5ef9e071ce64e82178b06981d38de2a98b6fd3
6038
6037
2017-08-27T01:35:04Z
KaosEngineer
2482
/* Contents */ standard and daylight timezone name descriptions reworded (shortened)
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 bytes
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| **Video Standard 0x00400100 = NTSC-M, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 bytes (0x64-0xBF)
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time (e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings; Offset 0x96, 0x??=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (0x07=X, 0x08=Y, 0x0B=LTrigger, 0x0C=RTrigger) (0 = disabled)
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
f79e1b2f47223ca1279e8d527f312b6e747853c6
System Management Controller
0
3748
5997
5491
2017-08-25T13:42:33Z
JayFoxRox
2
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
It is also the hardware which is connected to the Power and Eject buttons.
The PIC is running at 20 MHz with its own ROM, RAM and I/O lines.
The PIC is always running, even if the Xbox is turned off. When the power cable is unplugged, it gets its energy from a capacitor for some hours.
It is connected via I²C and located on address 0x10.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
* P2L{{citation needed}}
* D01 (Seen in a debug kit)
bcc9662997931149d4c1a738e196e4651dfacff6
Flash ROM
0
3762
5999
5637
2017-08-25T13:44:57Z
JayFoxRox
2
wikitext
text/x-wiki
The Flash is a 256 kiB or 1 MiB non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip and connected to the [[MCPX]] via the <abbr title="Low Pin Count">LPC</abbr> bus.
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MiB; 0xFFFC0000, if the ROM is 256 kiB) into the but the Xbox kernel.
For the content of the Microsoft flash images see [[BIOS]].
9269e690a1068100a9bdb65a43bb0618aaf59899
6001
5999
2017-08-25T13:45:41Z
JayFoxRox
2
JayFoxRox moved page [[Flash]] to [[Flash ROM]] without leaving a redirect
wikitext
text/x-wiki
The Flash is a 256 kiB or 1 MiB non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip and connected to the [[MCPX]] via the <abbr title="Low Pin Count">LPC</abbr> bus.
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MiB; 0xFFFC0000, if the ROM is 256 kiB) into the but the Xbox kernel.
For the content of the Microsoft flash images see [[BIOS]].
9269e690a1068100a9bdb65a43bb0618aaf59899
Main Page
0
1
6002
5956
2017-08-25T13:46:01Z
JayFoxRox
2
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
b40900fb292908e0e52b1bd7e714f07a7acc12e6
Memory
0
3674
6003
5709
2017-08-25T13:46:35Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. On Debug Xboxs and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFE000000
|-
|APU Registers
|colspan="2"|0xFE800000 - 0xFE880000
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC01000
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED01000
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED09000
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF00400
|-
|[[Flash]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory(location + 1) << 8 | get_memory(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
401a84491ea2a9de87829e025ec77b7dbe21f965
BIOS
0
3672
6004
5855
2017-08-25T13:47:47Z
JayFoxRox
2
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000 - 0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash ROM]]. The BIOS image is actually 256 kiB, duplicated 4 times to fill the 1 MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1 MiB and some are 256 kiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256 kiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! Unknown
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| 0x0619C || || || || || || ||
|-
! Kernel Data Segment
| 0x3944C || || || || || || ||
|-
! 2BL <br> ''Always 0x6000 bytes''
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL <br> ''Always 0x2880 bytes''
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== Unknown ===
From 0x00000000 - 0x0000007F
Not sure what this does. Some people think it might be involved with initialising the [[MCPX]]{{citation needed}}. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM{{citation needed}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
97c4e2c6f52b4393804a7870aa51e7b19f75ddd1
CPU
0
3681
6006
5921
2017-08-25T13:54:32Z
JayFoxRox
2
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium III running at 733MHz. The 'custom' part of this was that that the Pentium III in the Xbox was that it had only 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [http://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/28365403.pdf Mobile Intel® Celeron® Processor (0.18μ) in BGA2 and Micro-PGA2 Packages] (This datasheet is for the mobile version Coppermine with 256kB L2 cache. It does not contain the Xbox Coppermine-128 with 128kB L2 cache at 733MHz (S-Spec SL5SN). No such datasheet exists. Both differences are pin compatible.
* [https://www.google.com/patents/US20050282621 CPU upgrading adapter for a Microsoft XboxTM game machine] US Patent Application 20050282621 by Friendtech, filed 2003-08-21.
753ed527b2f41e89f7449f005166ac42312fb7be
Motherboard
0
3756
6013
5483
2017-08-25T15:20:15Z
Codeasm
2480
Added motherboard part table based on source, and usb
wikitext
text/x-wiki
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
== Mainboard ==
The following table is based on a Xbox 1.0{{citation needed}} retail board
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
Only the 1.0 and 1.2(?) {{citation needed}} had a USB daugtherboard
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm]
7433faf7e8c4e8007c287ec8fc67bcc567c5502c
6015
6013
2017-08-25T15:48:24Z
Codeasm
2480
Changed USB daugtherboard detail and added credit
wikitext
text/x-wiki
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
== Mainboard ==
The following table is based on a Xbox 1.0{{citation needed}} retail board and credits go to PiXEL8
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
Only the 1.0 and 1.1 {{citation needed}} had a USB daugtherboard
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm]
9853361e799d2d9817879fcfc7a19afaf462282d
Xbox DVD Movie Playback Kit
0
3768
6024
5986
2017-08-26T08:42:24Z
Akspa
2493
/* X08-25387 (PCB: "IR DONGLE REV B") */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
{{FIXME|reason=See http://wiki.tolabaki.gr/mediawiki/images/d/db/Xbox_rc_vanilla.jpg . Needs more pics}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
3299154ce8249e3b5c1a6934d53142ffc52794b3
6025
6024
2017-08-26T08:45:17Z
Akspa
2493
/* X08-25387 (PCB: "IR DONGLE REV B") - added images of frontside PCB */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
{{FIXME|reason=See http://wiki.tolabaki.gr/mediawiki/images/d/db/Xbox_rc_vanilla.jpg . Needs more pics}}
[[File:IR_DONGLE_REV_B.jpeg|thumb|200px|Frontside(Initial)]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|TSOP]]
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
80e2cfa6b5dd0c1562c350385af67aa3047acaf8
6028
6025
2017-08-26T08:46:35Z
Akspa
2493
/* X08-25387 (PCB: "IR DONGLE REV B") - reduced to a single image with part numbers */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|FrontPCB]]
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
814bd58dfd34cc6695e8fe6eb6bf5a272ad9ee91
6029
6028
2017-08-26T08:48:36Z
Akspa
2493
/* X08-25387 (PCB: "IR DONGLE REV B") */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|FrontPCB]]
* U3 MX23C4000TC-10
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
de8dfc190952e14dfa6292ce904ff75c21e48ffd
6030
6029
2017-08-26T08:50:05Z
Akspa
2493
/* X08-25387 (PCB: "IR DONGLE REV B") */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
* U3 MX23C4000TC-10
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of "IR DONGLE REV B"]]
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
067554e381eb6e687a60223df43e0d5c61e55f4d
6032
6030
2017-08-26T08:53:24Z
Akspa
2493
/* X08-25387 (PCB: "IR DONGLE REV B") - Sticker */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|IR Dongle Rev B Sticker]]
* U3 MX23C4000TC-10
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of "IR DONGLE REV B"]]
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
50ee9c3987b970e9f6a21bd06bee35c247b8bae9
6033
6032
2017-08-26T08:59:15Z
Akspa
2493
/* Components */
wikitext
text/x-wiki
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
85fd2bb5a8ac1e44e4ccef5c752b9f64a5dcf77a
6040
6033
2017-08-27T04:00:19Z
DaveX
2487
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || || || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
4cc61798c03f0caa871384fdd324c926e2195ea7
File:IR DONGLE REV B.jpeg
6
3834
6026
2017-08-26T08:45:29Z
Akspa
2493
Image of front of pcb
wikitext
text/x-wiki
Image of front of pcb
0d18e5a024069da59e392aebdd4fd93d96d82d78
File:IR DONGLEREVB-FRNT.jpeg
6
3835
6027
2017-08-26T08:45:33Z
Akspa
2493
Front of PCB with TSOP part numbers visible
wikitext
text/x-wiki
Front of PCB with TSOP part numbers visible
b87e521efe6509bdd3151c1a14bec289e05cbd27
File:X08-25387-Sticker.jpeg
6
3836
6031
2017-08-26T08:52:37Z
Akspa
2493
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
User:Akspa
2
3837
6034
2017-08-26T09:14:26Z
Akspa
2493
Created page with "Been tinkering with Xbox stuff since 2001. Be it hardware, software, or otherwise. Under different usernames, I've been involved in: Xbox Linux dev, halo map modding (and some..."
wikitext
text/x-wiki
Been tinkering with Xbox stuff since 2001. Be it hardware, software, or otherwise. Under different usernames, I've been involved in: Xbox Linux dev, halo map modding (and some corresponding GUI tools), softmod updated repacks, and lots of really badly thought-out potential attack points to exploit the xbox security system. I've attempted getting the Xbox Alpha Kit software running under virtualization, going as far as to edit the system xbe's in order to skip over nvidia hardware checks, without knowing anything about opcodes and the like (and likely, xbe/exe signatures, which just dawned on me this moment). I've kept my xbox's alive for the past 14 years, and still have a decent library of Xbox and Xbox 360 discs.
0c5d7b8307fd9de5c8a212c942f05c1df4fa0c00
File:Xbox-Remote-and-Receiver.jpg
6
3838
6039
2017-08-27T03:58:54Z
DaveX
2487
Author: "Evan Amos Vanamo Media"
Copyright holder: "Public Domain"
wikitext
text/x-wiki
Author: "Evan Amos Vanamo Media"
Copyright holder: "Public Domain"
7996318047cddcf91cafc0449dca2bb3b3fcadc9
Hard Drive
0
3707
6041
5729
2017-08-28T02:25:03Z
KaosEngineer
2482
/* Models */ Added a few models from data I'd saved from working on Xbox's (I need to better compile my data in a spreadsheet/database. Looking through all these files takes too long.)
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
== Models ==
{| class="wikitable
|-
! Xbox Version
! Manufacturer
! Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
1b9ef96a99e9249ed3aa7832c634231e65348ff2
6042
6041
2017-08-28T02:25:34Z
KaosEngineer
2482
/* Models */
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
== Models ==
{| class="wikitable
|-
! Xbox Version
! Manufacturer
! Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
d84ed4572218894fee3df335d806ad29ee9b3f27
6043
6042
2017-08-28T08:19:59Z
JayFoxRox
2
/* Partitions */
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
== Models ==
{| class="wikitable
|-
! Xbox Version
! Manufacturer
! Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
d65ef617f6b068352d8a175594e3a00d4ad217a7
EEPROM
0
3742
6044
6038
2017-08-28T12:46:12Z
KaosEngineer
2482
/* Contents */ ConfigMagic-Final-1.6 EEPROM Checksum anomalies (wrong value for size parameter to QuickCRC function call).
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard 0x00400100 = NTSC-M, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings; Offset 0x96, 0x??=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (0x07=X, 0x08=Y, 0x0B=LTrigger, 0x0C=RTrigger) (0 = disabled)
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 used the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 was correct since the extra 4 bytes not used in the CRC computation were all 0's which would not change the computed CRC value. However, Simliar problem with computation of Checksum3, the extra 4 bytes used are all 0's on all but v1.6 Xbox's. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
60de86e768dd85bedfcbeb9c9449dba5fa240d76
6045
6044
2017-08-28T12:48:59Z
KaosEngineer
2482
/* Contents */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard 0x00400100 = NTSC-M, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings; Offset 0x96, 0x??=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (0x07=X, 0x08=Y, 0x0B=LTrigger, 0x0C=RTrigger) (0 = disabled)
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 used the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The extra 4 bytes used are all 0's on all but v1.6 Xbox's. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
e4d606da02409caf7e0f40b247b58fe8a980ef02
6046
6045
2017-08-28T12:51:56Z
KaosEngineer
2482
/* Contents */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard 0x00400100 = NTSC-M, 0x00400200 = NTSC-J, 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings; Offset 0x96, 0x??=Normal, 0xB0=Widescreen and 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0=MAX rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (0x07=X, 0x08=Y, 0x0B=LTrigger, 0x0C=RTrigger) (0 = disabled)
|-
| 0xA4
| 0xA7
| Parental Control Movies (0=Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
81df1948d4845ec49204d8007758bfa078651256
6051
6046
2017-08-28T13:41:09Z
JayFoxRox
2
Cleanup
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Parental Control Games (0 = Max rating)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence
* 0x07 = {{input-x}}
* 0x08 = {{input-y}}
* 0x0B = {{input-lt}}
* 0x0C = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
|-
| 0xA4
| 0xA7
| Parental Control Movies (0 = Max rating)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
b4c2ee1862d32bc60d57811f260776f9a632cdcc
6091
6051
2017-08-29T16:50:07Z
KaosEngineer
2482
/* Contents */ Update Movie and Game parental control level notes only 1 byte needed remaining 3 for proper 4-byte alignment of data (32-bit boundary), also parental pass code saved in 2 bytes doesn't need all 4.
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble not byte)
* 0x01 = {{input-up}}
* 0x02 = {{input-down}}
* 0x03 = {{input-left}}
* 0x04 = {{input-right}}
* 0x07 = {{input-x}}
* 0x08 = {{input-y}}
* 0x0B = {{input-lt}}
* 0x0C = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:
EEPROM offset 0xA0: 23 14 00 00
Little Endian value 0x00001423.
The pass code is D-pad directions up (0x01), right (0x04), down (0x02), left (0x03).
Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
97d1e1561e1d4313570271e00809fba7693c10fc
6092
6091
2017-08-29T16:56:34Z
KaosEngineer
2482
/* Contents */ formatting of Note on pass code storage in a word (2-bytes) not 4 (remaining 2 for even 32-bit data alignment)
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble not byte)
* 0x01 = {{input-up}}
* 0x02 = {{input-down}}
* 0x03 = {{input-left}}
* 0x04 = {{input-right}}
* 0x07 = {{input-x}}
* 0x08 = {{input-y}}
* 0x0B = {{input-lt}}
* 0x0C = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: 23 14 00 00
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x01), right (0x04), down (0x02), left (0x03).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
882d2da9ddb02a0039f3c472dd61473877694b17
6093
6092
2017-08-29T17:03:01Z
KaosEngineer
2482
/* Contents */ 0xA0 Note formatting still no quite right trying to get a list inside the Note box 1 space before each line but the * doesn't make a list inside
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble not byte)
* 0x01 = {{input-up}}
* 0x02 = {{input-down}}
* 0x03 = {{input-left}}
* 0x04 = {{input-right}}
* 0x07 = {{input-x}}
* 0x08 = {{input-y}}
* 0x0B = {{input-lt}}
* 0x0C = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: 23 14 00 00
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x01), right (0x04), down (0x02), left (0x03).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
7fba14545ef8aaa0587d176d21181829d7c91110
6094
6093
2017-08-29T21:55:01Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: 23 14 00 00
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x01), right (0x04), down (0x02), left (0x03).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
4f7166aefb6a7b3c53c64d7fe7e3ee07979e4756
6095
6094
2017-08-29T22:00:01Z
JayFoxRox
2
Fix formatting issue
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x01), right (0x04), down (0x02), left (0x03).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00
| None
|-
| 0x01
| Region 1
|-
| ...
| ...
|-
| 0x06
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
958f7c9177c139b7ac05bf6dfa1ca5b4c53b6d4c
6096
6095
2017-08-29T22:03:51Z
JayFoxRox
2
DWORD should imply 4 byte
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x01), right (0x04), down (0x02), left (0x03).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 1
| North America
|-
| 2
| Japan
|-
| 4
| Europe/Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
0b26312bf181d0e3b1d71f8dbd8e795f140c72e2
6097
6096
2017-08-29T22:04:22Z
JayFoxRox
2
DWORD should imply 4 byte
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x0000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x01), right (0x04), down (0x02), left (0x03).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
5279aa38d075bdc4535ab62911b2d31f1a1a13c7
Template:Input-x
10
3839
6047
2017-08-28T13:39:02Z
JayFoxRox
2
Created page with "X-Button"
wikitext
text/x-wiki
X-Button
bad91d311f01eb615dc96ea0f090a1349214b11b
Template:Input-y
10
3840
6048
2017-08-28T13:39:09Z
JayFoxRox
2
Created page with "Y-Button"
wikitext
text/x-wiki
Y-Button
685ca0c76a5e11062452343edb0444399602966b
Template:Input-lt
10
3841
6049
2017-08-28T13:39:16Z
JayFoxRox
2
Created page with "Left-Trigger"
wikitext
text/x-wiki
Left-Trigger
07be225e1046b8c5b1ddef8121b445cc888c053b
Template:Input-rt
10
3842
6050
2017-08-28T13:39:23Z
JayFoxRox
2
Created page with "Right-Trigger"
wikitext
text/x-wiki
Right-Trigger
77e800e462d20481e2a77feb2a72397f4a2b65e7
Template:Input-a
10
3843
6052
2017-08-28T13:42:11Z
JayFoxRox
2
Created page with "A-Button"
wikitext
text/x-wiki
A-Button
1d4e1d655b048a41b90622e8b3c9647d162d1e64
Template:Input-b
10
3844
6053
2017-08-28T13:42:20Z
JayFoxRox
2
Created page with "B-Button"
wikitext
text/x-wiki
B-Button
5010e317dbe33e5eeaf82aa4597b4b74d7a68e45
Template:Input-dy+
10
3845
6054
2017-08-28T13:48:15Z
JayFoxRox
2
Created page with "Digital-Pad-Up"
wikitext
text/x-wiki
Digital-Pad-Up
e76f3cb45774278b5e6bb99e7fd82820affaa682
Template:Input-dy-
10
3846
6055
2017-08-28T13:48:26Z
JayFoxRox
2
Created page with "Digital-Pad-Down"
wikitext
text/x-wiki
Digital-Pad-Down
1b2c2d2669665958c92cc72eda77e0a2571fa1e8
Template:Input-dy
10
3847
6056
2017-08-28T13:48:38Z
JayFoxRox
2
Created page with "Digital-Pad-Vertical"
wikitext
text/x-wiki
Digital-Pad-Vertical
39e96e22c596ee1c6c37dd8586c3391a00ea2f3b
Template:Input-dx
10
3848
6057
2017-08-28T13:48:48Z
JayFoxRox
2
Created page with "Digital-Pad-Horizontal"
wikitext
text/x-wiki
Digital-Pad-Horizontal
c2eb34da9f70feecabef7fa5859080b385632d8a
Template:Input-dx-
10
3849
6058
2017-08-28T13:48:56Z
JayFoxRox
2
Created page with "Digital-Pad-Left"
wikitext
text/x-wiki
Digital-Pad-Left
659cb63da6425b0ee0e0c340d6fd927ba80599d1
Template:Input-dx+
10
3850
6059
2017-08-28T13:49:04Z
JayFoxRox
2
Created page with "Digital-Pad-Right"
wikitext
text/x-wiki
Digital-Pad-Right
ef99efa1a042bbbc54ed3e4ed1a4195d085095b4
Template:Input-ls
10
3851
6060
2017-08-28T13:49:28Z
JayFoxRox
2
Created page with "Left-Thumbstick-Press"
wikitext
text/x-wiki
Left-Thumbstick-Press
24b9bc2db80c5d165d74b3d1d359699c6c6f712c
Template:Input-lx
10
3852
6061
2017-08-28T13:49:37Z
JayFoxRox
2
Created page with "Left-Thumbstick-Horizontal"
wikitext
text/x-wiki
Left-Thumbstick-Horizontal
1c1050637c0fc018a58c8197554ebf6984cce186
Template:Input-lx-
10
3853
6062
2017-08-28T13:49:47Z
JayFoxRox
2
Created page with "Left-Thumbstick-Left"
wikitext
text/x-wiki
Left-Thumbstick-Left
2c18158e3df41d4e8d29f48b1c899c088ef6f271
Template:Input-lx+
10
3854
6063
2017-08-28T13:49:57Z
JayFoxRox
2
Created page with "Left-Thumbstick-Right"
wikitext
text/x-wiki
Left-Thumbstick-Right
4ad6c46904a9c0d7d8539c1aee9f2447ec0f2143
Template:Input-ly
10
3855
6064
2017-08-28T13:50:09Z
JayFoxRox
2
Created page with "Left-Thumbstick-Vertical"
wikitext
text/x-wiki
Left-Thumbstick-Vertical
b82b3ecb6a3e627598ce96d0e62bf55f94d43f8f
Template:Input-ly+
10
3856
6065
2017-08-28T13:50:25Z
JayFoxRox
2
Created page with "Left-Thumbstick-Up"
wikitext
text/x-wiki
Left-Thumbstick-Up
f1bf9a39ebc6ba3e95eb4581ed6c11dc947f52c7
Template:Input-ly-
10
3857
6066
2017-08-28T13:50:36Z
JayFoxRox
2
Created page with "Left-Thumbstick-Down"
wikitext
text/x-wiki
Left-Thumbstick-Down
72d6d576457509b288714162a58e2458184baf5b
Template:Input-rs
10
3858
6067
2017-08-28T13:50:50Z
JayFoxRox
2
Created page with "Right-Thumbstick-Press"
wikitext
text/x-wiki
Right-Thumbstick-Press
8275f42a29aaaf8bb3ef27c7f28bbba3e05641dc
Template:Input-rx
10
3859
6068
2017-08-28T13:51:01Z
JayFoxRox
2
Created page with "Right-Thumbstick-Horizontal"
wikitext
text/x-wiki
Right-Thumbstick-Horizontal
ddb9c26861325cb3d5bdef15d1678273fe15df2a
Template:Input-rx-
10
3860
6069
2017-08-28T13:51:11Z
JayFoxRox
2
Created page with "Right-Thumbstick-Left"
wikitext
text/x-wiki
Right-Thumbstick-Left
c9ab59bc45eb3702afb0cf1df2916bb0104dc638
Template:Input-rx+
10
3861
6070
2017-08-28T13:51:22Z
JayFoxRox
2
Created page with "Right-Thumbstick-Right"
wikitext
text/x-wiki
Right-Thumbstick-Right
7f9c46b880fbeb6473e4253c81855051a005b871
Template:Input-ry
10
3862
6071
2017-08-28T13:51:44Z
JayFoxRox
2
Created page with "Right-Thumbstick-Vertical"
wikitext
text/x-wiki
Right-Thumbstick-Vertical
93b22a766d76fa6eb64a873ee9b42b0375e8080e
Template:Input-ry-
10
3863
6072
2017-08-28T13:51:58Z
JayFoxRox
2
Created page with "Right-Thumbstick-Down"
wikitext
text/x-wiki
Right-Thumbstick-Down
620f00dc512aeece238038daa3353b9d6e9bd06d
Template:Input-ry+
10
3864
6073
2017-08-28T13:52:06Z
JayFoxRox
2
Created page with "Right-Thumbstick-Up"
wikitext
text/x-wiki
Right-Thumbstick-Up
d326ff540175353f58c4c8d2154fc781a236ac53
Template:Input-black
10
3865
6074
2017-08-28T13:52:15Z
JayFoxRox
2
Created page with "Black"
wikitext
text/x-wiki
Black
b406fb57b29fc76f71864fbb37f0238045f84d9d
6077
6074
2017-08-28T13:52:48Z
JayFoxRox
2
wikitext
text/x-wiki
Black-Button
c62794bfd8d9590b52146d852cb253634747a664
Template:Input-white
10
3866
6075
2017-08-28T13:52:23Z
JayFoxRox
2
Created page with "White"
wikitext
text/x-wiki
White
37619fc13053f82b7cb7da3d24ceb1598ab6d05c
6078
6075
2017-08-28T13:52:58Z
JayFoxRox
2
wikitext
text/x-wiki
White-Button
a49c0550c5f97454b2f2f85c7e166f8bdd74a5ed
Template:Input-start
10
3867
6076
2017-08-28T13:52:40Z
JayFoxRox
2
Created page with "Start-Button"
wikitext
text/x-wiki
Start-Button
936f0136c0c43b729e0c1656cdbd25da4eb7474a
Template:Input-back
10
3868
6079
2017-08-28T13:53:08Z
JayFoxRox
2
Created page with "Back-Button"
wikitext
text/x-wiki
Back-Button
33ecbf96046c5572ee5faa39d3720a10e7e58ec0
Xbox Input Devices
0
11
6080
5988
2017-08-28T13:54:46Z
JayFoxRox
2
/* Controller to Xbox */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || Directional Pad ||
|-
| Trigger || A || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || B
|-
| A || X
|-
| B || Y
|-
| START || Start ||
|-
| SE/BA || Back ||
|-
| Aim Left / Right || Negative / Positive on left thumbstick X axis || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || Positive / Negative on left thumbstick Y axis
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps A pressed while trigger is held
* Turbo mode 1 toggles A rapidly while trigger is held
* Turbo mode 2 toggles A rapidly and once in a while B while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
832a7e638f06dc169cfb5e8433ce596a42388217
6084
6080
2017-08-28T13:57:55Z
JayFoxRox
2
Use button templates
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || Directional Pad ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
72bfc406062889ffb8731bab30956b305162ffbe
6085
6084
2017-08-28T13:58:19Z
JayFoxRox
2
/* EMS TopGun II */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
bd781c76f81217a7627e10d3e772f83e0b8f660e
Template:Input-d
10
3869
6081
2017-08-28T13:55:32Z
JayFoxRox
2
Created page with "Digital-Pad"
wikitext
text/x-wiki
Digital-Pad
026b3e735d4027c1e4342aa372f2093469267c50
Template:Input-r
10
3870
6082
2017-08-28T13:55:41Z
JayFoxRox
2
Created page with "Right-Thumbstick"
wikitext
text/x-wiki
Right-Thumbstick
47623753d7c2a775184ca392b7ee44edea3707b4
Template:Input-l
10
3871
6083
2017-08-28T13:55:52Z
JayFoxRox
2
Created page with "Left-Thumbstick"
wikitext
text/x-wiki
Left-Thumbstick
fa832ea928026a4e7d440f306c109a4ffee96fdf
Xbox DVD Movie Playback Kit
0
3768
6086
6040
2017-08-28T20:35:53Z
Codeasm
2480
/* Known versions */ Im almost sure its region 2 (X08-25402-002) but ill dump the Rom tomorow
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || ||2 || || ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
85c08c31dbc430347f2437eda60a9df0133eb5d9
Talk:EEPROM
1
3743
6098
5427
2017-08-29T22:06:07Z
JayFoxRox
2
/* Redundant information */ new section
wikitext
text/x-wiki
== Chihiro key ==
Wouldn't we consider crypto-keys "dodgy shit"?
Why is this here?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:49, 25 May 2017 (PDT)
== Redundant information ==
Some values are explained in the table, others are explained below.
We should figure out where to put this.
I think putting it in the table makes more sense.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 15:06, 29 August 2017 (PDT)
0e75e9e4588f3b1db1bc486c918ea3861dc66596
Xtf
0
3831
6099
5981
2017-08-30T02:02:11Z
CobaltHex
2492
added specimin image
wikitext
text/x-wiki
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
{{Sidebar
| name = Xtf
| title = Xtf Font Format
| image = [[File:http://i.imgur.com/u2P069H.png]]
=== File format ===
{{FIXME}}
a4570b034e4291d080f3fe7ab93dded897936319
6100
6099
2017-08-30T02:02:42Z
CobaltHex
2492
wikitext
text/x-wiki
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
{{Sidebar
| name = Xtf
| title = Xtf Font Format
| image = [[File:http://i.imgur.com/u2P069H.png]]
}}
=== File format ===
{{FIXME}}
29c5ace84e29273943468b13ef92969eafc3bd4d
6101
6100
2017-08-30T02:03:58Z
CobaltHex
2492
wikitext
text/x-wiki
[[File:http://i.imgur.com/u2P069H.png|thumb|200px|Remote and Receiver]]
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
=== File format ===
{{FIXME}}
2995b01f7939539a2fc3c2ee0616f061b966203a
6103
6101
2017-08-30T02:10:37Z
CobaltHex
2492
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
=== File format ===
{{FIXME}}
743b4c73c5233a6c2917b51e24e94caee2b01d08
File:Xbox-dashboard-font-specimen.png
6
3876
6102
2017-08-30T02:10:07Z
CobaltHex
2492
Xbox Dashboard font specimen
(Copyright Ascender Corp, Microsoft)
wikitext
text/x-wiki
Xbox Dashboard font specimen
(Copyright Ascender Corp, Microsoft)
dc63773c54b0e007fdf1ec84fce43aabb4062ba4
EEPROM
0
3742
6104
6097
2017-08-30T03:32:59Z
KaosEngineer
2482
/* Contents */ Zone Bias 0x64-0x67 example hex value was missing a leading 0 - 0x0000168 to 0x00000168 (not that it changes the value just show fill of all 4-bytes)
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x01), right (0x04), down (0x02), left (0x03).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
dd3ce94b9468adf9963869de44957cc5b0d4685a
6112
6104
2017-08-30T12:23:07Z
KaosEngineer
2482
/* Contents */ Removed leading 0's in notes for example pass code values. Matches with nibble values format above the notes.
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Chip Models ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
b85278a5e17465b394e84ba5ffdd2a41bc74ac65
Boot Process
0
3683
6105
5911
2017-08-30T08:43:06Z
KaosEngineer
2482
/* Stage 1: Key Scheduling */ Address range for s[] incorrect 0x8F000 to 0x850FF should be 0x8F000 to 0x8F0FF
wikitext
text/x-wiki
This article describes the boot sequence of the Xbox.
A large portion of it is patended in [https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US6907522.pdf Patent "US 6,907,522 B2"]
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL (MCPX 1.0 only) ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8F000 to 0x8F0FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== TEA Decryption of the FBL (MCPX 1.1 only) ===
{{FIXME}}
== FBL (MCPX 1.1 only) ==
The Flash Boot Loader was added in MCPX 1.1, it connects the MCPX ROM and the 2BL.{{FIXME}}
It is not part of the MCPX ROM, but part of the flash.
== 2BL ==
{{FIXME|reason=Certain parts are still missing.}}
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Weird stuff 3 ====
{{FIXME|reason=Why?}}
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
5c3bf6b1e2aa531a4fc26bdc21816184833f0bdb
Motherboard
0
3756
6106
6015
2017-08-30T10:52:05Z
Obcd
2489
wikitext
text/x-wiki
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
== Mainboard ==
The following table is based on a Xbox 1.0{{citation needed}} retail board and credits go to PiXEL8
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
Only the 1.0 and 1.1 {{citation needed}} had a USB daugtherboard
Correction: only the 1.0 has the USB daughterboard, a GPU fan and the MCPX 1.0
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm]
f13025b042af0ba530135dfc537913e2acec3539
6107
6106
2017-08-30T11:22:55Z
JayFoxRox
2
wikitext
text/x-wiki
For a list of differences between these mainboards, also see [[Hardware Revisions]].
== Xbox 1.0 ==
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
The following table is based on a Xbox 1.0{{citation needed}} retail board.
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
=== USB Daughterboard ===
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== Xbox 1.1 ==
{{FIXME}}
== Xbox 1.2 ==
{{FIXME}}
== Xbox 1.3 ==
{{FIXME}}
== Xbox 1.4 ==
{{FIXME}}
== Xbox 1.5 ==
{{FIXME}}
== Xbox 1.6 ==
{{FIXME}}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm Documentation by PiXEL8]
6758a54a7b18453bb82b07078dcf51e31921c6e4
Hard Drive
0
3707
6108
6043
2017-08-30T11:29:00Z
JayFoxRox
2
Removed models from this article, moving to hardware revisions
wikitext
text/x-wiki
The original Xbox hard disk drive was 8GB in size. Later releases, 1.3 and 1.4's had Seagate 10GB drives; however, only the first 8GB of the drive was used.
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
c351edd6f2ddaa9f143861c201c403b1c1d99b83
6109
6108
2017-08-30T11:29:56Z
JayFoxRox
2
wikitext
text/x-wiki
The original Xbox hard disk drive was 8 GB in size. Later releases, 10 GB drives; however, only the first 8 GB of the drive was used. See [[Hardware Revisions]] for more information.
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
dfca548103173bccb7bc3502c6105d59ebd4d716
DVD Drive
0
3704
6110
5682
2017-08-30T11:30:56Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
For a list of drives Microsoft used in the Xbox, see [[Hardware Revisions]].
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition <br><br> This will be set to 0x01 by the kernel when the last challenge was verified. This is done by sending the same challenge again, the challenge id / value is not reset.
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated or authentication in progress <br><br> This will be set to 0x01 by the kernel when the first challenge is send.
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
81486e60896018589f4b0bea74bb5b99d379257a
Hardware Revisions
0
3669
6111
5899
2017-08-30T11:41:04Z
JayFoxRox
2
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0)
* Philips (Xbox 1.2)
* Samsung (Xbox 1.3)
* Hitachi-LG (mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
5ee73efd9a3fc406e94e9e551c9b1ae6872522ec
File:Input-a.png
6
3877
6113
2017-08-30T12:32:44Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-b.png
6
3878
6114
2017-08-30T12:32:59Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-x.png
6
3879
6115
2017-08-30T12:33:13Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-y.png
6
3880
6116
2017-08-30T12:33:23Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-white.png
6
3881
6117
2017-08-30T12:33:37Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-black.png
6
3882
6118
2017-08-30T12:33:47Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-start.png
6
3883
6119
2017-08-30T12:34:00Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-back.png
6
3884
6120
2017-08-30T12:34:11Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-d.png
6
3885
6121
2017-08-30T12:34:31Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-l.png
6
3886
6122
2017-08-30T12:34:39Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-r.png
6
3887
6123
2017-08-30T12:34:52Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Template:Input-a
10
3843
6124
6052
2017-08-30T12:38:43Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-a.png|frameless|24px|Alt=A button]]
a3e4d943375215501e57fd92b7b28c056f9704b9
Template:Input-black
10
3865
6125
6077
2017-08-30T12:39:10Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-black.png|frameless|20px|Alt=Black button]]
6a91c5e0a2a630d907cafe3bcabd09f8654787c7
Template:Input-white
10
3866
6126
6078
2017-08-30T12:39:25Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-white.png|frameless|20px|Alt=White button]]
86fc2955bfb5bd322b88b1b719e4030943f9a839
Template:Input-b
10
3844
6127
6053
2017-08-30T12:39:57Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-b.png|frameless|24px|Alt=B button]]
7228de34c88f36ce82f657cff647d3ef115e1adf
Template:Input-x
10
3839
6128
6047
2017-08-30T12:40:11Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-x.png|frameless|24px|Alt=X button]]
9c455c74ecc76dc2d9e77644675ad4a4d48822cd
Template:Input-y
10
3840
6129
6048
2017-08-30T12:40:23Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-y.png|frameless|24px|Alt=Y button]]
deea2135df6298d81e8f72371b72f522996676b6
Template:Input-start
10
3867
6130
6076
2017-08-30T12:40:54Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-start.png|frameless|26px|Alt=START button]]
401f535ee9e837125269460a9f2ba783d09e3a07
Template:Input-back
10
3868
6131
6079
2017-08-30T12:41:07Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-back.png|frameless|26px|Alt=BACK button]]
949dc7f028e9a0d94b75a423339b4e6f3e2e1067
Template:Input-d
10
3869
6132
6081
2017-08-30T12:41:48Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-d.png|frameless|32px|Alt=Digital-Pad]]
883d296494473d3049acb3f15b76fce92c347956
Template:Input-l
10
3871
6133
6083
2017-08-30T12:42:18Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-l.png|frameless|32px|Alt=Left-Thumbstick]]
38162af37e455cac70c86667be87dfc55dd96d06
Template:Input-r
10
3870
6134
6082
2017-08-30T12:42:32Z
JayFoxRox
2
wikitext
text/x-wiki
[[File:input-r.png|frameless|32px|Alt=Right-Thumbstick]]
3072e4591246b5049c7e9a6513c9c10c22f39f64
Template:Input-lx
10
3852
6135
6061
2017-08-30T12:49:53Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-l}}-Horizontal
3af45654d0a65cd892a23050fb8e1fa6ec7ca187
Template:Input-lx-
10
3853
6136
6062
2017-08-30T12:50:07Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-l}}-Left
80f7ea8f547f9c2ed5876883a20f2555035f2ffe
Template:Input-lx+
10
3854
6137
6063
2017-08-30T12:50:15Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-l}}-Right
d31f9f79a38e4eea3294942341de5de823c57877
Template:Input-ly
10
3855
6138
6064
2017-08-30T12:50:26Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-l}}-Vertical
133d67f33be66ac2466ef88b84ed5c11045903fa
Template:Input-ly-
10
3857
6139
6066
2017-08-30T12:50:33Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-l}}-Down
6bff11489678f8612abb523026e74d82d3478d04
Template:Input-ly+
10
3856
6140
6065
2017-08-30T12:50:41Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-l}}-Up
50467e54bb8afb842147d67237c3c84fc14090e2
Template:Input-rx
10
3859
6141
6068
2017-08-30T12:50:57Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-r}}-Horizontal
459f143786ea3e136c581344bc603d48ae47ecc2
Template:Input-rx-
10
3860
6142
6069
2017-08-30T12:51:05Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-r}}-Left
58f1ed99b7e8d8c4258b6e3116a0f9a1a333dcfa
Template:Input-rx+
10
3861
6143
6070
2017-08-30T12:51:13Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-r}}-Right
758180cf43a2f543202692374b196a9ce4e1afa3
Template:Input-ry
10
3862
6144
6071
2017-08-30T12:51:22Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-r}}-Vertical
114d3a42560a62ad55b7d6ede6c854e0ad3e1f16
Template:Input-ry-
10
3863
6145
6072
2017-08-30T12:51:29Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-r}}-Down
1b19757f7b305abe4b726cf0e4bb9a66f77d08b0
Template:Input-ry+
10
3864
6146
6073
2017-08-30T12:51:36Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-r}}-Up
abc244f86426174ed6487317a34bf4bc6eef3c07
Template:Input-dx
10
3848
6147
6057
2017-08-30T12:51:49Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-d}}-Horizontal
d90e0dc8cdfec5b18497f16375ea520d73f2640a
Template:Input-dx+
10
3850
6148
6059
2017-08-30T12:52:02Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-d}}-Right
c6aff6ccd0fa947dc0d482b5a184f7166c90c642
Template:Input-dx-
10
3849
6149
6058
2017-08-30T12:52:09Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-d}}-Left
d67105737167429ecc79a8d0eb3f5b9e3f8dd994
Template:Input-dy
10
3847
6150
6056
2017-08-30T12:52:19Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-d}}-Vertical
f57204e8ffd8576dda2cbf2c7290933787a1bfe3
Template:Input-dy-
10
3846
6151
6055
2017-08-30T12:52:28Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-d}}-Down
6561aae32b0fba898d3d4a66af2453867303e77d
Template:Input-dy+
10
3845
6152
6054
2017-08-30T12:52:36Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-d}}-Up
3dd82a7733661ee26c6b114e572c249a78060a5c
Template:Input-ls
10
3851
6153
6060
2017-08-30T12:53:47Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-l}}-Press
d38353d3771463c38d73645d40df8859fe2f7bd9
Template:Input-rs
10
3858
6154
6067
2017-08-30T12:53:57Z
JayFoxRox
2
wikitext
text/x-wiki
{{input-r}}-Press
57b67342b28ec3d3102977777b542ae1f8da2a1a
File:Xbox-xtf.png
6
3888
6155
2017-08-30T13:35:00Z
JayFoxRox
2
Font contained in Xbox.xtf
wikitext
text/x-wiki
Font contained in Xbox.xtf
4efe444085c23f2896b8600bea6a8f86f6eb8474
6158
6155
2017-08-30T21:02:34Z
JayFoxRox
2
JayFoxRox uploaded a new version of [[File:Xbox-xtf.png]]
wikitext
text/x-wiki
Font contained in Xbox.xtf
4efe444085c23f2896b8600bea6a8f86f6eb8474
File:XBox Book-xtf.png
6
3889
6156
2017-08-30T13:35:30Z
JayFoxRox
2
Font contained in XBox Book.xtf
wikitext
text/x-wiki
Font contained in XBox Book.xtf
7a671028dd7239da064cb5dc4f056defbe0ba7b7
6159
6156
2017-08-30T21:02:58Z
JayFoxRox
2
JayFoxRox uploaded a new version of [[File:XBox Book-xtf.png]]
wikitext
text/x-wiki
Font contained in XBox Book.xtf
7a671028dd7239da064cb5dc4f056defbe0ba7b7
Xtf
0
3831
6157
6103
2017-08-30T13:42:22Z
JayFoxRox
2
Add example glyphs
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]].
They contain 7365 glyphs each.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|frame|Xbox.xtf from [[Dashboard]].{{FIXME|reason=Broken kerning}}]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|frame|XBox Book.xtf from [[Dashboard]].{{FIXME|reason=Broken kerning}}]]</div>
== File format ==
{{FIXME}}
33999db2bcb597c736071bfe2d0ced63b0d1768b
6160
6157
2017-08-30T21:03:23Z
JayFoxRox
2
/* XBox Book.xtf */
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]].
They contain 7365 glyphs each.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|frame|Xbox.xtf from [[Dashboard]].{{FIXME|reason=Broken kerning}}]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|frame|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
{{FIXME}}
f9b9cc552e072627cc845872742ce86968da196f
6161
6160
2017-08-30T21:03:33Z
JayFoxRox
2
/* Xbox.xtf */
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]].
They contain 7365 glyphs each.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|frame|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|frame|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
{{FIXME}}
c250cdfcef0d6e4b468357c32a6622feba0b684d
6162
6161
2017-08-30T21:07:38Z
JayFoxRox
2
/* Xbox.xtf */
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]].
They contain 7365 glyphs each.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|frame|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
{{FIXME}}
81fe1dfd719656a8c4f14150588b987b1c8f5ecc
6163
6162
2017-08-30T21:08:00Z
JayFoxRox
2
/* XBox Book.xtf */
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
xtf is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]].
They contain 7365 glyphs each.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
{{FIXME}}
c06e9fcda45ce6e2173e322cc4b0da4ad8b37d1d
Power Supply
0
3818
6164
5930
2017-08-31T09:50:41Z
Codeasm
2480
/* power cord recall */ t number: X800925-100 200-240V~,50/60HZ, 610mA
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {citation needed} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {citation needed} (240V)
* MODEL: FTPS-0007 REV:B {citation needed} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {citation needed} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what apeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 xboxes.{citation needed}.
'''Does my console require a replacement cord?'''
If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.
source: [https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7 Xbox powercord recall program faq]
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
An more in detail video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
===== AFCI =====
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumely this one doesnt come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
13bc8bbd7019f193ef591e28df09dae982ab2d05
6165
6164
2017-08-31T09:51:46Z
Codeasm
2480
/* Related links */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {citation needed} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {citation needed} (240V)
* MODEL: FTPS-0007 REV:B {citation needed} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {citation needed} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what apeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 xboxes.{citation needed}.
'''Does my console require a replacement cord?'''
If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.
source: [https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7 Xbox powercord recall program faq]
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
An more in detail video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
===== AFCI =====
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumely this one doesnt come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
c14d9ecf89f167f3ad11e3f0928cbf9f8972b8aa
6175
6165
2017-08-31T16:21:53Z
JayFoxRox
2
Fix {citation-needed}
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== power cord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what apeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 xboxes.{{citation needed}}.
'''Does my console require a replacement cord?'''
If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.
source: [https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7 Xbox powercord recall program faq]
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]. The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
An more in detail video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
===== AFCI =====
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumely this one doesnt come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
c84f67c9dc3f44d172ca01afc7e7fde557904421
6176
6175
2017-08-31T16:27:27Z
JayFoxRox
2
/* power cord recall */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what apeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumely this one doesnt come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
b650bd4fa01274de3f0eb194d386b50c0c637259
Xbox DVD Movie Playback Kit
0
3768
6166
6086
2017-08-31T12:20:59Z
Codeasm
2480
My dongle gave an error, but the 002 one worked. did someone messed the table up?
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> || CodeAsm got an error with this dongle
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> || CodeAsm got this one
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
f750053c6f8147657af2678c23b4cb48645259d3
6167
6166
2017-08-31T12:38:54Z
Codeasm
2480
My dongle gave an error, but the 002 one worked. did someone messed the table up?
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> || CodeAsm got an error with this dongle, no rom.
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> || CodeAsm got this one
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
acfa6c95535ae0e928b3f736e54474627c4cc776
6174
6167
2017-08-31T15:07:25Z
Codeasm
2480
hmm, no names
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox.
== Remote Control ==
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
{{FIXME|reason=Partially documented in JayFoxRox/xbox-tools on github}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
d92f582ec93bc403f6124fbf4342f8a0dfe3fe13
Xbox Input Devices
0
11
6168
6085
2017-08-31T12:57:11Z
Codeasm
2480
/* Light guns */ added Joytech sharp shooter, need to retest wich joystick it uses, asumed it was indeed the left stick.
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255 {{citation needed}}
|-
| B button || {{input-b}} | both sides
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|-
| Magazine button || {{input-b}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}}+ {{input-b}} rapidly {{citation needed}}
codeasm has to verify the toggle modes, they where more anyonging than helpfull.
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
dff2721a1e4cc11279477d9307ca134f5df2acbf
6169
6168
2017-08-31T12:57:47Z
Codeasm
2480
/* Joytech Sharp Shooter */ inlicensed
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255 {{citation needed}}
|-
| B button || {{input-b}} | both sides
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|-
| Magazine button || {{input-b}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}}+ {{input-b}} rapidly {{citation needed}}
codeasm has to verify the toggle modes, they where more anyonging than helpfull.
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
dc86034a4d803d4de167be0f830d52eedfb96c85
6173
6169
2017-08-31T15:06:35Z
Codeasm
2480
/* Fire/Reload Mode */ hmm, no names
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255 {{citation needed}}
|-
| B button || {{input-b}} | both sides
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|-
| Magazine button || {{input-b}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}}+ {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
e37fd47a8196eb65a3676aad0a38132ce7988484
6177
6173
2017-08-31T16:47:15Z
JayFoxRox
2
/* Joytech Sharp Shooter */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="2" | {{input-b}}
|-
| B (Bottom)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|-
| Magazine button || {{input-b}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}}+ {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
6ed8f1cfa4d752365e1e78f78a34ec154ff56130
6178
6177
2017-08-31T16:47:34Z
JayFoxRox
2
/* Joytech Sharp Shooter */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="5" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="2" | {{input-b}}
|-
| B (Bottom)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|-
| Magazine button || {{input-b}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}}+ {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
9847d541c55eb4a2e9242dc730435b7b53117aab
6179
6178
2017-08-31T16:48:37Z
Codeasm
2480
/* Joytech Sharp Shooter */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="5" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="2" | {{input-b}}
|-
| B (Right side)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|-
| Magazine button || {{input-b}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}}+ {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
9f5f3b01e736a4fac1c0ecca0ce8e0eb6adf21f2
6180
6179
2017-08-31T16:50:25Z
JayFoxRox
2
/* Joytech Sharp Shooter */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| Magazine button
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}}+ {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
17c4ab63cb4327d290438c475f7b05f934ca898b
6181
6180
2017-08-31T16:51:20Z
JayFoxRox
2
/* Joytech Sharp Shooter */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}}+ {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
6b6c2a66a2bfed09cafa314e13fb4f5338c42cd8
6182
6181
2017-08-31T16:51:52Z
JayFoxRox
2
/* Fire/Reload Mode */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
91e1904e4aec8ae65751c0590422ad1a715d3bfb
Dashboard
0
3772
6170
5678
2017-08-31T13:22:11Z
KaosEngineer
2482
/* Hidden features */ Updated Parental Pass Code to use templated buttons. FormatAdminCodes found trying to locate old xbox-linux.org/down/usb_src.zip file w/WBM (never found it) but did these secret key combos to format/clear HDD except for C drive.
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different Xboxes Use Different Codes ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your Xbox's UDD that was acting up. What part(s) of the serial number they used to determine the correct code is unknown?
More data is needed to sort out which Xbox a particular code works on, and what other codes exist.
Is it based on Xbox scene version numbers? Most likely, NOT! Is it based on factory of production? Is it based on BIOS version? Does anyone know?
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
Xbox v1.0: {{input-x}} {{input-y}} {{input-ly+}} {{input-lx-}} {{input-a}}
Unknown version: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}.
(This one seems to work with most XBOXes sold in the United States)
Unknown version: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
(This one worked with the XBOXes manufactured in Hungary, serial numbers ending in 03)
Source: Wayback Machine [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
== See Also ==
[[Hard Drive Files]]
95335bba33f6ba178c24dbcbf4afe93938805716
6171
6170
2017-08-31T13:25:10Z
KaosEngineer
2482
/* Different Xboxes Use Different Codes */ mixed 1.0 combo first two buttons backwards
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different Xboxes Use Different Codes ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your Xbox's UDD that was acting up. What part(s) of the serial number they used to determine the correct code is unknown?
More data is needed to sort out which Xbox a particular code works on, and what other codes exist.
Is it based on Xbox scene version numbers? Most likely, NOT! Is it based on factory of production? Is it based on BIOS version? Does anyone know?
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
Unknown version: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}.
(This one seems to work with most XBOXes sold in the United States)
Unknown version: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
(This one worked with the XBOXes manufactured in Hungary, serial numbers ending in 03)
Source: Wayback Machine [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
== See Also ==
[[Hard Drive Files]]
71e2264e926f8f3bb6bd7e28ca6431368eef8ec1
6172
6171
2017-08-31T13:30:04Z
KaosEngineer
2482
/* Different Xboxes Use Different Codes */ Typo UDD instead of HDD and reworded end of that sentence too
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different Xboxes Use Different Codes ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.
What part(s) of the serial number they used to determine the correct code is unknown?
More data is needed to sort out which Xbox a particular code works on, and what other codes exist.
Is it based on Xbox scene version numbers? Most likely, NOT! Is it based on factory of production? Is it based on BIOS version? Does anyone know?
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
Unknown version: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}.
(This one seems to work with most XBOXes sold in the United States)
Unknown version: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
(This one worked with the XBOXes manufactured in Hungary, serial numbers ending in 03)
Source: Wayback Machine [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
== See Also ==
[[Hard Drive Files]]
dd6fdc35b83ace6ed7665b30887fd036fcd76f54
6183
6172
2017-09-02T08:31:58Z
KaosEngineer
2482
/* Different Xboxes Use Different Codes */ Made a sub heading for the list of Format Admin Codes
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different Xboxes Use Different Codes ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.
What part(s) of the serial number they used to determine the correct code is unknown?
More data is needed to sort out which Xbox a particular code works on, and what other codes exist.
Is it based on Xbox scene version numbers? Most likely, NOT! Is it based on factory of production? Is it based on BIOS version? Does anyone know?
===== List of Xbox Format Admin Codes =====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
Unknown version: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}.
(This one seems to work with most XBOXes sold in the United States)
Unknown version: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
(This one worked with the XBOXes manufactured in Hungary, serial numbers ending in 03)
Source: Wayback Machine [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
== See Also ==
[[Hard Drive Files]]
2675fd35c5c39275f77a5a2f7f9aef2df0df72aa
6184
6183
2017-09-02T08:33:19Z
KaosEngineer
2482
/* Format Admin Codes */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different Xboxes Use Different Codes ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.
What part(s) of the serial number they used to determine the correct code is unknown?
More data is needed to sort out which Xbox a particular code works on, and what other codes exist.
Is it based on Xbox scene version numbers? Most likely, NOT! Is it based on factory of production? Is it based on BIOS version? Does anyone know?
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
Unknown version: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}.
(This one seems to work with most XBOXes sold in the United States)
Unknown version: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
(This one worked with the XBOXes manufactured in Hungary, serial numbers ending in 03)
Source: Wayback Machine [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
== See Also ==
[[Hard Drive Files]]
d99912df49418596af84f65a219c08c147165147
6185
6184
2017-09-02T09:08:57Z
JayFoxRox
2
/* List of Xbox Format Admin Codes */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different Xboxes Use Different Codes ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.
What part(s) of the serial number they used to determine the correct code is unknown?
More data is needed to sort out which Xbox a particular code works on, and what other codes exist.
Is it based on Xbox scene version numbers? Most likely, NOT! Is it based on factory of production? Is it based on BIOS version? Does anyone know?
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
== See Also ==
[[Hard Drive Files]]
c50a5152e7a2e7b338026650580b35d44b3217df
6186
6185
2017-09-02T09:10:10Z
JayFoxRox
2
/* Different Xboxes Use Different Codes */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
== See Also ==
[[Hard Drive Files]]
97b52957245ab57c804a165f8739ca36b5098788
Talk:Dashboard
1
3890
6187
2017-09-02T09:16:34Z
JayFoxRox
2
/* Format code: different codes / serial number relation */ new section
wikitext
text/x-wiki
== Format code: different codes / serial number relation ==
* More data is needed to sort out which Xbox a particular code works on, and what other codes exist. Is it based on Xbox scene version numbers? Most likely, NOT! Is it based on factory of production? Is it based on BIOS version? Does anyone know?
Xbox versions usually refer to ''hardware'' revisions.
However, formating is a ''software'' process.
By the serial number, MS can figure out when the Xbox was produced and also what kind of dashboard shipped with it.
I'd assume that the code is only depending on the dashboard version.
I don't think the kernel version will have any influence as all input handling and disk formatting stuff is done in the XAPI / Dashboard; not the kernel.
Therefore we can probably also easily test and confirm this in cxbx-r or xqemu by running various dashboards.{{FIXME|reason=do it!}}
If we don't have it yet, we should try to make a backup of stock Xbox hdds, before installing a softmod. Try to archive the various dashboard versions.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 02:16, 2 September 2017 (PDT)
ba9d7ce464c41f2e1b54426983609cd64d210266
6188
6187
2017-09-02T10:02:03Z
JayFoxRox
2
/* Format code: different codes / serial number relation */
wikitext
text/x-wiki
== Format code: different codes / serial number relation ==
* More data is needed to sort out which Xbox a particular code works on, and what other codes exist. Is it based on Xbox scene version numbers? Most likely, NOT! Is it based on factory of production? Is it based on BIOS version? Does anyone know?
This seems to be handled by settings3.xap: <code>thePanelJoystick.secretKey = "Y" + theConfig.GetRecoveryKey();</code>
The <code>GetRecoveryKey</code> function seems to look up symbols from "AXYUDLR" based on some variation of the Xbox HD Key + another random 16 byte key (hardcoded into the kernel). Combined using <code>XcHMAC(hardcodedkeyimentioned, 16, XboxHDKey, 16, NULL, 0, buffer)</code>.
Then the key is generated using:
<pre>
uint16_t* buffer_words = buffer;
for(unsigned int i = 0; i < 4; i++) {
code[i] = "AXYUDLR"[buffer_words[i] % 7];
}
</pre>
This function is similar to the one being used to generate Xbox Live account crypto keys. We should probably write a tool to locate these functions and extract the keys. All of these are contained in the dashboard app.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 02:16, 2 September 2017 (PDT)
7325ac920b7f4841b5144a885ef3dd15622c449d
Kernel/XboxHDKey
0
3891
6189
2017-09-02T10:05:39Z
JayFoxRox
2
Created page with "This key is (amongst other things) used to generate the Xbox recovery key used by the Dashboard. Users could ask MS support for their receovery key. So either Microsoft kept a..."
wikitext
text/x-wiki
This key is (amongst other things) used to generate the Xbox recovery key used by the Dashboard. Users could ask MS support for their receovery key. So either Microsoft kept a database of all keys / serial numbers; or the serial number and this key are related.
61e7df9dc95473dd919af0c28f51114cb938629e
6195
6189
2017-09-02T12:28:11Z
JayFoxRox
2
wikitext
text/x-wiki
This key is (amongst other things) used to retreive the Xbox recovery key used by the Dashboard. Users could ask MS support for their receovery key. So either Microsoft kept a database of all keys / serial numbers; or the serial number and this key are related.
902c0b7ae26c681dd599a8769f004f0d156fe615
EEPROM
0
3742
6190
6112
2017-09-02T10:23:40Z
JayFoxRox
2
/* Chip Models */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The Serial Number==
<pre> 1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
{| class="wikitable"
! style="text-align: center;" | 1
! style="text-align: center;" | 1
! style="text-align: center;" | 6
! style="text-align: center;" | 6
! style="text-align: center;" | 3
! style="text-align: center;" | 5
! style="text-align: center;" | 6
! style="text-align: center;" |
! style="text-align: center;" | 2
! style="text-align: center;" | 0
! style="text-align: center;" | 9
! style="text-align: center;" | 0
! style="text-align: center;" | 3
! style="text-align: center;" |
!
|-
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | /
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| Factory Number (02=Mexico, 03=Hungary, 05=China, 06=Taiwan)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| week of year (starting Mondays)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| last digit of year (200Y)
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | |
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | \
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| number of Xbox within week and factory
|-
| style="text-align: center;" | |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" |
|
|-
| style="text-align: center;" | \
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| style="text-align: center;" | _
| production line within factory
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
1505c624c2283840320738ec54fe66671ad7b644
6194
6190
2017-09-02T10:27:11Z
JayFoxRox
2
/* The Serial Number */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
740df82650c911be4fa2bb4440e7308b0e342d76
Hardware Revisions
0
3669
6191
6111
2017-09-02T10:24:25Z
JayFoxRox
2
/* Identifying */
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0)
* Philips (Xbox 1.2)
* Samsung (Xbox 1.3)
* Hitachi-LG (mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
== EEPROM ==
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
b37d59cb2f75271e303056a6bd7e22593dc7c133
6192
6191
2017-09-02T10:24:37Z
JayFoxRox
2
/* EEPROM */
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0)
* Philips (Xbox 1.2)
* Samsung (Xbox 1.3)
* Hitachi-LG (mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
45954cf1d9cd5d1edcc4f1634451697f67a37896
6193
6192
2017-09-02T10:24:45Z
JayFoxRox
2
/* EEPROM */
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0)
* Philips (Xbox 1.2)
* Samsung (Xbox 1.3)
* Hitachi-LG (mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
8de7cca6c065b169d04fdc2e61b85d7b1e6a3253
Xbox Memory Unit
0
3790
6196
5728
2017-09-02T12:40:47Z
JayFoxRox
2
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || 8MB || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || 8MB || Green logo Xbox and white "Trustmaster
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || 8MB || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
|}
== References ==
* [http://imgur.com/a/8QmDA Thrustmaster XBOX Memory Unit images by DarkGabz]
* [http://imgur.com/gallery/M0PZ6 3 XBOX memory units images by CodeAsm]
5632d1265f6abf8c92cb7db1741bb0fbc92391b2
Exploits
0
3751
6197
5982
2017-09-05T03:27:21Z
DaveX
2487
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Untested
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is likely to be lost. However, this was not tested in praxis.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2017-09-05
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
c34821b6b1d2d916f24620a3ec87e87c570a4267
Dashboard
0
3772
6198
6186
2017-09-05T17:33:56Z
KaosEngineer
2482
Added Shaky Menu from gamefaqs.com - really a slowly moving menu I wouldn't really call it a SHAKY menu.
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
==== Traveling Main Menu ====
Turn on your Xbox and go to the dashboard, Press {{input-y}} {{ input-x}} at the main screen, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
[[Hard Drive Files]]
29ebec5e7bbdabf91adfca614c4bd68055dab35f
6199
6198
2017-09-05T17:34:55Z
KaosEngineer
2482
/* Hidden features */ New Traveling Main menu wrong depth (one too many ='s in header)
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Main Menu ===
Turn on your Xbox and go to the dashboard, Press {{input-y}} {{ input-x}} at the main screen, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
[[Hard Drive Files]]
532c744a52330ebbfcc8f420217540d867ee1bb7
6200
6199
2017-09-05T17:41:13Z
KaosEngineer
2482
/* Traveling Main Menu */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, Press {{input-y}} {{ input-x}} at the main screen, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
[[Hard Drive Files]]
a3dc1902a7fd52e9954ae315e25513d57bc86eed
6201
6200
2017-09-05T17:43:46Z
KaosEngineer
2482
/* Traveling Menus */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, Press {{input-y}} {{ input-x}} on the main screen not from any sub-menu, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
[[Hard Drive Files]]
cd95c155ba3a07d783037ee44e9c46678154b468
6202
6201
2017-09-05T18:25:54Z
KaosEngineer
2482
/* Traveling Menus */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press "Y" then "X" while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press Info button on the DVD Playback Kit remote.
But, wait there's more (only visible with DVD Playback Kit and Remote).
Fullscreen Visualization Part 2:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press "Y" then "X" on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, press {{input-y}} {{ input-x}} on the main screen not from any sub-menu, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
[[Hard Drive Files]]
d68d23ec4ab7216c3fbc8f05fd5b0f0fc9f001e9
6203
6202
2017-09-05T19:15:06Z
JayFoxRox
2
/* Music visualization in fullscreen */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press {{input-y}}, {{input-x}} while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press "INFO" button on the DVD Playback Kit remote.
Only visible with DVD Playback Kit and Remote:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press {{input-y}}, {{input-x}} on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield{{FIXME|reason=replace lengthy explanation with a video of this}}.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg: ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, press {{input-y}} {{ input-x}} on the main screen not from any sub-menu, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
[[Hard Drive Files]]
27ceac14c7f66c7cc721ea88e0a5cab5aa2f4d5a
Talk:Main Page
1
3744
6204
5446
2017-09-05T19:24:14Z
JayFoxRox
2
input-* template usage
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
746cdd5c2185eb8ce280cb3a603eb5854408653d
Exploits
0
3751
6205
6197
2017-09-06T18:27:31Z
JayFoxRox
2
Add list of movie DVDs
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Untested
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is likely to be lost. However, this was not tested in praxis.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2017-09-05
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
f2a04cc07865991151f9c1ec48c10918a39027e0
Xbox Memory Unit
0
3790
6206
6196
2017-09-07T14:41:48Z
DaveX
2487
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || 8MB || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || 8MB || Green logo Xbox and white "Trustmaster
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || 8MB || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
|BESTRUNNER 256MB Speicherstick || 0xABCD || 0x1234 || 256MB ||
|}
== References ==
* [http://imgur.com/a/8QmDA Thrustmaster XBOX Memory Unit images by DarkGabz]
* [http://imgur.com/gallery/M0PZ6 3 XBOX memory units images by CodeAsm]
fc02f4f09782e13441b880543a3561cfdeeff4f6
6210
6206
2017-09-11T05:26:16Z
KaosEngineer
2482
/* Compatible USB sticks */ Added the USB Flash Drive I use to softmod. 64MB generic flash drive
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || 8MB || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || 8MB || Green logo Xbox and white "Trustmaster
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || 8MB || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit.
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
|BESTRUNNER 256MB Speicherstick || 0xABCD || 0x1234 || 256MB ||
|-
|USB Mass Storage Device || 0x058F || 0x9381 || 64MB || Generic Mass Storage Device
|}
== References ==
* [http://imgur.com/a/8QmDA Thrustmaster XBOX Memory Unit images by DarkGabz]
* [http://imgur.com/gallery/M0PZ6 3 XBOX memory units images by CodeAsm]
10b877a5e4e3befaf0c9e407abbcc18366b56a67
6211
6210
2017-09-11T23:02:25Z
DaveX
2487
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || 8MB || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || 8MB || Green logo Xbox and white "Trustmaster
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || 8MB || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit. (It is rumored that the capacity should not exceed 4GB)
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
|BESTRUNNER 256MB Speicherstick || 0xABCD || 0x1234 || 256MB ||
|-
|USB Mass Storage Device || 0x058F || 0x9381 || 64MB || Generic Mass Storage Device
|}
== References ==
* [http://imgur.com/a/8QmDA Thrustmaster XBOX Memory Unit images by DarkGabz]
* [http://imgur.com/gallery/M0PZ6 3 XBOX memory units images by CodeAsm]
2ea2c10ea2849a176bf6fa55d34e724a6c79fc81
Xtf
0
3831
6207
6163
2017-09-10T07:43:38Z
JayFoxRox
2
File format info and link to a parser / converter tool
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]].
They contain 7365 glyphs each.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
99241c85133caa41ae04b3b69dc506484ebac8f4
6212
6207
2017-09-12T15:33:22Z
CobaltHex
2492
added more background info
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] of [[Wikipedia:Ascender Corporation|Ascdender Corporation]] for use on the Xbox. Matteson had already created many of Microsoft's [[Wikipedia:Microsoft Windows|Windows]] core fonts and would later create the [https://www.fonts.com/font/microsoft/convection:Link Convection fonts used on the Xbox 360].
Each font contain 7365 glyphs each.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
Individual character meshes are stored as triangle strips
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
3a969ca64b23524d1858cc797dddf0f63cdb0521
6213
6212
2017-09-12T15:35:08Z
CobaltHex
2492
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] of [[Wikipedia:Ascender Corporation|Ascdender Corporation]] for use on the Xbox. Matteson had already created many of Microsoft's [[Wikipedia:Microsoft Windows|Windows]] core fonts and would later create the [https://www.fonts.com/font/microsoft/convection Convection fonts used on the Xbox 360].
Each font contain 7365 glyphs each.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
Individual character meshes are stored as triangle strips
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
5f99da77d68b0bcc835409eff5d4c68afde5d876
6214
6213
2017-09-12T15:35:23Z
CobaltHex
2492
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] of [[Wikipedia:Ascender Corporation|Ascdender Corporation]] for use on the Xbox. Matteson had already created many of Microsoft's [[Wikipedia:Microsoft Windows|Windows]] core fonts and would later create the [https://www.fonts.com/font/microsoft/convection Convection fonts used on the Xbox 360].
Each font contain 7365 glyphs.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
Individual character meshes are stored as triangle strips
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
5f1c24a0e6a382d059c876320dae6d52974bb7ac
6215
6214
2017-09-12T15:35:59Z
CobaltHex
2492
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] of [[Wikipedia:Ascender Corporation|Ascdender Corporation]] for use on the Xbox. Matteson had already created many of Microsoft's [[Wikipedia:Microsoft Windows|Windows]] core fonts and would later create the [https://www.fonts.com/font/microsoft/convection Convection fonts used on the Xbox 360].
Each font contain 7365 glyphs.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range (stored as a triangle strip)
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
a93363cb787931ae0d64f666b3c9be59cdb500d5
6216
6215
2017-09-12T15:52:44Z
CobaltHex
2492
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
Both fonts were also used for branding and promotional use.
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] of [[Wikipedia:Ascender Corporation|Ascdender Corporation]] for use on the Xbox. Matteson had already created many of Microsoft's [[Wikipedia:Microsoft Windows|Windows]] core fonts and would later create the [https://www.fonts.com/font/microsoft/convection Convection fonts used on the Xbox 360].
Each font contain 7365 glyphs.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range (stored as a triangle strip)
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
c23c992ceb4e2280ef9171eaa506baabd6aa7499
6218
6216
2017-09-12T18:35:37Z
DaveX
2487
/* Dashboard fonts */
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
Both fonts were also used for branding and promotional use.
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] of [[Wikipedia:Ascender Corporation|Ascdender Corporation]] for use on the Xbox. Matteson had already created many of Microsoft's [[Wikipedia:Microsoft Windows|Windows]] core fonts and would later create the [https://www.fonts.com/font/microsoft/convection Convection fonts used on the Xbox 360].
Each font contains 7365 glyphs.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range (stored as a triangle strip)
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
c5bc35536a29cae583927e2b137b56838e08e76f
6219
6218
2017-09-12T19:20:35Z
CobaltHex
2492
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] for use on the Xbox as well as for promotional materials. Matteson would later create the [https://www.fonts.com/font/microsoft/convection Convection fonts used on the Xbox 360].
Each font contains 7365 glyphs.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range (stored as a triangle strip)
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
28ba7396e5c4f838803627c02810eeefef344d13
6220
6219
2017-09-12T19:21:08Z
CobaltHex
2492
wikitext
text/x-wiki
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The dashboard fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] for use on the Xbox Dashboard as well as for promotional materials. Matteson would later create the [https://www.fonts.com/font/microsoft/convection Convection fonts used on the Xbox 360].
Each font contains 7365 glyphs.
=== Xbox.xtf ===
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range (stored as a triangle strip)
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
ffdd010285bc60340d84cd89582a928e0c345c8c
6221
6220
2017-09-12T20:10:38Z
JayFoxRox
2
Ascender did not even exist at the time;; We already link to wikipedia which contains these non-technical, non-xbox details;; XTF is triangle lists, not strips
wikitext
text/x-wiki
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] for use in the Xbox [[Dashboard]] as well as for promotional materials.
The XTF versions of these fonts contain 7365 glyphs each.
=== Xbox.xtf ===
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range (stored as a triangle list)
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
aafd04baadd765700d871ad7c56f116e4f11aa8d
6222
6221
2017-09-12T20:13:46Z
JayFoxRox
2
wikitext
text/x-wiki
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] for use in the Xbox [[Dashboard]] as well as for promotional materials.
The XTF versions of these fonts contain 7365 glyphs each.
=== Xbox.xtf ===
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
The mesh data is stored as triangle list. 3 indices per triangle.
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
40e3d35d27c0a7029c1d1f059e36397a67215449
Xbox Game Disc
0
3700
6208
5841
2017-09-11T04:56:46Z
KaosEngineer
2482
/* Visible information on ring */ typo middel changed to middle
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unkown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
22db8cbb1e76a848f26f46f47bc94c9a5996d88c
6209
6208
2017-09-11T05:01:55Z
KaosEngineer
2482
/* Dumping */ typo unkown fixed unknown
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}}
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D163A
|SATA
|
|SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|{{citation needed}}
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
95a3eeb048abd8e408bfb161be8f425a7346b6a0
6223
6209
2017-09-16T07:59:45Z
JayFoxRox
2
More logical order + name TS-H353A kreon fw explicitly
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162C?}}
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162D?}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon 0.80 (October 17th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|Kreon 0.80 (October 17th 2006) {{FIXME|reason=Same as SH-D163A?}}
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}} {{FIXME|reason=Same as SH-D163B?}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
dcabcc1bb68936e64a536439b8d351dabb71efe4
6233
6223
2017-09-20T22:27:03Z
CakeLancelot
2494
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162C?}}
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162D?}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon 0.80 (October 17th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|Kreon 1.00 (November 18th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}} {{FIXME|reason=Same as SH-D163B?}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
bd501f2c99ef72e9f712d687c00ee0cab7e153b9
6234
6233
2017-09-20T22:33:27Z
CakeLancelot
2494
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162C?}}
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162D?}}
|-
|Samsung SH-D163A
|SATA
|
|Kreon 0.80 (October 17th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|Kreon 0.80 (October 17th 2006) <br> Kreon 1.00 (November 18th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}} {{FIXME|reason=Same as SH-D163B?}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
99fca5864418bc4a7f2ce46087673849cef189cd
6235
6234
2017-09-20T22:36:50Z
CakeLancelot
2494
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162C?}}
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162D?}}
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|Kreon 0.80 (October 17th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|Kreon 0.80 (October 17th 2006) <br> Kreon 1.00 (November 18th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}} {{FIXME|reason=Same as SH-D163B?}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
270c3cabb6cd84fe0c381c0b50a9bfc0010ed1e1
6236
6235
2017-09-21T03:19:55Z
CakeLancelot
2494
/* Dumping */ Finalize H353A Kreon FW and D163A Original FW. Previous edits are related to this, sorry for not putting a summary.
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{citation needed}}
|
|
|0800
|-
|Toshiba SD-M2012C
|IDE
|
|Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|SB00 Kreon 0.60 (July 30th 2006) <br> SB00 Kreon 0.80 (September 9th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162C?}}
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|Kreon{{citation needed}} {{FIXME|reason=Same as SH-D162D?}}
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|Kreon 0.80 (October 17th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|Kreon 0.80 (October 17th 2006) <br> SB01 Kreon 1.00 (October 9th 2007)
|-
|Samsung SH-D163B
|SATA
|
|Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|{{citation needed}} {{FIXME|reason=Same as SH-D163B?}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
e0128f509f7cc61decdc93b0c3bcd8374f88b417
6237
6236
2017-09-21T16:35:48Z
JayFoxRox
2
Grouped drives; this is an assumption. Please undo or fix if those firmwares are not compatible.
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
0de907197a64356da3dd29173ca7bdb46e4d31d8
Talk:Xtf
1
3832
6217
5992
2017-09-12T18:34:37Z
CobaltHex
2492
wikitext
text/x-wiki
== Change to article about promo fonts ==
Both of these fonts were used as part of the Xbox's marketing materials. More info there than the XTF format. Perhaps move the XTF to a generic file format article (below)
== Merge with dashboard article ==
I think it makes sense to merge this with the dashboard article or even move such file format stuff to other wikis.
However, I'm not sure how to integrate it best with the dashboard article, and I'm not aware of any wikis where this would fit.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:45, 22 August 2017 (PDT)
== Add file format info ==
from #xqemu irc channel
* JayFoxRox: I looked at the file, it seems to be a 2D mesh format, indices, followed by vertices
* JayFoxRox: header is XTF0, then, then 4 bytes length for the following name of font [should be 32 bytes]
* JayFoxRox: seemingly this is used too: https://msdn.microsoft.com/en-us/library/dd144956(v=vs.85).aspx
* JayFoxRox: or at least there is a 4 byte length prefix again
* JayFoxRox: near end of file it's very surely <code>u16 icount, u16 vcount, u16 indices[icount] { float x,y; }[vcount]</code>
* JayFoxRox: if there are any structures between those 2? no idea.
* JayFoxRox: apparently the last structure [with mesh data] keeps repeating towards the end, so it's probably each glyph seperately
* JayFoxRox: I don't have more time for doing this now - I already did more than I wanted by sourcing the Xbox.xtf and Xbox Book.xtf and looking at it with hexedit and googling for MS structures :P
* JayFoxRox: I think there are degenerates, so looks like tri-strip << edit: actually those are just tris!
Update: source code for partially converting to svg font: https://gist.github.com/JayFoxRox/3749698d1ae590608433672bffecba5a
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:49, 22 August 2017 (PDT)
a8f633c8f4139e8c3f47f8b251e62c1016782717
Engine List
0
4
6224
5308
2017-09-16T08:06:16Z
JayFoxRox
2
Link was broken
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Far Cry Instincts]]
|-
| [[Far Cry Instincts: Evolution]]
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[AFL Live 2003]]
|-
|[[AFL Live 2004]]
|-
|[[AFL Live Premiership Edition]]
|-
|[[Battlefield 2: Modern Combat]]
|-
|[[Black]]
|-
|[[Blitz: The League]]
|-
|[[Broken Sword: The Sleeping Dragon]]
|-
|[[Burnout]]
|-
|[[Burnout 2: Point of Impact]]
|-
|[[Burnout 3: Takedown]]
|-
|[[Burnout Revenge]]
|-
|[[Call of Duty: Finest Hour]]
|-
|[[Cold Fear]]
|-
|[[Commandos: Strike Force]]
|-
|[[Darkwatch]]
|-
|[[Dead to Rights II]]
|-
|[[Evil Dead: Regeneration]]
|-
|[[Gauntlet: Seven Sorrows]]
|-
|[[Grand Theft Auto III]]
|-
|[[Grand Theft Auto: Vice City]]
|-
|[[Grand Theft Auto: San Andreas]]
|-
|[[Harry Potter and the Prisoner of Azkaban]]
|-
|[[Harry Potter and the Goblet of Fire]]
|-
|[[Headhunter Redemption]]
|-
|[[Hello Kitty: Roller Rescue]]
|-
|[[Kill Switch]]
|-
|[[Madagascar]]
|-
|[[Manhunt]]
|-
|[[Max Payne 2: The Fall of Max Payne]]
|-
|[[Major League Baseball 2K5]]
|-
|[[Mortal Kombat: Armageddon]]
|-
|[[Mortal Kombat: Deadly Alliance]]
|-
|[[Mortal Kombat: Deception]]
|-
|[[NBA Ballers]]
|-
|[[NFL Blitz 2003]]
|-
|[[Rugby League]]
|-
|[[ObsCure]]
|-
|[[Outlaw Golf 2]]
|-
|[[Puyo Pop: Fever]]
|-
|[[RoboCop]]
|-
|[[Rolling]]
|-
|[[Alfa Romeo Racing Italiano]]
|-
|[[Secret Weapons Over Normandy]]
|-
|[[Shadow the Hedgehog]]
|-
|[[Sonic Heroes]]
|-
|[[SpongeBob SquarePants: Battle for Bikini Bottom]]
|-
|[[Tech Deck Dude Bare Knuckle Grind]]
|-
|[[Teenage Mutant Ninja Turtles: Mutant Melee]]
|-
|[[The Incredibles: Rise of the Underminer]]
|-
|[[The Incredibles]]
|-
|[[The SpongeBob SquarePants Movie Game]]
|-
|[[The Warriors]]
|-
|[[Tony Hawk's Pro Skater 3]]
|-
|[[Tony Hawk's Pro Skater 4]]
|-
|[[Total Overdose: A Gunslinger's Tale in Mexico]]
|-
|[[Toxic Grind]]
|-
|[[Without Warning]]
|-
|[[Yourself!Fitness]]
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|[[New Legends]]
|UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|-
|[[Advent Rising]]
|UE2 Build 2226
|-
|[[America's Army: Rise of a Soldier]]
|UT2003 Build 928
|-
|[[Brothers in Arms: Earned in Blood]]
|UE2 Build 2226
|-
|[[Brothers in Arms: Road to Hill 30]]
|UE2 Build 2226
|-
|[[Combat: Task Force 121]]
|UE2 Build 2110
|-
|[[Dead Man's Hand]]
|UE2 Build 2110
|-
|[[Deus Ex: Invisible War]]
|Warfare Build 777
|-
|[[Land of the Dead: Road to Fiddler's Green]]
|UE2 BUild 2226
|-
|[[Magic the Gathering: Battlegrounds]]
|Warfare Build 926
|-
|[[Men of Valor]]
|Warfare Build 926
|-
|[[Open Season]]
|Warfare Build 927
|-
|[[Pariah]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[Shadow Ops: Red Mercury]]
|UE2 Build 2110
|-
|[[Star Wars: Republic Commando]]
|UE2 Build 2226
|-
|[[Thief: Deadly Shadows]]
|Warfare Build 777
|-
|[[Tom Clancy's Ghost Recon: Advanced Warfighter]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3: Black Arrow]]
|Warfare Build 927
|-
|[[Tom Clancy's Splinter Cell]]
|Warfare Build 829
|-
|[[Tom Clancy's Splinter Cell: Chaos Theory]]
|Warfare Build 829 - Singleplayer & Co-op mode
UE2 Build 2110 - Versus mode
|-
|[[Tom Clancy's Splinter Cell: Double Agent]]
|Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
|[[Tom Clancy's Splinter Cell: Pandora Tomorrow]]
|Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
|[[Unreal II: The Awakening]]
|Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
|[[Unreal Championship]]
|UT2003 Build 928
|-
|[[Unreal Championship 2: The Liandri Conflict]]
|UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
|[[Warpath]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[World War II Combat: Road to Berlin]]
|UE2 Build 2110
|-
|[[World War II Combat: Iwo Jima]]
|UE2 Build 2110
|-
|[[XIII]]
|Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License
eb8cd4aa6d59021446e3cc23e69e27f1fd5e9da2
6225
6224
2017-09-16T08:17:01Z
JayFoxRox
2
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= id Tech 4 =
id Tech 4 was scaled down for Xbox{{citation needed}}.
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Doom 3]]
|-
| [[Doom 3: Resurrection of Evil]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Far Cry Instincts]]
|-
| [[Far Cry Instincts: Evolution]]
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[AFL Live 2003]]
|-
|[[AFL Live 2004]]
|-
|[[AFL Live Premiership Edition]]
|-
|[[Battlefield 2: Modern Combat]]
|-
|[[Black]]
|-
|[[Blitz: The League]]
|-
|[[Broken Sword: The Sleeping Dragon]]
|-
|[[Burnout]]
|-
|[[Burnout 2: Point of Impact]]
|-
|[[Burnout 3: Takedown]]
|-
|[[Burnout Revenge]]
|-
|[[Call of Duty: Finest Hour]]
|-
|[[Cold Fear]]
|-
|[[Commandos: Strike Force]]
|-
|[[Darkwatch]]
|-
|[[Dead to Rights II]]
|-
|[[Evil Dead: Regeneration]]
|-
|[[Gauntlet: Seven Sorrows]]
|-
|[[Grand Theft Auto III]]
|-
|[[Grand Theft Auto: Vice City]]
|-
|[[Grand Theft Auto: San Andreas]]
|-
|[[Harry Potter and the Prisoner of Azkaban]]
|-
|[[Harry Potter and the Goblet of Fire]]
|-
|[[Headhunter Redemption]]
|-
|[[Hello Kitty: Roller Rescue]]
|-
|[[Kill Switch]]
|-
|[[Madagascar]]
|-
|[[Manhunt]]
|-
|[[Max Payne 2: The Fall of Max Payne]]
|-
|[[Major League Baseball 2K5]]
|-
|[[Mortal Kombat: Armageddon]]
|-
|[[Mortal Kombat: Deadly Alliance]]
|-
|[[Mortal Kombat: Deception]]
|-
|[[NBA Ballers]]
|-
|[[NFL Blitz 2003]]
|-
|[[Rugby League]]
|-
|[[ObsCure]]
|-
|[[Outlaw Golf 2]]
|-
|[[Puyo Pop: Fever]]
|-
|[[RoboCop]]
|-
|[[Rolling]]
|-
|[[Alfa Romeo Racing Italiano]]
|-
|[[Secret Weapons Over Normandy]]
|-
|[[Shadow the Hedgehog]]
|-
|[[Sonic Heroes]]
|-
|[[SpongeBob SquarePants: Battle for Bikini Bottom]]
|-
|[[Tech Deck Dude Bare Knuckle Grind]]
|-
|[[Teenage Mutant Ninja Turtles: Mutant Melee]]
|-
|[[The Incredibles: Rise of the Underminer]]
|-
|[[The Incredibles]]
|-
|[[The SpongeBob SquarePants Movie Game]]
|-
|[[The Warriors]]
|-
|[[Tony Hawk's Pro Skater 3]]
|-
|[[Tony Hawk's Pro Skater 4]]
|-
|[[Total Overdose: A Gunslinger's Tale in Mexico]]
|-
|[[Toxic Grind]]
|-
|[[Without Warning]]
|-
|[[Yourself!Fitness]]
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|[[New Legends]]
|UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|-
|[[Advent Rising]]
|UE2 Build 2226
|-
|[[America's Army: Rise of a Soldier]]
|UT2003 Build 928
|-
|[[Brothers in Arms: Earned in Blood]]
|UE2 Build 2226
|-
|[[Brothers in Arms: Road to Hill 30]]
|UE2 Build 2226
|-
|[[Combat: Task Force 121]]
|UE2 Build 2110
|-
|[[Dead Man's Hand]]
|UE2 Build 2110
|-
|[[Deus Ex: Invisible War]]
|Warfare Build 777
|-
|[[Land of the Dead: Road to Fiddler's Green]]
|UE2 BUild 2226
|-
|[[Magic the Gathering: Battlegrounds]]
|Warfare Build 926
|-
|[[Men of Valor]]
|Warfare Build 926
|-
|[[Open Season]]
|Warfare Build 927
|-
|[[Pariah]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[Shadow Ops: Red Mercury]]
|UE2 Build 2110
|-
|[[Star Wars: Republic Commando]]
|UE2 Build 2226
|-
|[[Thief: Deadly Shadows]]
|Warfare Build 777
|-
|[[Tom Clancy's Ghost Recon: Advanced Warfighter]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3: Black Arrow]]
|Warfare Build 927
|-
|[[Tom Clancy's Splinter Cell]]
|Warfare Build 829
|-
|[[Tom Clancy's Splinter Cell: Chaos Theory]]
|Warfare Build 829 - Singleplayer & Co-op mode
UE2 Build 2110 - Versus mode
|-
|[[Tom Clancy's Splinter Cell: Double Agent]]
|Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
|[[Tom Clancy's Splinter Cell: Pandora Tomorrow]]
|Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
|[[Unreal II: The Awakening]]
|Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
|[[Unreal Championship]]
|UT2003 Build 928
|-
|[[Unreal Championship 2: The Liandri Conflict]]
|UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
|[[Warpath]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[World War II Combat: Road to Berlin]]
|UE2 Build 2110
|-
|[[World War II Combat: Iwo Jima]]
|UE2 Build 2110
|-
|[[XIII]]
|Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License
0ff995f05f564a750a1a0f8367c12809f04804bf
Doom 3: Resurrection of Evil
0
3892
6226
2017-09-16T08:19:51Z
JayFoxRox
2
Created page with "{{Game}} A sequel to [[Doom 3]]. It was an expansion pack on PC and shares a lot of the technical foundation with [[Doom 3]]."
wikitext
text/x-wiki
{{Game}}
A sequel to [[Doom 3]]. It was an expansion pack on PC and shares a lot of the technical foundation with [[Doom 3]].
4f9131cb1aa98dab38743bb153bc2aa8de3aa03d
Doom 3
0
3893
6227
2017-09-16T08:20:41Z
JayFoxRox
2
Created page with "{{Game}} A slightly modified version{{citation needed}} of the PC versions source code is available at https://github.com/TTimo/doom3.gpl"
wikitext
text/x-wiki
{{Game}}
A slightly modified version{{citation needed}} of the PC versions source code is available at https://github.com/TTimo/doom3.gpl
347877e37c3836687592c63fc4423dca5750145e
Return to Castle Wolfenstein: Tides of War
0
3894
6228
2017-09-16T08:30:13Z
JayFoxRox
2
Created page with "{{Game}} The source code to the PC version is available at https://github.com/id-Software/RTCW-SP and https://github.com/id-Software/RTCW-MP ."
wikitext
text/x-wiki
{{Game}}
The source code to the PC version is available at https://github.com/id-Software/RTCW-SP and https://github.com/id-Software/RTCW-MP .
9e7c9ad527a33da104323e2fc57699325b516b62
Talk:Xbox Game Disc
1
3895
6229
2017-09-16T11:09:46Z
JayFoxRox
2
/* Drive with modded firmwares */ new section
wikitext
text/x-wiki
== Drive with modded firmwares ==
There seems to be some overlap / similarities in the following devices:
https://fccid.io/TSS-TS-H353 = TS-H353, TS-H353A, SH-D163, SH-D163A, SD-M2013, SH-D163B (all IDE)
https://fccid.io/E-H023-00-4752 = SD-616, TS-H352, TS-H352A, SD-M1912, SH-D162, SH-D162C, SD-M2012, TS-H943 (all SATA)
Noteworthy that TS-H943 is the 360 Drive! It has (i)Xtreme and 0800 available.
Most other drives have been confirmed to work with Kreons firmware. We should figure out which of those drives are supported by the same firmware even.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 04:09, 16 September 2017 (PDT)
b0497ba40806125b8bcda36f13748b6ccf1a935d
6230
6229
2017-09-16T11:09:54Z
JayFoxRox
2
/* Drive with modded firmwares */
wikitext
text/x-wiki
== Drive with modded firmwares ==
There seems to be some overlap / similarities in the following devices:
* https://fccid.io/TSS-TS-H353 = TS-H353, TS-H353A, SH-D163, SH-D163A, SD-M2013, SH-D163B (all IDE)
* https://fccid.io/E-H023-00-4752 = SD-616, TS-H352, TS-H352A, SD-M1912, SH-D162, SH-D162C, SD-M2012, TS-H943 (all SATA)
Noteworthy that TS-H943 is the 360 Drive! It has (i)Xtreme and 0800 available.
Most other drives have been confirmed to work with Kreons firmware. We should figure out which of those drives are supported by the same firmware even.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 04:09, 16 September 2017 (PDT)
52f7af787de6a0b5441a1be599d19051ae02cec9
6231
6230
2017-09-16T16:43:25Z
JayFoxRox
2
remove wrong info about SATA/IDE
wikitext
text/x-wiki
== Drive with modded firmwares ==
There seems to be some overlap / similarities in the following devices:
* https://fccid.io/TSS-TS-H353 = TS-H353, TS-H353A, SH-D163, SH-D163A, SD-M2013, SH-D163B
* https://fccid.io/E-H023-00-4752 = SD-616, TS-H352, TS-H352A, SD-M1912, SH-D162, SH-D162C, SD-M2012, TS-H943
Noteworthy that TS-H943 is the 360 Drive! It has (i)Xtreme and 0800 available.
Most other drives have been confirmed to work with Kreons firmware. We should figure out which of those drives are supported by the same firmware even.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 04:09, 16 September 2017 (PDT)
9aac6401adf2a8925be85279ff45b7087f6ee9c1
Resources
0
3
6232
5630
2017-09-19T11:49:17Z
Codeasm
2480
added 2 interviews about the xboxs history
wikitext
text/x-wiki
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
d0654af08d7530d47ef6afae8ebb5ac14156eca2
Talk:Project Gotham Racing 2
1
3896
6238
2017-09-22T17:34:19Z
Zaykho
2495
/* Reverse engineering notes for file formats */ new section
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the actual content stored in the archive is sliced in sections, creating a folder for each of them.
Here an example for objects:
'''.PAK for objects'''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
73af8081aecf31c4923b0f74c8041a1f52e971ef
6239
6238
2017-09-22T18:02:05Z
Zaykho
2495
/* Reverse engineering notes for file formats */
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the content stored in the archive is sliced in sections, creating a folder for each of them and joining a file with the actual contents in it, mostly with a '''.dat''' suffix.
Here an example for objects:
'''.PAK for objects : red_cone.pak '''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
'''WMSH''' or sometime '''MESH'''
----
The ''00000000.dat'' file contain the '''faces indices''', and ''supposedly'', the '''strip''' and the how the vertices are read '''( float, word ? )'''.
'''MAT'''
----
The ''00000001.dat'' file contain the '''material''' properties : diffuse, specular, ambient etc... of each material applied to the 3D file.
'''GPUD'''
----
The ''00000002.dat'' file contain all the '''textures''', each of them followed by a small part of data ''( texture configuration ? mimaps ? )''. Finally, after all the textures, the '''vertices and UV position''' are stored in one chunk of data.
'''TEXT'''
----
The ''00000003.dat'' file contain all the '''text and name''' related to the texture, it also indicate where each textures are located inside '''GPUD'''.
02726fec379542558b33eb8e6026914a71152d77
6240
6239
2017-09-22T18:06:05Z
Zaykho
2495
/* Reverse engineering notes for file formats */
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the content stored in the archive is sliced in sections, creating a folder for each of them and joining a file with the actual contents in it, mostly with a '''.dat''' suffix.
Here an example for objects:
'''.PAK for objects : red_cone.pak '''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
'''WMSH''' or sometime '''MESH'''
----
The ''00000000.dat'' file contain the '''faces indices''', and ''supposedly'', the '''strip''' and the how the vertices are read '''( float, word ? )'''.
'''MAT'''
----
The ''00000001.dat'' file contain the '''material''' properties : diffuse, specular, ambient etc... of each material applied to the 3D file.
'''GPUD'''
----
The ''00000002.dat'' file contain all the '''textures''', each of them followed by a small part of data ''( texture configuration ? mimaps ? )''. Finally, after all the textures, the '''vertices and UV position''' are stored in one chunk of data.
'''TEXT'''
----
The ''00000003.dat'' file contain all the '''text and name''' related to the texture, it also indicate where each textures are located inside '''GPUD'''.
'''VB'''
----
The ''00000004.dat'' file contain the '''start address offset''' of the vertices and UV section in '''GPUD'''. If the 3D mesh have multiples groups/sections, the VB file will store each address.
211cf930519911bb2de89415e3fd3d36f43b7da9
6241
6240
2017-09-22T18:08:18Z
Zaykho
2495
/* Reverse engineering notes for file formats */
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the content stored in the archive is sliced in sections, creating a folder for each of them and joining a file with the actual contents in it, mostly with a '''.dat''' suffix.
Here an example for objects:
'''.PAK for object : red_cone.pak '''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
'''WMSH''' or sometime '''MESH'''
----
The ''00000000.dat'' file contain the '''faces indices''', and ''supposedly'', the '''strip''' and the how the vertices are read '''( float, word ? )'''.
'''MAT'''
----
The ''00000001.dat'' file contain the '''material''' properties : diffuse, specular, ambient etc... of each material applied to the 3D file.
'''GPUD'''
----
The ''00000002.dat'' file contain all the '''textures''', each of them followed by a small part of data ''( texture configuration ? mipmaps ? )''. Finally, after all the textures, the '''vertices and UV position''' are stored in one chunk of data.
'''TEXT'''
----
The ''00000003.dat'' file contain all the '''text and name''' related to the texture, it also indicate where each textures are located inside '''GPUD'''.
'''VB'''
----
The ''00000004.dat'' file contain the '''start address offset''' of the vertices and UV section in '''GPUD'''. If the 3D mesh have multiples groups/sections, the VB file will store each address.
08dc8b3baa02bfd73950271363fd07376ff4fd4a
6242
6241
2017-09-22T18:08:56Z
Zaykho
2495
/* Reverse engineering notes for file formats */
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the content stored in the archive is sliced in sections, creating a folder for each of them and joining a file with the actual contents in it, mostly with a '''.dat''' suffix.
Here an example for objects:
'''.PAK for object : red_cone.pak '''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
'''WMSH''' or sometime '''MESH'''
----
The ''00000000.dat'' file contain the '''faces indices''', and ''supposedly'', the '''strip''' and the how the vertices are read '''( float, word ? )'''.
'''MAT'''
----
The ''00000001.dat'' file contain the '''material''' properties : diffuse, specular, ambient etc... of each material applied to the 3D file.
'''GPUD'''
----
The ''00000002.dat'' file contain all the '''textures''', each of them followed by a small part of data ''( texture configuration ? mipmaps ? )''. Finally, after all the textures, the '''vertices and UV position''' are stored in one chunk of data.
'''TEXT'''
----
The ''00000003.dat'' file contain all the '''text and name''' related to the texture, it also indicate where each textures are located inside '''GPUD'''.
'''VB'''
----
The ''00000004.dat'' file contain the '''start address offset''' of the vertices and UV section in the '''GPUD'''. If the 3D mesh have multiples groups/sections, the VB file will store each address.
a78c4bc6b39ac44c41db5cdb783cb07d96e5b99a
6243
6242
2017-09-23T08:03:30Z
JayFoxRox
2
Added more chunk types and some basic info
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream (This uses a non-standard PAK format)
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the content stored in the archive is sliced in sections, creating a folder for each of them and joining a file with the actual contents in it, mostly with a '''.dat''' suffix.
Here an example for objects:
'''.PAK for object : red_cone.pak '''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
----
=== PAK File format ===
The PAK format is a chunked format. Each chunk starts with:
* u32 chunk-type (can be interpreted as 4 byte ASCII magic)
* u32 unknown
* u32 size of chunk (excluding this field?)
The chunk can contain compressed or uncompressed data. Compression is probably indicated by the upper bits of the size (0xC0000000) being set.
Compression seems to be with a zlib header (<code>0x78, 0xDA</code>).
Data can be inline, directly following the header. However, in INDX chunks, the data is pointed to by an extra u32 field after each header.
==== INDX ====
* u32: number of chunks
* array of chunk headers, each with additional u32 field pointing to the data
* array of chunk data
==== WMSH ====
The ''00000000.dat'' file contain the '''faces indices''', and ''supposedly'', the '''strip''' and the how the vertices are read '''( float, word ? )'''.
==== MESH ====
Same as WMSH?
==== MAT ====
Material properties
The ''00000001.dat'' file contain the '''material''' properties : diffuse, specular, ambient etc... of each material applied to the 3D file.
==== SKY ====
==== WRAP ====
==== INST ====
Header has some field set to != 0.
Seems to contain subchunks which end with "END" chunk?
==== TIME ====
==== RCAM ====
==== ANIC ====
==== ROUT ====
==== RPRM ====
==== RTMP ====
==== GPUD ====
==== GPUS ====
==== TEX ====
==== LGHT ====
==== ACT ====
==== INFO ====
==== DRVP ====
==== AUDI ====
==== TVC ====
==== END ====
Marks the end of the file. Can also be inside a file and might mark the end of a subchunk there?
==== GPUD ====
GPU Data?
The ''00000002.dat'' file contain all the '''textures''', each of them followed by a small part of data ''( texture configuration ? mipmaps ? )''. Finally, after all the textures, the '''vertices and UV position''' are stored in one chunk of data.
==== TEXT ====
Texture information
The ''00000003.dat'' file contain all the '''text and name''' related to the texture, it also indicate where each textures are located inside '''GPUD'''.
==== VB ====
Vertex buffer information
The ''00000004.dat'' file contain the '''start address offset''' of the vertices and UV section in the '''GPUD'''. If the 3D mesh have multiples groups/sections, the VB file will store each address.
5351da2489a24cc28f6fb3660a9f50bb52ac053d
6244
6243
2017-09-23T16:38:50Z
JayFoxRox
2
/* Hacky python script to extract PAK textures */ new section
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream (This uses a non-standard PAK format)
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the content stored in the archive is sliced in sections, creating a folder for each of them and joining a file with the actual contents in it, mostly with a '''.dat''' suffix.
Here an example for objects:
'''.PAK for object : red_cone.pak '''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
----
=== PAK File format ===
The PAK format is a chunked format. Each chunk starts with:
* u32 chunk-type (can be interpreted as 4 byte ASCII magic)
* u32 unknown
* u32 size of chunk (excluding this field?)
The chunk can contain compressed or uncompressed data. Compression is probably indicated by the upper bits of the size (0xC0000000) being set.
Compression seems to be with a zlib header (<code>0x78, 0xDA</code>).
Data can be inline, directly following the header. However, in INDX chunks, the data is pointed to by an extra u32 field after each header.
==== INDX ====
* u32: number of chunks
* array of chunk headers, each with additional u32 field pointing to the data
* array of chunk data
==== WMSH ====
The ''00000000.dat'' file contain the '''faces indices''', and ''supposedly'', the '''strip''' and the how the vertices are read '''( float, word ? )'''.
==== MESH ====
Same as WMSH?
==== MAT ====
Material properties
The ''00000001.dat'' file contain the '''material''' properties : diffuse, specular, ambient etc... of each material applied to the 3D file.
==== SKY ====
==== WRAP ====
==== INST ====
Header has some field set to != 0.
Seems to contain subchunks which end with "END" chunk?
==== TIME ====
==== RCAM ====
==== ANIC ====
==== ROUT ====
==== RPRM ====
==== RTMP ====
==== GPUD ====
==== GPUS ====
==== TEX ====
==== LGHT ====
==== ACT ====
==== INFO ====
==== DRVP ====
==== AUDI ====
==== TVC ====
==== END ====
Marks the end of the file. Can also be inside a file and might mark the end of a subchunk there?
==== GPUD ====
GPU Data?
The ''00000002.dat'' file contain all the '''textures''', each of them followed by a small part of data ''( texture configuration ? mipmaps ? )''. Finally, after all the textures, the '''vertices and UV position''' are stored in one chunk of data.
==== TEXT ====
Texture information
The ''00000003.dat'' file contain all the '''text and name''' related to the texture, it also indicate where each textures are located inside '''GPUD'''.
==== VB ====
Vertex buffer information
The ''00000004.dat'' file contain the '''start address offset''' of the vertices and UV section in the '''GPUD'''. If the 3D mesh have multiples groups/sections, the VB file will store each address.
== Hacky python script to extract PAK textures ==
<pre>
#!/usr/bin/env python3
# Project Gotham Racing 2 (.pak)
# Originally a script for QuickBMS http://quickbms.aluigi.org
# comtype unzip_dynamic
import sys
import struct
import zlib
from PIL import Image
def readLong(f):
return struct.unpack('<I', f.read(4))[0]
def clog(f, NAME, OFFSET, ZSIZE, SIZE):
print('Exporting ' + NAME + ' (Compressed) from ' + str(OFFSET)) #FIXME: Export
f.seek(OFFSET)
compressed = f.read(ZSIZE)
#print(compressed)
data = bytes()
try:
decompress = zlib.decompressobj(15)
for b in compressed:
data += decompress.decompress(compressed)
except:
print("Decompression failed after " + str(len(data)) + ' / ' + str(SIZE) + ' bytes')
with open(NAME, 'wb') as e:
e.write(data)
#print(data)
return data
def log(f, NAME, OFFSET, ZSIZE):
f.seek(OFFSET)
data = f.read(ZSIZE)
print('Exporting ' + NAME) #FIXME: Export
with open(NAME, 'wb') as e:
e.write(data)
return data
textures = []
gpud = bytes([])
def readChunk(f, indexed = False):
global gpud
global textures
print("At " + str(f.tell()))
chunkType = f.read(4)
NAME = chunkType.decode('ascii').rstrip('\0') # FIXME: Remove?!
print("Found chunk " + NAME)
DUMMY = readLong(f)
SIZE = readLong(f)
print("Dummy " + str(DUMMY))
print("Size " + str(SIZE))
if indexed == True:
OFFSET = readLong(f) + 0xC
else:
OFFSET = f.tell()
TMP = f.tell()
if chunkType == b'INDX':
print("Reading index?!")
FILES = readLong(f)
for i in range(0, FILES):
readChunk(f, True)
f.read(SIZE - FILES * 16 - 4)
return
elif chunkType == b'WMSH':
pass
elif chunkType == b'SKY\0':
pass
elif chunkType == b'WRAP':
pass
elif chunkType == b'INST':
pass
elif chunkType == b'MAT\0':
pass
elif chunkType == b'TIME':
pass
elif chunkType == b'RCAM':
pass
elif chunkType == b'ANIC':
pass
elif chunkType == b'ROUT':
pass
elif chunkType == b'RPRM':
pass
elif chunkType == b'RTMP':
pass
elif chunkType == b'GPUD':
pass
elif chunkType == b'GPUS':
pass
elif chunkType == b'TEX\0':
pass
elif chunkType == b'LGHT':
pass
elif chunkType == b'ACT\0':
pass
elif chunkType == b'VB\0\0':
offset = readLong(f) #FIXME: Don't read here!
print("VB at " + str(offset))
elif chunkType == b'INFO':
pass
elif chunkType == b'DRVP':
pass
elif chunkType == b'TVC\0':
pass
elif chunkType == b'MESH':
pass
elif chunkType == b'TEXT':
pass
elif chunkType == b'AUDI':
pass
elif chunkType == b'END\0':
assert(SIZE == 0)
return
else:
print("Unknown chunk type: " + NAME)
print(chunkType)
assert(False)
f.seek(TMP)
if indexed == True:
f.seek(OFFSET)
if SIZE & 0xC0000000: #FIXME: Figure out actual use of these 2 bits
ZSIZE = SIZE & 0x3FFFFFFF
SIZE = readLong(f)
print("c-zSize is " + str(ZSIZE))
print("c-Size is " + str(SIZE))
OFFSET = f.tell()
data = clog(f, NAME, OFFSET, ZSIZE - 4, SIZE)
else:
TMP_SIGN = f.read(4)
if TMP_SIGN == b'COLR':
ZERO = readLong(f)
ZSIZE = readLong(f)
SIZE = readLong(f)
print("zSize is " + str(ZSIZE))
print("Size is " + str(SIZE))
OFFSET = f.tell()
if ZSIZE & 0xC0000000: #FIXME: Figure out actual use of these 2 bits
ZSIZE = ZSIZE & 0x3FFFFFFF
print("c-zSize is " + str(ZSIZE))
data = clog(f, NAME, OFFSET, ZSIZE, SIZE)
else:
data = log(f, NAME, OFFSET, ZSIZE)
else:
data = log(f, NAME, OFFSET, SIZE)
if chunkType == b'WMSH':
offset = 52
for i in range(0, 1000):
print(struct.unpack('<H', data[offset:offset+2])[0])
offset += 2
elif chunkType == b'GPUD':
gpud = data
offset = 87424
for i in range(0, 1000):
if False:
x = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
y = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
z = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
color = 0
print("v %f, %f, %f, 0x%08X" % (x, y, z, color))
# The start of the file is closer to this
if False:
x = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
y = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
z = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
color = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print("v %f, %f, %f, 0x%08X" % (x, y, z, color))
elif chunkType == b'TEXT':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " car texture(s):")
for i in range(count):
name = data[offset:offset+32]
offset += 32
dataOffset = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(" Texture name: " + name.decode('ascii').rstrip('\0') + " @ " + str(dataOffset))
#FIXME: There is more data here, at least 4 byte!
#count = struct.unpack('<I', data[offset:offset+4])[0]
#print(str(count) + " Unknown(s):")
elif chunkType == b'TEX\0':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " world texture(s):")
for i in range(count):
name = data[offset:offset+32]
offset += 32
a1 = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
a2 = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
b = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
c = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
d = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
h = 1 << (a2 & 0xF)
w = 1 << ((a2 >> 4) & 0xF)
print("Size: " + str(w) + "x" + str(h) + " (End: 0x%08X)" % (b + (w * h * 4)//3))
someH = 1 << (d & 0xF)
someW = 1 << ((d >> 4) & 0xF)
print("Max. Size (?): " + str(someW) + "x" + str(someH))
#FIXME: a?
gpudOffset = b
#FIXME: c?
#FIXME: d?
texture = {}
texture['name'] = name.decode('ascii').rstrip('\0')
texture['offset'] = gpudOffset
texture['width'] = w
texture['height'] = h
texture['format'] = a1
textures += [texture]
print(" Texture name: " + texture['name'] + "\n @ 0x%04X 0x%04X 0x%08X 0x%08X 0x%08X " % (a1,a2,b,c,d))
print("\n")
#FIXME: There is more data here, at least 4 byte!
#count = struct.unpack('<I', data[offset:offset+4])[0]
#print(str(count) + " Unknown(s):")
elif chunkType == b'AUDI':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " audio sample(s) (???):")
for i in range(count):
name = data[offset:offset+4]
offset += 4
print(" Name: " + str(name))
#FIXME: Read rest of data
offset += 12
elif chunkType == b'MAT\0':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " material(s):")
for i in range(count):
a = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
b = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
c = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
d = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
print(" Material: 0x%04X, 0x%04X, 0x%04X, 0x%04X" % (a, b, c, d))
#FIXME: Read rest of data
if indexed == True:
f.seek(TMP)
with open(sys.argv[1], 'rb') as f:
while True:
tmp = f.tell()
try:
if f.read(1) == b'':
raise
except:
print("EOF?!")
break
f.seek(tmp)
readChunk(f)
for texture in textures:
#with open(str(texture['name']) + ".raw",'wb') as e:
# DXT3 = 1 byte per pixel
print("Exporting " + texture['name'] + " (%d x %d)" % (texture['width'], texture['height']))
size = texture['width'] * texture['height']
if texture['width'] < 4:
print("Texture too small!") # FIXME!!!
continue
data = gpud[texture['offset']:texture['offset']+size]
if texture['format'] == 0x0414:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 3)
elif texture['format'] == 0x041C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 3)
elif texture['format'] == 0x021C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 1)
else:
print("Unknown format! 0x%04X" % texture['format'])
image = None
if image:
image.save(texture['name'] + "-0x%04X" % texture['format'] + ".png")
#e.write()
</pre>
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 09:38, 23 September 2017 (PDT)
761f0bd5c2fcfd42e9e41f0d47c07b70dc679188
6245
6244
2017-09-23T19:09:49Z
JayFoxRox
2
/* Hacky python script to extract PAK textures */
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream (This uses a non-standard PAK format)
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the content stored in the archive is sliced in sections, creating a folder for each of them and joining a file with the actual contents in it, mostly with a '''.dat''' suffix.
Here an example for objects:
'''.PAK for object : red_cone.pak '''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
----
=== PAK File format ===
The PAK format is a chunked format. Each chunk starts with:
* u32 chunk-type (can be interpreted as 4 byte ASCII magic)
* u32 unknown
* u32 size of chunk (excluding this field?)
The chunk can contain compressed or uncompressed data. Compression is probably indicated by the upper bits of the size (0xC0000000) being set.
Compression seems to be with a zlib header (<code>0x78, 0xDA</code>).
Data can be inline, directly following the header. However, in INDX chunks, the data is pointed to by an extra u32 field after each header.
==== INDX ====
* u32: number of chunks
* array of chunk headers, each with additional u32 field pointing to the data
* array of chunk data
==== WMSH ====
The ''00000000.dat'' file contain the '''faces indices''', and ''supposedly'', the '''strip''' and the how the vertices are read '''( float, word ? )'''.
==== MESH ====
Same as WMSH?
==== MAT ====
Material properties
The ''00000001.dat'' file contain the '''material''' properties : diffuse, specular, ambient etc... of each material applied to the 3D file.
==== SKY ====
==== WRAP ====
==== INST ====
Header has some field set to != 0.
Seems to contain subchunks which end with "END" chunk?
==== TIME ====
==== RCAM ====
==== ANIC ====
==== ROUT ====
==== RPRM ====
==== RTMP ====
==== GPUD ====
==== GPUS ====
==== TEX ====
==== LGHT ====
==== ACT ====
==== INFO ====
==== DRVP ====
==== AUDI ====
==== TVC ====
==== END ====
Marks the end of the file. Can also be inside a file and might mark the end of a subchunk there?
==== GPUD ====
GPU Data?
The ''00000002.dat'' file contain all the '''textures''', each of them followed by a small part of data ''( texture configuration ? mipmaps ? )''. Finally, after all the textures, the '''vertices and UV position''' are stored in one chunk of data.
==== TEXT ====
Texture information
The ''00000003.dat'' file contain all the '''text and name''' related to the texture, it also indicate where each textures are located inside '''GPUD'''.
==== VB ====
Vertex buffer information
The ''00000004.dat'' file contain the '''start address offset''' of the vertices and UV section in the '''GPUD'''. If the 3D mesh have multiples groups/sections, the VB file will store each address.
== Hacky python script to extract PAK textures ==
<pre>
#!/usr/bin/env python3
# Project Gotham Racing 2 (.pak)
# Originally a script for QuickBMS http://quickbms.aluigi.org
# comtype unzip_dynamic
import sys
import struct
import zlib
from PIL import Image
# Array entries to export for debug purposes
N = 20
def readLong(f):
return struct.unpack('<I', f.read(4))[0]
def clog(f, NAME, OFFSET, ZSIZE, SIZE):
print('Exporting ' + NAME + ' (Compressed) from ' + str(OFFSET)) #FIXME: Export
f.seek(OFFSET)
compressed = f.read(ZSIZE)
#print(compressed)
data = bytes()
try:
decompress = zlib.decompressobj(15)
for b in compressed:
data += decompress.decompress(compressed)
except:
print("Decompression failed after " + str(len(data)) + ' / ' + str(SIZE) + ' bytes')
with open(NAME, 'wb') as e:
e.write(data)
#print(data)
return data
def log(f, NAME, OFFSET, ZSIZE):
f.seek(OFFSET)
data = f.read(ZSIZE)
print('Exporting ' + NAME) #FIXME: Export
with open(NAME, 'wb') as e:
e.write(data)
return data
textures = []
vbs = []
meshs = []
gpud = bytes([])
def readChunks(f):
while True:
chunk = readChunk(f)
if chunk['type'] == b'END\0':
break
def readChunk(f, indexed = False):
global gpud
global textures
global vbs
global meshs
print("At " + str(f.tell()))
chunkType = f.read(4)
NAME = chunkType.decode('ascii').rstrip('\0') # FIXME: Remove?!
print("Found chunk " + NAME)
DUMMY = readLong(f)
SIZE = readLong(f)
chunk = {}
chunk['type'] = chunkType
chunk['size'] = SIZE
if DUMMY:
chunk['children'] = []
print("Dummy " + str(DUMMY))
print("Size " + str(SIZE))
if indexed == True:
OFFSET = readLong(f) + 0xC
print("Offset " + str(OFFSET))
chunk['offset'] = OFFSET
else:
OFFSET = f.tell()
TMP = f.tell()
if chunkType == b'INDX':
print("Reading index?!")
FILES = readLong(f)
for i in range(0, FILES):
readChunk(f, True)
f.read(SIZE - FILES * 16 - 4)
return chunk
elif chunkType == b'WMSH':
pass
elif chunkType == b'SKY\0':
pass
elif chunkType == b'WRAP':
pass
elif chunkType == b'INST':
pass
elif chunkType == b'MAT\0':
pass
elif chunkType == b'TIME':
pass
elif chunkType == b'RCAM':
pass
elif chunkType == b'ANIC':
pass
elif chunkType == b'ROUT':
pass
elif chunkType == b'RPRM':
pass
elif chunkType == b'RTMP':
# Much like INDX?
pass
elif chunkType == b'GPUD':
pass
elif chunkType == b'GPUS':
pass
elif chunkType == b'TEX\0':
pass
elif chunkType == b'LGHT':
pass
elif chunkType == b'ACT\0':
pass
elif chunkType == b'VB\0\0':
pass
elif chunkType == b'INFO':
pass
elif chunkType == b'DRVP':
pass
elif chunkType == b'TVC\0':
pass
elif chunkType == b'MESH':
pass
elif chunkType == b'COLR':
pass
elif chunkType == b'TEXT':
pass
elif chunkType == b'AUDI':
pass
elif chunkType == b'END\0':
assert(SIZE == 0)
return chunk
else:
print("Unknown chunk type: " + NAME)
print(chunkType)
assert(False)
f.seek(TMP)
if indexed == True:
f.seek(OFFSET)
# Nested
if(DUMMY == 1):
chunk['children'] = readChunks(f)
f.seek(TMP)
return chunk
#FIXME: RTMP has DUMMY = 2!
if DUMMY == 2:
print("Not sure how to handle DUMMY = 2")
if SIZE & 0xC0000000: #FIXME: Figure out actual use of these 2 bits
ZSIZE = SIZE & 0x3FFFFFFF
SIZE = readLong(f)
print("c-zSize is " + str(ZSIZE))
print("c-Size is " + str(SIZE))
OFFSET = f.tell()
data = clog(f, NAME, OFFSET, ZSIZE - 4, SIZE)
else:
data = log(f, NAME, OFFSET, SIZE)
if chunkType == b'WMSH':
offset = 52
for i in range(0, N):
print(struct.unpack('<H', data[offset:offset+2])[0])
offset += 2
elif chunkType == b'GPUD':
gpud = data
offset = 87424
for i in range(0, N):
if False:
x = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
y = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
z = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
color = 0
print("v %f, %f, %f, 0x%08X" % (x, y, z, color))
# The start of the file is closer to this
if False:
x = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
y = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
z = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
color = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print("v %f, %f, %f, 0x%08X" % (x, y, z, color))
elif chunkType == b'TEXT':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " car texture(s):")
for i in range(count):
name = data[offset:offset+32]
offset += 32
fmt = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
dim = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
dataOffset = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
texture = {}
texture['name'] = name.decode('ascii').rstrip('\0')
print("0x%04X" % dim)
texture['width'] = 1 << ((dim >> 4) & 0xF)
texture['height'] = 1 << (dim & 0xF)
texture['format'] = fmt
texture['offset'] = dataOffset
textures += [texture]
print(" Texture name: " + texture['name'])
#FIXME: There is more data here, at least 4 byte!
#count = struct.unpack('<I', data[offset:offset+4])[0]
#print(str(count) + " Unknown(s):")
elif chunkType == b'TEX\0':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " world texture(s):")
for i in range(count):
name = data[offset:offset+32]
offset += 32
a1 = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
a2 = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
b = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
c = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
d = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
h = 1 << (a2 & 0xF)
w = 1 << ((a2 >> 4) & 0xF)
print("Size: " + str(w) + "x" + str(h) + " (End: 0x%08X)" % (b + (w * h * 4)//3))
someH = 1 << (d & 0xF)
someW = 1 << ((d >> 4) & 0xF)
print("Max. Size (?): " + str(someW) + "x" + str(someH))
#FIXME: a?
gpudOffset = b
#FIXME: c?
#FIXME: d?
texture = {}
texture['name'] = name.decode('ascii').rstrip('\0')
texture['offset'] = gpudOffset
texture['width'] = w
texture['height'] = h
texture['format'] = a1
textures += [texture]
print(" Texture name: " + texture['name'] + "\n @ 0x%04X 0x%04X 0x%08X 0x%08X 0x%08X " % (a1,a2,b,c,d))
print("\n")
#FIXME: There is more data here, at least 4 byte!
#count = struct.unpack('<I', data[offset:offset+4])[0]
#print(str(count) + " Unknown(s):")
elif chunkType == b'VB\0\0':
vb = {}
for i in range(0, SIZE, 4):
vb['offset'] = struct.unpack('<I', data[i:i+4])[0]
vbs += [vb]
elif chunkType == b'MESH' or chunkType == b'WMSH':
# Originally written for MESH, also might work for WMSH
offset = 52
indices = []
for i in range(0, 20000): #FIXME: Number of indices
j = struct.unpack('<H', data[offset:offset+2])[0]
indices += [j]
offset += 2
mesh = {}
mesh['indices'] = indices
meshs += [mesh]
elif chunkType == b'AUDI':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " audio sample(s) (???):")
for i in range(count):
name = data[offset:offset+4]
offset += 4
print(" Name: " + str(name))
#FIXME: Read rest of data
offset += 12
elif chunkType == b'MAT\0':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " material(s):")
for i in range(count):
a = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
b = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
c = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
d = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
print(" Material: 0x%04X, 0x%04X, 0x%04X, 0x%04X" % (a, b, c, d))
#FIXME: Read rest of data
if indexed == True:
f.seek(TMP)
return chunk
with open(sys.argv[1], 'rb') as f:
while True:
tmp = f.tell()
try:
if f.read(1) == b'':
raise
except:
print("EOF?!")
break
f.seek(tmp)
readChunks(f)
with open('test.obj', 'w') as e:
for vb in vbs:
print("VB: " + str(vb['offset']))
offset = vb['offset']
for i in range(0, 100):
print(i) # Helper so we can figure out when the parser hangs
x = 0
y = 0
z = 0
u = 0
v = 0
if False: # /tmp/240Z.pak_hrd
x = struct.unpack('<h', gpud[offset:offset+2])[0]
offset += 2
y = struct.unpack('<h', gpud[offset:offset+2])[0]
offset += 2
z = struct.unpack('<h', gpud[offset:offset+2])[0]
offset += 2
offset += 4
#FIXME: Fix scale
u = struct.unpack('<h', gpud[offset:offset+2])[0] / 512
offset += 2
v = struct.unpack('<h', gpud[offset:offset+2])[0] / 512
offset += 2
if True: # /tmp/Red Cone.pak
#FIXME: Broken still!
x = struct.unpack('<f', gpud[offset:offset+4])[0]
offset += 4
y = struct.unpack('<f', gpud[offset:offset+4])[0]
offset += 4
z = struct.unpack('<f', gpud[offset:offset+4])[0]
offset += 4
offset += 6
print("xyz: %f %f %f; uv: %f %f" % (x,y,z, u,v))
e.write('v %f %f %f\n' % (x,y,z))
e.write('vt %f %f\n' % (u,v))
for mesh in meshs:
c = -1
b = -1
a = -1
for i in mesh['indices']:
c = b
b = a
a = i + 1
if c >= 0:
e.write('f %d/%d %d/%d %d/%d\n' % (c,c,b,b,a,a))
for texture in textures:
#with open(str(texture['name']) + ".raw",'wb') as e:
# DXT3 = 1 byte per pixel
print("Exporting " + texture['name'] + " (%d x %d)" % (texture['width'], texture['height']))
size = texture['width'] * texture['height']
if texture['width'] < 4:
print("Texture too small!") # FIXME!!!
continue
data = gpud[texture['offset']:texture['offset']+size]
if texture['format'] == 0x0414:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 3)
elif texture['format'] == 0x040C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 3)
elif texture['format'] == 0x041C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 3)
elif texture['format'] == 0x021C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 1)
else:
print("Unknown format! 0x%04X" % texture['format'])
image = None
if image:
image.save('textures/' + texture['name'] + "-0x%04X" % texture['format'] + ".png")
#e.write()
</pre>
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 09:38, 23 September 2017 (PDT)
de0ee7c0879ad6fb465899e2754785651094db8c
6246
6245
2017-09-24T09:12:31Z
JayFoxRox
2
Updated, but still broken
wikitext
text/x-wiki
== Reverse engineering notes for file formats ==
--[[User:Zaykho|Zaykho]] ([[User talk:Zaykho|talk]]) 10:34, 22 September 2017 (PDT)
Project Gotham Racing 2 use a .PAK container for storing 3D elements, textures and 3D configurations files.
Multiple types of .PAK name can be seen in PGR2, their names are related to their functions and indicate what type of elements are stored:
'''.PAK for objects''' ( Cache\Objects & Cache\Cars )
----
.pak
'''.PAK for cars''' ( Cache\Cars )
----
.pak_cth
.pak_hrd
.pak_opn ( only for roadster : open mode)
.pak_sft ( only for roadster : closed mode for rain)
'''.PAK for maps''' ( Game\Areas )
----
.pak_common
.pak_day
.pak_night
.pak_overcast
.pak_stream (This uses a non-standard PAK format)
To extract those .PAK files, a tool called [http://aluigi.altervista.org/quickbms.htm quickbms] and a [http://aluigi.altervista.org/bms/project_gotham_2_pak.bms PGR2 bms script] ( both made by Luigi Auriemma ) can be used to get most of the contents stored in the archive.
When extracted, the content stored in the archive is sliced in sections, creating a folder for each of them and joining a file with the actual contents in it, mostly with a '''.dat''' suffix.
Here an example for objects:
'''.PAK for object : red_cone.pak '''
----
WMSH \ 00000000.dat
MAT \ 00000001.dat
GPUD \ 00000002.dat
TEXT \ 00000003.nfc
VB \ 00000004.dat
END ( nothing, no folder, no files )
----
=== PAK File format ===
The PAK format is a chunked format. Each chunk starts with:
* u32 chunk-type (can be interpreted as 4 byte ASCII magic)
* u32 unknown
* u32 size of chunk (excluding this field?)
The chunk can contain compressed or uncompressed data. Compression is probably indicated by the upper bits of the size (0xC0000000) being set.
Compression seems to be with a zlib header (<code>0x78, 0xDA</code>).
Data can be inline, directly following the header. However, in INDX chunks, the data is pointed to by an extra u32 field after each header.
==== INDX ====
* u32: number of chunks
* array of chunk headers, each with additional u32 field pointing to the data
* array of chunk data
==== WMSH ====
The ''00000000.dat'' file contain the '''faces indices''', and ''supposedly'', the '''strip''' and the how the vertices are read '''( float, word ? )'''.
==== MESH ====
Same as WMSH?
==== MAT ====
Material properties
The ''00000001.dat'' file contain the '''material''' properties : diffuse, specular, ambient etc... of each material applied to the 3D file.
==== SKY ====
==== WRAP ====
==== INST ====
Header has some field set to != 0.
Seems to contain subchunks which end with "END" chunk?
==== TIME ====
==== RCAM ====
==== ANIC ====
==== ROUT ====
==== RPRM ====
==== RTMP ====
==== GPUD ====
==== GPUS ====
==== TEX ====
==== LGHT ====
==== ACT ====
==== INFO ====
==== DRVP ====
==== AUDI ====
==== TVC ====
==== END ====
Marks the end of the file. Can also be inside a file and might mark the end of a subchunk there?
==== GPUD ====
GPU Data?
The ''00000002.dat'' file contain all the '''textures''', each of them followed by a small part of data ''( texture configuration ? mipmaps ? )''. Finally, after all the textures, the '''vertices and UV position''' are stored in one chunk of data.
==== TEXT ====
Texture information
The ''00000003.dat'' file contain all the '''text and name''' related to the texture, it also indicate where each textures are located inside '''GPUD'''.
==== VB ====
Vertex buffer information
The ''00000004.dat'' file contain the '''start address offset''' of the vertices and UV section in the '''GPUD'''. If the 3D mesh have multiples groups/sections, the VB file will store each address.
== Hacky python script to extract PAK textures ==
<pre>
#!/usr/bin/env python3
# Project Gotham Racing 2 (.pak)
# Originally a script for QuickBMS http://quickbms.aluigi.org
# comtype unzip_dynamic
import sys
import struct
import zlib
from PIL import Image
# Array entries to export for debug purposes
N = 20
def readLong(f):
return struct.unpack('<I', f.read(4))[0]
def clog(f, NAME, OFFSET, ZSIZE, SIZE):
print('Exporting ' + NAME + ' (Compressed) from ' + str(OFFSET)) #FIXME: Export
f.seek(OFFSET)
compressed = f.read(ZSIZE)
#print(compressed)
data = bytes()
try:
decompress = zlib.decompressobj(15)
for b in compressed:
data += decompress.decompress(compressed)
raise
except:
print("Decompression failed after " + str(len(data)) + ' / ' + str(SIZE) + ' bytes')
with open(NAME, 'wb') as e:
e.write(data)
#print(data)
return data
def log(f, NAME, OFFSET, ZSIZE):
f.seek(OFFSET)
data = f.read(ZSIZE)
print('Exporting ' + NAME) #FIXME: Export
with open(NAME, 'wb') as e:
e.write(data)
return data
textures = []
vbs = []
meshs = []
gpud = bytes([])
def readChunks(f):
while True:
chunk = readChunk(f)
if chunk['type'] == b'END\0':
break
def readChunk(f, indexed = False):
global gpud
global textures
global vbs
global meshs
print("At " + str(f.tell()))
chunkType = f.read(4)
NAME = chunkType.decode('ascii').rstrip('\0') # FIXME: Remove?!
print("Found chunk " + NAME)
DUMMY = readLong(f)
SIZE = readLong(f)
chunk = {}
chunk['type'] = chunkType
chunk['size'] = SIZE
if DUMMY:
chunk['children'] = []
print("Dummy " + str(DUMMY))
print("Size " + str(SIZE))
if indexed == True:
OFFSET = readLong(f) + 0xC
print("Offset " + str(OFFSET))
chunk['offset'] = OFFSET
else:
OFFSET = f.tell()
TMP = f.tell()
if chunkType == b'INDX':
print("Reading index?!")
FILES = readLong(f)
for i in range(0, FILES):
readChunk(f, True)
f.read(SIZE - FILES * 16 - 4)
return chunk
elif chunkType == b'WMSH':
pass
elif chunkType == b'SKY\0':
pass
elif chunkType == b'WRAP':
pass
elif chunkType == b'INST':
pass
elif chunkType == b'MAT\0':
pass
elif chunkType == b'TIME':
pass
elif chunkType == b'RCAM':
pass
elif chunkType == b'ANIC':
pass
elif chunkType == b'ROUT':
pass
elif chunkType == b'RPRM':
pass
elif chunkType == b'RTMP':
# Much like INDX?
pass
elif chunkType == b'GPUD':
pass
elif chunkType == b'GPUS':
pass
elif chunkType == b'TEX\0':
pass
elif chunkType == b'LGHT':
pass
elif chunkType == b'ACT\0':
pass
elif chunkType == b'VB\0\0':
pass
elif chunkType == b'INFO':
pass
elif chunkType == b'DRVP':
pass
elif chunkType == b'TVC\0':
pass
elif chunkType == b'MESH':
pass
elif chunkType == b'COLR':
pass
elif chunkType == b'TEXT':
pass
elif chunkType == b'AUDI':
pass
elif chunkType == b'END\0':
assert(SIZE == 0)
return chunk
else:
print("Unknown chunk type: " + NAME)
print(chunkType)
assert(False)
f.seek(TMP)
if indexed == True:
f.seek(OFFSET)
# Nested
if(DUMMY == 1):
chunk['children'] = readChunks(f)
f.seek(TMP)
return chunk
#FIXME: RTMP has DUMMY = 2!
if DUMMY == 2:
print("Not sure how to handle DUMMY = 2")
if SIZE & 0xC0000000: #FIXME: Figure out actual use of these 2 bits
ZSIZE = SIZE & 0x3FFFFFFF
SIZE = readLong(f)
print("c-zSize is " + str(ZSIZE))
print("c-Size is " + str(SIZE))
OFFSET = f.tell()
data = clog(f, NAME, OFFSET, ZSIZE - 4, SIZE)
else:
data = log(f, NAME, OFFSET, SIZE)
if chunkType == b'GPUD':
gpud = data
offset = 87424
for i in range(0, N):
if False:
x = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
y = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
z = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
color = 0
print("v %f, %f, %f, 0x%08X" % (x, y, z, color))
# The start of the file is closer to this
if False:
x = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
y = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
z = struct.unpack('<f', data[offset:offset+4])[0]
offset += 4
color = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print("v %f, %f, %f, 0x%08X" % (x, y, z, color))
elif chunkType == b'TEXT':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " car texture(s):")
for i in range(count):
name = data[offset:offset+32]
offset += 32
fmt = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
dim = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
dataOffset = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
texture = {}
texture['name'] = name.decode('ascii').rstrip('\0')
print("0x%04X" % dim)
texture['width'] = 1 << ((dim >> 4) & 0xF)
texture['height'] = 1 << (dim & 0xF)
texture['format'] = fmt
texture['offset'] = dataOffset
textures += [texture]
print(" Texture name: " + texture['name'])
#FIXME: There is more data here, at least 4 byte!
#count = struct.unpack('<I', data[offset:offset+4])[0]
#print(str(count) + " Unknown(s):")
elif chunkType == b'TEX\0':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " world texture(s):")
for i in range(count):
name = data[offset:offset+32]
offset += 32
a1 = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
a2 = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
b = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
c = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
d = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
h = 1 << (a2 & 0xF)
w = 1 << ((a2 >> 4) & 0xF)
print("Size: " + str(w) + "x" + str(h) + " (End: 0x%08X)" % (b + (w * h * 4)//3))
someH = 1 << (d & 0xF)
someW = 1 << ((d >> 4) & 0xF)
print("Max. Size (?): " + str(someW) + "x" + str(someH))
#FIXME: a?
gpudOffset = b
#FIXME: c?
#FIXME: d?
texture = {}
texture['name'] = name.decode('ascii').rstrip('\0')
texture['offset'] = gpudOffset
texture['width'] = w
texture['height'] = h
texture['format'] = a1
textures += [texture]
print(" Texture name: " + texture['name'] + "\n @ 0x%04X 0x%04X 0x%08X 0x%08X 0x%08X " % (a1,a2,b,c,d))
print("\n")
#FIXME: There is more data here, at least 4 byte!
#count = struct.unpack('<I', data[offset:offset+4])[0]
#print(str(count) + " Unknown(s):")
elif chunkType == b'VB\0\0':
vb = {}
for i in range(0, SIZE, 4):
vb['offset'] = struct.unpack('<I', data[i:i+4])[0]
vbs += [vb]
elif chunkType == b'MESH' or chunkType == b'WMSH':
# Originally written for MESH, also might work for WMSH
offset = 42
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print("Index count might be " + str(count))
unk = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print("Unk " + str(unk))
#FIXME: what is this? always zero?!
offset += 2
indices = []
for i in range(0, count): #FIXME: Number of indices
j = struct.unpack('<H', data[offset:offset+2])[0]
indices += [j]
offset += 2
if False:
#FIXME: Very much WIP.. only developing this for WMSH
# (MESH seems to be slightly different)
# Align to next 4 byte barrier
#offset += 3
#offset &= ~3
batchCount = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
print("Batches " + str(batchCount))
if batchCount > 0:
# Format and len until first primitive restart or something?
for i in range(0, batchCount):
#FIXME: Number of indices per batch in 32 bit?!
x = struct.unpack('<I', data[offset:offset+4])[0]
print(" A: " + str(x))
offset += 4
for i in range(0, batchCount):
#FIXME: Same as before but in 16 bit?!
x = struct.unpack('<H', data[offset:offset+2])[0]
print(" B: " + str(x))
offset += 2
# We need at least one batch
batchCount = max(1, batchCount)
for i in range(0, batchCount):
x = struct.unpack('<BBBBBB', data[offset:offset+6])
offset += 6
print("data: %02X %02X %02X %02X %02X %02X" % x)
# FIXME: How to get here on our own?!
assert(offset == (len(data) - batchCount * 2))
totalSize = 0
for i in range(0, batchCount):
batchSize = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
totalSize += batchSize
print(" Batch size is " + str(batchSize) + " total: " + str(totalSize))
mesh = {}
mesh['indices'] = indices
meshs += [mesh]
elif chunkType == b'AUDI':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " audio sample(s) (???):")
for i in range(count):
name = data[offset:offset+4]
offset += 4
print(" Name: " + str(name))
#FIXME: Read rest of data
offset += 12
elif chunkType == b'MAT\0':
offset = 0
count = struct.unpack('<I', data[offset:offset+4])[0]
offset += 4
print(str(count) + " material(s):")
for i in range(count):
a = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
b = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
c = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
d = struct.unpack('<H', data[offset:offset+2])[0]
offset += 2
print(" Material: 0x%04X, 0x%04X, 0x%04X, 0x%04X" % (a, b, c, d))
#FIXME: Read rest of data
if indexed == True:
f.seek(TMP)
return chunk
with open(sys.argv[1], 'rb') as f:
while True:
tmp = f.tell()
try:
if f.read(1) == b'':
raise
except:
print("EOF?!")
break
f.seek(tmp)
readChunks(f)
with open('test.obj', 'w') as e:
for vb in vbs:
print("VB: " + str(vb['offset']))
offset = vb['offset']
for i in range(0, 138):
print(i) # Helper so we can figure out when the parser hangs
x = 0
y = 0
z = 0
u = 0
v = 0
if False: # /tmp/240Z.pak_hrd
x = struct.unpack('<h', gpud[offset:offset+2])[0]
offset += 2
y = struct.unpack('<h', gpud[offset:offset+2])[0]
offset += 2
z = struct.unpack('<h', gpud[offset:offset+2])[0]
offset += 2
offset += 4
#FIXME: Fix scale
u = struct.unpack('<h', gpud[offset:offset+2])[0] / 512
offset += 2
v = struct.unpack('<h', gpud[offset:offset+2])[0] / 512
offset += 2
if False: # /tmp/sharkfin.pak
# Presumably: 17? verts, each 20? bytes
# 25 indices
# xyz uv
x = struct.unpack('<i', gpud[offset:offset+4])[0]
offset += 4
y = struct.unpack('<i', gpud[offset:offset+4])[0]
offset += 4
z = struct.unpack('<i', gpud[offset:offset+4])[0]
offset += 4
#FIXME: Fix scale
u = struct.unpack('<i', gpud[offset:offset+4])[0]
offset += 4
v = struct.unpack('<i', gpud[offset:offset+4])[0]
offset += 4
if True: # /tmp/Red Cone.pak
# Presumably: 137 verts, each 24 bytes
# 205 indices
#FIXME: Broken still! Mostly works but contains garbage data
x = struct.unpack('<f', gpud[offset:offset+4])[0]
offset += 4
y = struct.unpack('<f', gpud[offset:offset+4])[0]
offset += 4
z = struct.unpack('<f', gpud[offset:offset+4])[0]
offset += 4
u = struct.unpack('<h', gpud[offset:offset+2])[0]
offset += 2
v = struct.unpack('<h', gpud[offset:offset+2])[0]
offset += 2
offset += 4
offset += 4
#FIXME: Fix scale
u /= 8192
v /= 8192
print("xyz: %f %f %f; uv: %f %f" % (x,y,z, u,v))
e.write('v %f %f %f\n' % (x,y,z))
e.write('vt %f %f\n' % (u,v))
for mesh in meshs:
c = -1
b = -1
a = -1
for i in mesh['indices']:
c = b
b = a
a = i + 1
if c >= 0:
e.write('f %d/%d %d/%d %d/%d\n' % (c,c,b,b,a,a))
for texture in textures:
#with open(str(texture['name']) + ".raw",'wb') as e:
# DXT3 = 1 byte per pixel
print("Exporting " + texture['name'] + " (%d x %d)" % (texture['width'], texture['height']))
size = texture['width'] * texture['height']
if texture['width'] < 4:
print("Texture too small!") # FIXME!!!
continue
data = gpud[texture['offset']:texture['offset']+size]
if texture['format'] == 0x0414:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 3)
elif texture['format'] == 0x040C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 3)
elif texture['format'] == 0x041C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 3)
elif texture['format'] == 0x021C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 1)
elif texture['format'] == 0x020C:
image = Image.frombytes('RGBA', (texture['width'], texture['height']), data, 'bcn', 1)
else:
print("Unknown format! 0x%04X" % texture['format'])
image = None
if image:
image.save('textures/' + texture['name'] + "-0x%04X" % texture['format'] + ".png")
#e.write()
</pre>
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 09:38, 23 September 2017 (PDT)
e5c44d24c65b731be74599b7f08939bd49aa78ed
Main Page
0
1
6248
6002
2017-09-25T17:29:06Z
Codeasm
2480
/* Hardware */ added smbus details
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
7bb460add64a0e0bbf64f5069bb2250cf7577e33
Main Page
0
1
6249
6248
2017-09-25T18:22:55Z
Codeasm
2480
/* Hardware */ O my... anyway...
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus_Controller]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
70e795268c81c7996a8d9029fc1730e3405e7d6d
6251
6249
2017-09-25T18:27:24Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus]]
* [[EEPROM]]
* [[SMC]]
* [[Video Encoder]]
** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
7bb460add64a0e0bbf64f5069bb2250cf7577e33
6252
6251
2017-09-25T18:28:38Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
1a550d51153dbd022d2acca86973739d1c65b356
SMBus
0
3766
6250
5540
2017-09-25T18:26:37Z
JayFoxRox
2
JayFoxRox moved page [[SMBus Controller]] to [[SMBus]] without leaving a redirect
wikitext
text/x-wiki
Retreived from http://www.xbox-linux.org/wiki/SMBus_Controller
by ''Michael Steil'' (original version: 15/26 June 2002)
All non-PC components of the Xbox console are connected through an I²C/SMbus interface. I²C/SMBus is a slow low-cost serial bus with each device having a unique 7-bit ID. (Wikipedia has informative articles about [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/I2c I²C] and [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/SMBus SMBus], you might want to check them out.)
There are only two operations of an SMBus controller: write and read. Writing means that an 8 bit command code and an 8 or 16 bit operand are sent to an SMBus device. Reading means that an 8 bit command code is sent to the device and an 8 or 16 bit answer is expected.
The controller for the SMBus interface in the Xbox is a PCI device with the DevID 01B4 and it is built into MPCX southbridge.
==SMBus Controller Port Layout==
{| class="wikitable"
|-
| '''Port'''
| Description''''''
|-
| 0xc000
| '''Status'''
bit 0: abort
bit 1: collision
bit 2: protocol error
bit 3: busy
bit 4: cycle complete
bit 5: timeout
|-
| 0xc002
| '''Control'''
bit 2-0: cycle type
bit 3: start
bit 4: enable interrupt
bit 5: abort
|-
| 0xc004
| '''Address'''
|-
| 0xc006
| '''Data'''
|-
| 0xc008
| '''Command'''
|}
This is very similar (but not identical) to the AMD756/AMD766/AMD768 SMBus controllers. The [https://web.archive.org/web/20100617015507/http://www.lm-sensors.nu/ lm_sensors project] includes GPLed Linux kernel code for it since version 2.6.4 (kernel/busses/i2c-amd756.c).
==SMBus Controller Programming==
The following two routines illustrate how to read and write data from and to an SMBus device:
<pre> int SMBusWriteCommand(unsigned char slave, unsigned char command, int isWord, unsigned short data) {
again:
_outp(0xc004, (slave<<1)&0xfe);
_outp(0xc008, command);
_outpw(0xc006, data);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
return 1;
}
</pre>
<pre> int SMBusReadCommand(unsigned char slave, unsigned char command, int isWord, unsigned short *data) {
again:
_outp(0xc004, (slave<<1)|0x01);
_outp(0xc008, command);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
*data = _inpw(0xc006);
return 1;
}
</pre>
<br />
To avoid busy waiting of the CPU, the SMBus controller can also issue an interrupt when the operation is complete, by setting bit #4 in the control port when initiating the transfer.
==Xbox SMBus Devices==
The following four devices are connected to the Xbox SMBus:
{| class="wikitable"
|-
| '''Device'''
| '''Hardware Address'''
| '''Software Address'''
|-
| PIC16LC
| 0x10
| 0x20
|-
| Conexant CX25871 Video Encoder
| 0x45
| 0x8a
|-
| ADM1032 System Temperature Monitor
| 0x4c
| 0x98
|-
| Serial EEPROM
| 0x54
| 0xa8
|}
Do not confuse the hardware with the software addresses: The software ID is the hardware ID shifted by one bit left. The code above expects the hardware ID.
Actually, these addresses are not literally accurate; you find that the hardware address is 0x54 for the EEPROM: the actual address of the EEPROM on the i2c bus is 1010 (0xa), however, you will also notice that 0x54 is '''1010'''100 in binary, and it seems that this 100 is also appended onto the other devices as well (although their software address is naturally read as say '''1010'''1000 - obviously because of the left shifting, however, it could be speculated that it would be possible to communicate with devices over the SMBus that are connected via i2c, so long as you knew their base address.
3a69b0c66e1241a06ff935ae9d441adc2dc4fd3b
6259
6250
2017-09-26T20:28:56Z
JayFoxRox
2
/* SMBus Controller Port Layout */
wikitext
text/x-wiki
Retreived from http://www.xbox-linux.org/wiki/SMBus_Controller
by ''Michael Steil'' (original version: 15/26 June 2002)
All non-PC components of the Xbox console are connected through an I²C/SMbus interface. I²C/SMBus is a slow low-cost serial bus with each device having a unique 7-bit ID. (Wikipedia has informative articles about [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/I2c I²C] and [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/SMBus SMBus], you might want to check them out.)
There are only two operations of an SMBus controller: write and read. Writing means that an 8 bit command code and an 8 or 16 bit operand are sent to an SMBus device. Reading means that an 8 bit command code is sent to the device and an 8 or 16 bit answer is expected.
The controller for the SMBus interface in the Xbox is a PCI device with the DevID 01B4 and it is built into MPCX southbridge.
==SMBus Controller Port Layout==
{| class="wikitable"
|-
! Port !! Description
|-
| 0xC000
| '''Status'''
* bit 0: abort
* bit 1: collision
* bit 2: protocol error
* bit 3: busy
* bit 4: cycle complete
* bit 5: timeout
|-
| 0xC002
| '''Control'''
* bit 2-0: cycle type
* bit 3: start
* bit 4: enable interrupt
* bit 5: abort
|-
| 0xC004
| '''Address'''
|-
| 0xC006
| '''Data'''
|-
| 0xC008
| '''Command'''
|}
This is very similar (but not identical) to the AMD756/AMD766/AMD768 SMBus controllers. The [https://web.archive.org/web/20100617015507/http://www.lm-sensors.nu/ lm_sensors project] includes GPLed Linux kernel code for it since version 2.6.4 (kernel/busses/i2c-amd756.c).
==SMBus Controller Programming==
The following two routines illustrate how to read and write data from and to an SMBus device:
<pre> int SMBusWriteCommand(unsigned char slave, unsigned char command, int isWord, unsigned short data) {
again:
_outp(0xc004, (slave<<1)&0xfe);
_outp(0xc008, command);
_outpw(0xc006, data);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
return 1;
}
</pre>
<pre> int SMBusReadCommand(unsigned char slave, unsigned char command, int isWord, unsigned short *data) {
again:
_outp(0xc004, (slave<<1)|0x01);
_outp(0xc008, command);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
*data = _inpw(0xc006);
return 1;
}
</pre>
<br />
To avoid busy waiting of the CPU, the SMBus controller can also issue an interrupt when the operation is complete, by setting bit #4 in the control port when initiating the transfer.
==Xbox SMBus Devices==
The following four devices are connected to the Xbox SMBus:
{| class="wikitable"
|-
| '''Device'''
| '''Hardware Address'''
| '''Software Address'''
|-
| PIC16LC
| 0x10
| 0x20
|-
| Conexant CX25871 Video Encoder
| 0x45
| 0x8a
|-
| ADM1032 System Temperature Monitor
| 0x4c
| 0x98
|-
| Serial EEPROM
| 0x54
| 0xa8
|}
Do not confuse the hardware with the software addresses: The software ID is the hardware ID shifted by one bit left. The code above expects the hardware ID.
Actually, these addresses are not literally accurate; you find that the hardware address is 0x54 for the EEPROM: the actual address of the EEPROM on the i2c bus is 1010 (0xa), however, you will also notice that 0x54 is '''1010'''100 in binary, and it seems that this 100 is also appended onto the other devices as well (although their software address is naturally read as say '''1010'''1000 - obviously because of the left shifting, however, it could be speculated that it would be possible to communicate with devices over the SMBus that are connected via i2c, so long as you knew their base address.
41b9b1a04849888190f4f51d32f69fb9201db222
User:Codeasm
2
3729
6253
5912
2017-09-25T18:54:38Z
Codeasm
2480
Xbox led error codes
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
== Xbox led error codes ==
taken from: [https://web.archive.org/web/20061013114130/http://xbox-scene.org/articles/leds.php]
Tutorial written by : XanTium
Last edited: June 14, 2004
=== GREEN/RED Flashing ===
Probably a bad chip or bad image.
=== SOLID GREEN/No EJECT/No AUDIO/No VIDEO ===
Probably a bad solder point. Check all your points again.
It could also be a heat problem , make sure your fan is connected and don't put your xbox near heat sources. You can also try to open the top of the xbox and check if it goes better.
=== SOLID GREEN/No AUDIO/No VIDEO ===
This is probably a problems with your audio settings. Try to boot your xbox with a standard a/v pack instead of a HD pack.
=== ORANGE/GREEN Flashing ===
No AUDIO/VIDEO (A/V) pack.
This may also be down to a solder splash on the board or a damaged track.
=== ORANGE Flashing ===
This may also be down to a solder splash on the board or a damaged track. May also be due overheating.
=== GREEN for half a sec then RED Flashing ===
Bad/Corrupted or Empty Eeprom.
=== SOLID RED ===
System overheated , hardware failure , ...
=== FLASHING RED ===
Dead, broken or empty eeprom.
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Game list ===
To be added, still working on it.
c6b5702ecaed98e917f98142e184b823c80a8fdf
6254
6253
2017-09-26T06:30:38Z
Codeasm
2480
/* GREEN/RED Flashing */
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
== Xbox led error codes ==
taken from: [https://web.archive.org/web/20061013114130/http://xbox-scene.org/articles/leds.php]
Tutorial written by : XanTium
Last edited: June 14, 2004
=== GREEN/RED Flashing ===
Probably a bad chip or bad image.
=== 2 reboots then GREEN/RED Flashing ===
FRAG, dead {citation needed}
=== SOLID GREEN/No EJECT/No AUDIO/No VIDEO ===
Probably a bad solder point. Check all your points again.
It could also be a heat problem , make sure your fan is connected and don't put your xbox near heat sources. You can also try to open the top of the xbox and check if it goes better.
=== SOLID GREEN/No AUDIO/No VIDEO ===
This is probably a problems with your audio settings. Try to boot your xbox with a standard a/v pack instead of a HD pack.
=== ORANGE/GREEN Flashing ===
No AUDIO/VIDEO (A/V) pack.
This may also be down to a solder splash on the board or a damaged track.
=== ORANGE Flashing ===
This may also be down to a solder splash on the board or a damaged track. May also be due overheating.
=== GREEN for half a sec then RED Flashing ===
Bad/Corrupted or Empty Eeprom.
=== SOLID RED ===
System overheated , hardware failure , ...
=== FLASHING RED ===
Dead, broken or empty eeprom.
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Game list ===
To be added, still working on it.
38b910f010ed71b4426393ba6acc68de2c82f2bd
6255
6254
2017-09-26T07:14:38Z
Codeasm
2480
/* 2 reboots then GREEN/RED Flashing */
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
== Xbox led error codes ==
taken from: [https://web.archive.org/web/20061013114130/http://xbox-scene.org/articles/leds.php]
Tutorial written by : XanTium
Last edited: June 14, 2004
=== GREEN/RED Flashing ===
Probably a bad chip or bad image.
=== 2 reboots then GREEN/RED Flashing ===
FRAG, dead {{citation needed|reason=mine is dead, some other xboxes are dead, but are they dead? cant be fixed and reason unkown? Mine had a leaking clockcap}}.
=== SOLID GREEN/No EJECT/No AUDIO/No VIDEO ===
Probably a bad solder point. Check all your points again.
It could also be a heat problem , make sure your fan is connected and don't put your xbox near heat sources. You can also try to open the top of the xbox and check if it goes better.
=== SOLID GREEN/No AUDIO/No VIDEO ===
This is probably a problems with your audio settings. Try to boot your xbox with a standard a/v pack instead of a HD pack.
=== ORANGE/GREEN Flashing ===
No AUDIO/VIDEO (A/V) pack.
This may also be down to a solder splash on the board or a damaged track.
=== ORANGE Flashing ===
This may also be down to a solder splash on the board or a damaged track. May also be due overheating.
=== GREEN for half a sec then RED Flashing ===
Bad/Corrupted or Empty Eeprom.
=== SOLID RED ===
System overheated , hardware failure , ...
=== FLASHING RED ===
Dead, broken or empty eeprom.
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Game list ===
To be added, still working on it.
2abc2e67d9d3826cfe73e55f290c135855f74bb4
6256
6255
2017-09-26T07:23:29Z
Codeasm
2480
/* Xbox led error codes */
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
== Xbox led error codes ==
taken from: [https://web.archive.org/web/20061013114130/http://xbox-scene.org/articles/leds.php]
Tutorial written by : XanTium
Last edited: June 14, 2004
=== GREEN/RED Flashing ===
Probably a bad chip or bad image.
=== 2 reboots then GREEN/RED Flashing ===
FRAG, dead {{citation needed|reason=mine is dead, some other xboxes are dead, but are they dead? cant be fixed and reason unkown? Mine had a leaking clockcap}}.
=== SOLID GREEN/No EJECT/No AUDIO/No VIDEO ===
Probably a bad solder point. Check all your points again.
It could also be a heat problem , make sure your fan is connected and don't put your xbox near heat sources. You can also try to open the top of the xbox and check if it goes better.
=== SOLID GREEN/No AUDIO/No VIDEO ===
This is probably a problems with your audio settings. Try to boot your xbox with a standard a/v pack instead of a HD pack.
=== ORANGE/GREEN Flashing ===
No AUDIO/VIDEO (A/V) pack.
This may also be down to a solder splash on the board or a damaged track.
=== ORANGE Flashing ===
This may also be down to a solder splash on the board or a damaged track. May also be due overheating.
=== GREEN for half a sec then RED Flashing ===
Bad/Corrupted or Empty Eeprom.
=== SOLID RED ===
System overheated , hardware failure , ...
=== FLASHING RED ===
Dead, broken or empty eeprom.
=== 3/4 GREEN 1/4 RED ===
DVD not properly connected or faulty dvd board {{citation needed|reason=havent tested this one myself}}
=== 3/4 RED 1/4 GREEN ===
Harddisk faulty, or not properly connected {{citation needed|reason=havent tested this one myself}}
=== RED/ORANGE Flashing ===
Bad RAM, solderjoint near RAM or other RAM related problem. Did you replace/added RAM? That might be the problem.{{citation needed|reason=havent tested this one myself, never replaced ram.}}
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Game list ===
To be added, still working on it.
60fedc4777f7e98b49f80fb7887f64a790a2106f
6257
6256
2017-09-26T08:41:57Z
Codeasm
2480
/* 2 reboots then GREEN/RED Flashing */ Extra details for frags
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
== Xbox led error codes ==
taken from: [https://web.archive.org/web/20061013114130/http://xbox-scene.org/articles/leds.php]
Tutorial written by : XanTium
Last edited: June 14, 2004
=== GREEN/RED Flashing ===
Probably a bad chip or bad image.
=== 2 reboots then GREEN/RED Flashing ===
FRAG, dead {{citation needed|reason=mine is dead, some other xboxes are dead, but are they dead? cant be fixed and reason unkown? Mine had a leaking clockcap}}.
NO AV, if AV turns on with a code, its NOT a frag.
The 1.0 - 1.5 xbox revisions will leave the power on and "frags". The 1.6 and 1.6b xboxes will turn the power off.[https://assemblergames.com/threads/xbox-flashing-red-and-green.64852/page-2 source]
=== SOLID GREEN/No EJECT/No AUDIO/No VIDEO ===
Probably a bad solder point. Check all your points again.
It could also be a heat problem , make sure your fan is connected and don't put your xbox near heat sources. You can also try to open the top of the xbox and check if it goes better.
=== SOLID GREEN/No AUDIO/No VIDEO ===
This is probably a problems with your audio settings. Try to boot your xbox with a standard a/v pack instead of a HD pack.
=== ORANGE/GREEN Flashing ===
No AUDIO/VIDEO (A/V) pack.
This may also be down to a solder splash on the board or a damaged track.
=== ORANGE Flashing ===
This may also be down to a solder splash on the board or a damaged track. May also be due overheating.
=== GREEN for half a sec then RED Flashing ===
Bad/Corrupted or Empty Eeprom.
=== SOLID RED ===
System overheated , hardware failure , ...
=== FLASHING RED ===
Dead, broken or empty eeprom.
=== 3/4 GREEN 1/4 RED ===
DVD not properly connected or faulty dvd board {{citation needed|reason=havent tested this one myself}}
=== 3/4 RED 1/4 GREEN ===
Harddisk faulty, or not properly connected {{citation needed|reason=havent tested this one myself}}
=== RED/ORANGE Flashing ===
Bad RAM, solderjoint near RAM or other RAM related problem. Did you replace/added RAM? That might be the problem.{{citation needed|reason=havent tested this one myself, never replaced ram.}}
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Game list ===
To be added, still working on it.
975e7c1c8cf8c35a01cf697f9cd8f9613072730a
6258
6257
2017-09-26T08:46:20Z
Codeasm
2480
/* Xbox led error codes */
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
== Xbox led error codes ==
this table asumes there is NO AV output, if there is Video output, refer to the onscreen error code or message on display.
The led error codes should only apear without any video output or you dashboard like XBMC is fooling you. When using modchips, check LPC pin connections, fix/remove solderblobs and check D0 and alike wires. try without modchip to see if the onboard TSOP does something.
taken from: [https://web.archive.org/web/20061013114130/http://xbox-scene.org/articles/leds.php]
Tutorial written by : XanTium
Last edited: June 14, 2004
=== GREEN/RED Flashing ===
Probably a bad chip or bad image.
=== 2 reboots then GREEN/RED Flashing ===
FRAG, dead {{citation needed|reason=mine is dead, some other xboxes are dead, but are they dead? cant be fixed and reason unkown? Mine had a leaking clockcap}}.
NO AV, if AV turns on with a code, its NOT a frag.
The 1.0 - 1.5 xbox revisions will leave the power on and "frags". The 1.6 and 1.6b xboxes will turn the power off.[https://assemblergames.com/threads/xbox-flashing-red-and-green.64852/page-2 source]
=== SOLID GREEN/No EJECT/No AUDIO/No VIDEO ===
Probably a bad solder point. Check all your points again.
It could also be a heat problem , make sure your fan is connected and don't put your xbox near heat sources. You can also try to open the top of the xbox and check if it goes better.
=== SOLID GREEN/No AUDIO/No VIDEO ===
This is probably a problems with your audio settings. Try to boot your xbox with a standard a/v pack instead of a HD pack.
=== ORANGE/GREEN Flashing ===
No AUDIO/VIDEO (A/V) pack.
This may also be down to a solder splash on the board or a damaged track.
=== ORANGE Flashing ===
This may also be down to a solder splash on the board or a damaged track. May also be due overheating.
=== GREEN for half a sec then RED Flashing ===
Bad/Corrupted or Empty Eeprom.
=== SOLID RED ===
System overheated , hardware failure , ...
=== FLASHING RED ===
Dead, broken or empty eeprom.
=== 3/4 GREEN 1/4 RED ===
DVD not properly connected or faulty dvd board {{citation needed|reason=havent tested this one myself}}
=== 3/4 RED 1/4 GREEN ===
Harddisk faulty, or not properly connected {{citation needed|reason=havent tested this one myself}}
=== RED/ORANGE Flashing ===
Bad RAM, solderjoint near RAM or other RAM related problem. Did you replace/added RAM? That might be the problem.{{citation needed|reason=havent tested this one myself, never replaced ram.}}
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Game list ===
To be added, still working on it.
e096fbb437b514f8f93bdc006de7e4e9263b24a1
NV2A
0
3675
6260
5937
2017-10-04T08:00:01Z
KaosEngineer
2482
/* Notes */ Additional link to nv30specs.pdf from nVidia's web site as the first links first attachment gives 404 error.
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
** [https://web.archive.org/web/20070105072020/http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/nv30specs.pdf Backup of nv30specs: List of implemented GL extensions for NV10-NV30]
** [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf nv30specs.pdf, 13 Nov 2006, pp. 368.]
a7d0c532f02991aaca98ee400ecdcbd8442c6656
6261
6260
2017-10-04T08:01:16Z
KaosEngineer
2482
/* Notes */
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
** [https://web.archive.org/web/20070105072020/http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/nv30specs.pdf Backup of nv30specs: List of implemented GL extensions for NV10-NV30]
** [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf NVIDIA OpenGL
Extension Specifications for the
CineFX Architecture (NV3x), 13 Nov 2006, pp. 368.]
972c0dc1417e53e34b07b9b88ffabd120a3fad22
6262
6261
2017-10-04T08:02:05Z
KaosEngineer
2482
/* Notes */ URL formatting fix. I hope!
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
** [https://web.archive.org/web/20070105072020/http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/nv30specs.pdf Backup of nv30specs: List of implemented GL extensions for NV10-NV30]
** [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x), 13 Nov 2006, pp. 368.]
d3e2b47167e4b9e4bf8fa4b438e3fea408a5fc10
6263
6262
2017-10-04T08:10:39Z
KaosEngineer
2482
/* Notes */
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
** [https://web.archive.org/web/20070105072020/http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/nv30specs.pdf Backup of nv30specs: List of implemented GL extensions for NV10-NV30]
** [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf *NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x)*, pp. 368, nVidia Corporation, 13 Nov 2006.]
4da04d249f40ab84ba41892e8ec082f884883e18
6264
6263
2017-10-04T08:13:35Z
KaosEngineer
2482
/* Notes */
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
** [https://web.archive.org/web/20070105072020/http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/nv30specs.pdf Backup of nv30specs: List of implemented GL extensions for NV10-NV30]
** [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf "NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x)", pp. 368, nVidia Corporation, 13 Nov 2006.]
afb5e382760aa3f792b47ee110420614173f2424
6265
6264
2017-10-04T08:17:42Z
KaosEngineer
2482
/* Notes */ Still not working. Trying to get the title of the PDF file printed in italics so added "
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
** [https://web.archive.org/web/20070105072020/http://www.cs.virginia.edu/~gfx/Courses/2002/RealTime.fall.02/Cg/nv30specs.pdf Backup of nv30specs: List of implemented GL extensions for NV10-NV30]
** [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x), pp. 368, nVidia Corporation, 13 Nov 2006.]
35fa2f8132d46f8e8521917c2884741bcded440b
6266
6265
2017-10-04T14:54:21Z
JayFoxRox
2
Removed duplicate link
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web-beta.archive.org/web/20030207073141/http://developer.nvidia.com:80/view.asp?IO=nv30_emulation NV30 information and emulator]
* [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf List of implemented GL extensions for NV10-NV30: "NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x)", 13 Nov. 2006]
541d7443a6719f57a156da2f8df888ed485e6e52
Kernel/READ PORT BUFFER UCHAR
0
3898
6267
2017-10-16T11:27:37Z
JayFoxRox
2
Created page with "Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff560788(v=vs.85).aspx == Disassembly == <pre> mov eax, edi mov edx, [esp+4] mov edi, [esp+8] mov ecx,..."
wikitext
text/x-wiki
Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff560788(v=vs.85).aspx
== Disassembly ==
<pre>
mov eax, edi
mov edx, [esp+4]
mov edi, [esp+8]
mov ecx, [esp+12]
rep insb
mov edi, eax
ret 12
</pre>
67630552c492f50ba2b6b2f870c5b5be6d8f17de
Kernel/READ PORT BUFFER USHORT
0
3899
6268
2017-10-16T11:28:34Z
JayFoxRox
2
Created page with "Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff560794(v=vs.85).aspx == Disassembly == <pre> mov eax, edi mov edx, [esp+4] mov edi, [esp+8] mov ecx,..."
wikitext
text/x-wiki
Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff560794(v=vs.85).aspx
== Disassembly ==
<pre>
mov eax, edi
mov edx, [esp+4]
mov edi, [esp+8]
mov ecx, [esp+12]
rep insw
mov edi, eax
ret 12
</pre>
ba130441d3738ea202b12372f6b17044b13cea5d
Kernel/READ PORT BUFFER ULONG
0
3900
6269
2017-10-16T11:29:09Z
JayFoxRox
2
Created page with "Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff560791(v=vs.85).aspx == Disassembly == <pre> mov eax, edi mov edx, [esp+4] mov edi, [esp+8] mov ecx,..."
wikitext
text/x-wiki
Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff560791(v=vs.85).aspx
== Disassembly ==
<pre>
mov eax, edi
mov edx, [esp+4]
mov edi, [esp+8]
mov ecx, [esp+12]
rep insd
mov edi, eax
ret 12
</pre>
b529b569d63defcad4df06e33064c9faf4d409d2
Kernel/WRITE PORT BUFFER UCHAR
0
3901
6270
2017-10-16T11:29:59Z
JayFoxRox
2
Created page with "Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff566383(v=vs.85).aspx == Disassembly == <pre> mov eax, edi mov edx, [esp+4] mov edi, [esp+8] mov ecx,..."
wikitext
text/x-wiki
Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff566383(v=vs.85).aspx
== Disassembly ==
<pre>
mov eax, edi
mov edx, [esp+4]
mov edi, [esp+8]
mov ecx, [esp+12]
rep outsb
mov edi, eax
ret 12
</pre>
dfc70ebce0e2fa41ebf3daba3cf591188cd6d53a
Kernel/WRITE PORT BUFFER USHORT
0
3902
6271
2017-10-16T11:30:20Z
JayFoxRox
2
Created page with "Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff566385(v=vs.85).aspx == Disassembly == <pre> mov eax, edi mov edx, [esp+4] mov edi, [esp+8] mov ecx,..."
wikitext
text/x-wiki
Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff566385(v=vs.85).aspx
== Disassembly ==
<pre>
mov eax, edi
mov edx, [esp+4]
mov edi, [esp+8]
mov ecx, [esp+12]
rep outsw
mov edi, eax
ret 12
</pre>
d9174e6cddc22c70b07cc5a7f6081070bab2fac8
Kernel/WRITE PORT BUFFER ULONG
0
3903
6272
2017-10-16T11:30:57Z
JayFoxRox
2
Created page with "Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff566384(v=vs.85).aspx == Disassembly == <pre> mov eax, edi mov edx, [esp+4] mov edi, [esp+8] mov ecx,..."
wikitext
text/x-wiki
Also see https://msdn.microsoft.com/en-us/library/windows/hardware/ff566384(v=vs.85).aspx
== Disassembly ==
<pre>
mov eax, edi
mov edx, [esp+4]
mov edi, [esp+8]
mov ecx, [esp+12]
rep outsd
mov edi, eax
ret 12
</pre>
582384a97e25c76d236c72105d6e89a519c43e99
Emulators
0
3703
6273
5874
2017-10-24T12:10:46Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Windows
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
0979fd3d84b1d8349c09883e9f35b9b0ba163e99
Kernel
0
3678
6274
5922
2017-10-25T18:15:01Z
Furon
2477
Add exports for profiled builds
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot kernel initialization as described [[Boot_Process#Initialization|here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!x86 Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExTimerObjectType]]
|31
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|
|Variable: ULONG
|-
|[[Kernel/HalDiskModelNumber]]
|41
|
|Variable: STRING
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|
|Variable: STRING
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFileObjectType]]
|71
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|
|Variable: BOOLEAN
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|
|Variable: BOOLEAN
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|
|Variable: MMGLOBALDATA
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|
|Variable: ULONG
|-
|[[Kernel/KeTimeIncrement]]
|157
|
|Variable: ULONG
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|
|Variable: ULONG_PTR[5]
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|
|Variable: PLAUNCH_DATA_PAGE
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|
|Variable: OBJECT_HANDLE_TABLE
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxHardwareInfo]]
|322
|
|Variable: XBOX_HARDWARE_INFO
|-
|[[Kernel/XboxHDKey]]
|323
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxKrnlVersion]]
|324
|
|Variable: XBOX_KRNL_VERSION
|-
|[[Kernel/XboxSignatureKey]]
|325
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XeImageFileName]]
|326
|
|Variable: OBJECT_STRING
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|
|Variable: XBOX_KEY_DATA[XBEIMAGE_ALTERNATE_TITLE_ID_COUNT]
|-
|[[Kernel/XePublicKeyData]]
|355
|
|Variable: UCHAR[XC_PUBLIC_KEYDATA_SIZE]
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|
|Variable: ULONG
|-
|[[Kernel/IdexChannelObject]]
|357
|
|Variable: IDE_CHANNEL_OBJECT
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|[[Kernel/XProfpControl]]
|370
|
|Profiled builds only
|-
|[[Kernel/XProfpGetData]]
|371
|
|Profiled builds only
|-
|[[Kernel/IrtClientInitFast]]
|372
|
|Profiled builds only
|-
|[[Kernel/IrtSweep]]
|373
|
|Profiled builds only
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
1d001b09ab2ad9363d6728d5fb29c882d5ca8580
6275
6274
2017-10-25T18:19:39Z
Furon
2477
Profiled -> Profiling
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot kernel initialization as described [[Boot_Process#Initialization|here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!x86 Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExTimerObjectType]]
|31
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|
|Variable: ULONG
|-
|[[Kernel/HalDiskModelNumber]]
|41
|
|Variable: STRING
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|
|Variable: STRING
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFileObjectType]]
|71
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|
|Variable: BOOLEAN
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|
|Variable: BOOLEAN
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|
|Variable: MMGLOBALDATA
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|
|Variable: ULONG
|-
|[[Kernel/KeTimeIncrement]]
|157
|
|Variable: ULONG
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|
|Variable: ULONG_PTR[5]
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|
|Variable: PLAUNCH_DATA_PAGE
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|
|Variable: OBJECT_HANDLE_TABLE
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxHardwareInfo]]
|322
|
|Variable: XBOX_HARDWARE_INFO
|-
|[[Kernel/XboxHDKey]]
|323
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxKrnlVersion]]
|324
|
|Variable: XBOX_KRNL_VERSION
|-
|[[Kernel/XboxSignatureKey]]
|325
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XeImageFileName]]
|326
|
|Variable: OBJECT_STRING
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|
|Variable: XBOX_KEY_DATA[XBEIMAGE_ALTERNATE_TITLE_ID_COUNT]
|-
|[[Kernel/XePublicKeyData]]
|355
|
|Variable: UCHAR[XC_PUBLIC_KEYDATA_SIZE]
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|
|Variable: ULONG
|-
|[[Kernel/IdexChannelObject]]
|357
|
|Variable: IDE_CHANNEL_OBJECT
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|[[Kernel/XProfpControl]]
|370
|
|Profiling-enabled builds only!
|-
|[[Kernel/XProfpGetData]]
|371
|
|Profiling-enabled builds only!
|-
|[[Kernel/IrtClientInitFast]]
|372
|
|Profiling-enabled builds only!
|-
|[[Kernel/IrtSweep]]
|373
|
|Profiling-enabled builds only!
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
6db7306f656a2dd5d430a56a63172805d6aaf9a6
Boot Process
0
3683
6276
6105
2017-10-26T18:02:34Z
Furon
2477
/* Weird stuff 3 */
wikitext
text/x-wiki
This article describes the boot sequence of the Xbox.
A large portion of it is patended in [https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US6907522.pdf Patent "US 6,907,522 B2"]
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL (MCPX 1.0 only) ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8F000 to 0x8F0FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== TEA Decryption of the FBL (MCPX 1.1 only) ===
{{FIXME}}
== FBL (MCPX 1.1 only) ==
The Flash Boot Loader was added in MCPX 1.1, it connects the MCPX ROM and the 2BL.{{FIXME}}
It is not part of the MCPX ROM, but part of the flash.
== 2BL ==
{{FIXME|reason=Certain parts are still missing.}}
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Weird stuff 2 ====
This does some PCI config, use unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Enable USB ASRC ====
The USB controller's "automatic slew rate compensation" feature is enabled for MCPX revisions D01 and later.
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
5211c7f9fa56efb07c056a8da7743856fe77c5d7
6277
6276
2017-10-26T18:20:10Z
Furon
2477
/* Weird stuff 2 */
wikitext
text/x-wiki
This article describes the boot sequence of the Xbox.
A large portion of it is patended in [https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US6907522.pdf Patent "US 6,907,522 B2"]
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL (MCPX 1.0 only) ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8F000 to 0x8F0FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== TEA Decryption of the FBL (MCPX 1.1 only) ===
{{FIXME}}
== FBL (MCPX 1.1 only) ==
The Flash Boot Loader was added in MCPX 1.1, it connects the MCPX ROM and the 2BL.{{FIXME}}
It is not part of the MCPX ROM, but part of the flash.
== 2BL ==
{{FIXME|reason=Certain parts are still missing.}}
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Configure LDT bus ====
DWORD flow control is enabled in the MCPX.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
</pre>
DWORD flow control is also enabled in the NV2A core.
<pre>
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
</pre>
The LDT bus is reset.
<pre>
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
</pre>
The rest is unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Enable USB ASRC ====
The USB controller's "automatic slew rate compensation" feature is enabled for MCPX revisions D01 and later.
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
35df8bcc04fea40dad7f635ee19fe087aed40dab
BIOS
0
3672
6278
6004
2017-10-27T23:45:00Z
Furon
2477
/* Unknown */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000 - 0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash ROM]]. The BIOS image is actually 256 kiB, duplicated 4 times to fill the 1 MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1 MiB and some are 256 kiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256 kiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! Unknown
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| 0x0619C || || || || || || ||
|-
! Kernel Data Segment
| 0x3944C || || || || || || ||
|-
! 2BL <br> ''Always 0x6000 bytes''
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL <br> ''Always 0x2880 bytes''
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== MCPX Initialization Table ===
From 0x00000000 - 0x0000007F
The first DWORD is a pointer to a table of values that the MCPX core uses to initialize itself, but with the least-significant bit always set to 1. The second DWORD is the unmodified table pointer. On all Xbox BIOS, the MCPX initialization table is always at file offset 8, virtual address 0xFF000008.
The first DWORD of the MCPX initialization table is the magic number 0x2B16D065 (called the "boot header"). The purpose of the remaining values in the table is unknown{{FIXME}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
31012249090ed682e1c328d746f3429883ff4494
6279
6278
2017-10-27T23:45:21Z
Furon
2477
/* Components */
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000 - 0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash ROM]]. The BIOS image is actually 256 kiB, duplicated 4 times to fill the 1 MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1 MiB and some are 256 kiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256 kiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! MCPX Initialization Table
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| 0x0619C || || || || || || ||
|-
! Kernel Data Segment
| 0x3944C || || || || || || ||
|-
! 2BL <br> ''Always 0x6000 bytes''
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL <br> ''Always 0x2880 bytes''
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== MCPX Initialization Table ===
From 0x00000000 - 0x0000007F
The first DWORD is a pointer to a table of values that the MCPX core uses to initialize itself, but with the least-significant bit always set to 1. The second DWORD is the unmodified table pointer. On all Xbox BIOS, the MCPX initialization table is always at file offset 8, virtual address 0xFF000008.
The first DWORD of the MCPX initialization table is the magic number 0x2B16D065 (called the "boot header"). The purpose of the remaining values in the table is unknown{{FIXME}}.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
7177b9ee6ad4467b95ebbe9e6f57aec1061a5645
6280
6279
2017-10-29T01:42:28Z
Furon
2477
There are actually two initialization tables and the first is for the NV2A, not the MCPX.
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000 - 0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash ROM]]. The BIOS image is actually 256 kiB, duplicated 4 times to fill the 1 MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1 MiB and some are 256 kiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256 kiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134 !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! NV2A Initialization Table
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! MCPX Initialization Table
| 0x00070 || 0x00070 || 0x00070 || 0x00070 || 0x00070 || 0x00070 || 0x00070 || 0x00070
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| 0x0619C || || || || || || ||
|-
! Kernel Data Segment
| 0x3944C || || || || || || ||
|-
! 2BL <br> ''Always 0x6000 bytes''
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL <br> ''Always 0x2880 bytes''
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== NV2A Initialization Table ===
The first DWORD is a pointer to a table of values that the NV2A northbridge uses to initialize itself, but with the least-significant bit always set to 1 (likely some sort of sanity check). The second DWORD is the unmodified table pointer. On all Xbox BIOS, the NV2A initialization table is always at file offset 8, virtual address 0xFF000008.
The first DWORD of the NV2A initialization table is the magic number 0x2B16D065 (called the "boot header"). The purpose of the remaining values in the table is unknown{{FIXME}}.
=== MCPX Initialization Table ===
This is a table of values used to initialize the MCPX southbridge. It ''must'' be placed at offset 0x70 in the ROM image.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
cc959077dcba1381ff06c3133e2e977b49d83720
Hardware Revisions
0
3669
6281
6193
2017-11-01T11:16:55Z
Codeasm
2480
/* DVD Drive */ specific model number found
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0)
* Philips (Xbox 1.2)
* Samsung (Xbox 1.3)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
95e1ae2a40d716980a49d2e659502d8649d65c72
6282
6281
2017-11-01T11:35:06Z
Codeasm
2480
/* DVD Drive */ Added Hitachi details and hack
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0)
* Philips (Xbox 1.2)
* Samsung (Xbox 1.3)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
919625c6b735e41390e038147b3a422a392603c9
Memory
0
3674
6283
6003
2017-11-09T08:52:57Z
PatrickvL
2473
s/get_memory/get_memory_byte
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. On Debug Xboxs and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x04000000
|0x00000000 - 0x08000000
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFE000000
|-
|APU Registers
|colspan="2"|0xFE800000 - 0xFE880000
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC01000
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED01000
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED09000
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF00400
|-
|[[Flash]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
f7cf5c61a268c6c3a01d473b8d8729506bf1231b
Talk:Boot Process
1
3904
6284
2017-11-09T08:56:03Z
PatrickvL
2473
Question about address-mapping of Page Directory Entries
wikitext
text/x-wiki
About this part :
0xC00 0x0000F063 Maps the PDE (4 kiB page) to address 0xC0000000
Shouldn't that read :
0xC00 0xC0000063 Maps the PDE (4 kiB page) to address 0xC0000000
?
c98d4673ee163504a92c368d2f58e2209ec4a10b
XISO
0
3905
6285
2017-11-09T11:00:54Z
JayFoxRox
2
Redirected page to [[XDVDFS]]
wikitext
text/x-wiki
#REDIRECT [[XDVDFS]]
678e69ec8de3408a07b43431ae637857a3fb55c0
XDVDFS
0
3906
6286
2017-11-09T11:11:21Z
JayFoxRox
2
Created page with "XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]]. It is stored in the data area. == Format == Each sector is 2048 bytes. The first..."
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA".
=== Filesystem ===
{{FIXME|reason=More info}}
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== Security blocks ===
{{FIXME}}
=== Random blocks ===
{{FIXME}}
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
7faacca073ecf8887178fd045bfdaeedf2c056fe
6287
6286
2017-11-11T00:49:03Z
JayFoxRox
2
/* Format */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Version 4361 <!-- Game: Petit Copter --> ====
{{FIXME|reason=Info how the header looks in this version}}
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
First byte read is the first byte in the data partition.
Filled with algorithm 1 (2048 bytes at a time, even buffer address).
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
65865e2a5bcb40ed63838cdc5ea3e68839846e55
6288
6287
2017-11-11T00:50:25Z
JayFoxRox
2
/* Version 4361 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Version 4361 <!-- Game: Petit Copter --> ====
{{FIXME|reason=Info how the header looks in this version}}
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Seeded and then starting to emit bytes in data area.
Filled with algorithm 1 (2048 bytes at a time, even buffer address).
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
7a35af63fc03ec6fd2665e977cb479a23010a141
6291
6288
2017-11-19T20:36:47Z
JayFoxRox
2
/* Volume descriptor */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
* [[Azurik - Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
** Starting bruteforce
** Found seed 0x7EA870D7
** Completed bruteforce (Success)
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
** Starting bruteforce
** Found seed 0x25BAB84C
** Completed bruteforce (Success)
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
** Starting bruteforce
** Found seed 0x62BBC340
** Completed bruteforce (Success)
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
** Starting bruteforce
** Found seed 0xF401863E
** Completed bruteforce (Success)
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
** Starting bruteforce
** Found seed 0x1796C12A
** Completed bruteforce (Success)
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
** Starting bruteforce
** Found seed 0xFACBB379
** Completed bruteforce (Success)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
** Starting bruteforce
** Completed bruteforce (Failure)
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Seeded and then starting to emit bytes in data area.
Filled with algorithm 1 (2048 bytes at a time, even buffer address).
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
40b814156fe9e24647e3d6d9af27abfb85a8f831
6292
6291
2017-11-19T20:52:15Z
JayFoxRox
2
/* Random blocks */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
* [[Azurik - Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
** Starting bruteforce
** Found seed 0x7EA870D7
** Completed bruteforce (Success)
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
** Starting bruteforce
** Found seed 0x25BAB84C
** Completed bruteforce (Success)
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
** Starting bruteforce
** Found seed 0x62BBC340
** Completed bruteforce (Success)
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
** Starting bruteforce
** Found seed 0xF401863E
** Completed bruteforce (Success)
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
** Starting bruteforce
** Found seed 0x1796C12A
** Completed bruteforce (Success)
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
** Starting bruteforce
** Found seed 0xFACBB379
** Completed bruteforce (Success)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
** Starting bruteforce
** Completed bruteforce (Failure)
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
** Starting bruteforce
** Completed bruteforce (Failure)
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4721 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
e8fe86077d5c35650dbb23094867267c80e15972
6293
6292
2017-11-19T21:02:57Z
JayFoxRox
2
/* Examples */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik - Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2, but Microsoft upgraded their tool to use new random padding.
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4721 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
b146badf37f05a32305d5dcfe6d886cd570f9f0a
6294
6293
2017-11-19T21:03:36Z
JayFoxRox
2
fixup, accidentally clicked save
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik - Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2, but Microsoft upgraded their tool to use new random padding.
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4721 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
d35e7ff2fabe77042e600247e0d4119fa9d014ec
6295
6294
2017-11-21T01:26:24Z
JayFoxRox
2
Fix azurik link
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2, but Microsoft upgraded their tool to use new random padding.
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4721 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
9688159040e26044ee58186cfffd9d6752b1b011
User:Voxel9
2
3907
6289
2017-11-12T10:56:24Z
Voxel9
2496
Created page with " == Voxel9 (also known as just "Voxel") == Voxel is the owner of the Xbox Emulation Discord server, and is a part of the Cxbx-Reloaded Compatibility List maintainers over at..."
wikitext
text/x-wiki
== Voxel9 (also known as just "Voxel") ==
Voxel is the owner of the Xbox Emulation Discord server, and is a part of the Cxbx-Reloaded Compatibility List maintainers over at Github.
He 100% enjoys all things Xbox, on top of PS consoles and a tiny bit of love left for Nintendo consoles... His addiction to the Original Xbox began shortly after a nostalgia trip in 2016 (he hadn't touched an OG Xbox for over 8 years then, lol) and has been following the scene ever since.
ceee68c6dfc2287d742fdc2f6ae5f7be1adf2a4a
Xbox Game Disc
0
3700
6290
6237
2017-11-13T21:29:30Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
73f014274dc72ec06bdfdcf300af0d86a8d0d5c5
Talk:Super I/O
1
3908
6296
2017-11-27T20:42:07Z
Furon
2477
Created page with "== Alternative Super I/O Controller == If one wanted to create a new kernel debugger board, the Microchip LPC47N217 Super I/O Controller is still in production and has a conf..."
wikitext
text/x-wiki
== Alternative Super I/O Controller ==
If one wanted to create a new kernel debugger board, the Microchip LPC47N217 Super I/O Controller is still in production and has a configuration interface compatible with the SMSC LPC47M157. It has fewer pins, thanks to a reduced number of logical devices, so should be easier to solder.
-- [[User:Furon|Furon]] ([[User talk:Furon|talk]])
733ab0b2149875c7aaffe1654fe5beb574b9e226
Engine List
0
4
6297
6225
2017-12-02T06:10:29Z
CakeLancelot
2494
Add known Torque Game Engine games
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= id Tech 4 =
id Tech 4 was scaled down for Xbox{{citation needed}}.
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Doom 3]]
|-
| [[Doom 3: Resurrection of Evil]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Far Cry Instincts]]
|-
| [[Far Cry Instincts: Evolution]]
|}
= Torque Game Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Marble Blast Gold]]
|-
| [[ThinkTanks]]
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[AFL Live 2003]]
|-
|[[AFL Live 2004]]
|-
|[[AFL Live Premiership Edition]]
|-
|[[Battlefield 2: Modern Combat]]
|-
|[[Black]]
|-
|[[Blitz: The League]]
|-
|[[Broken Sword: The Sleeping Dragon]]
|-
|[[Burnout]]
|-
|[[Burnout 2: Point of Impact]]
|-
|[[Burnout 3: Takedown]]
|-
|[[Burnout Revenge]]
|-
|[[Call of Duty: Finest Hour]]
|-
|[[Cold Fear]]
|-
|[[Commandos: Strike Force]]
|-
|[[Darkwatch]]
|-
|[[Dead to Rights II]]
|-
|[[Evil Dead: Regeneration]]
|-
|[[Gauntlet: Seven Sorrows]]
|-
|[[Grand Theft Auto III]]
|-
|[[Grand Theft Auto: Vice City]]
|-
|[[Grand Theft Auto: San Andreas]]
|-
|[[Harry Potter and the Prisoner of Azkaban]]
|-
|[[Harry Potter and the Goblet of Fire]]
|-
|[[Headhunter Redemption]]
|-
|[[Hello Kitty: Roller Rescue]]
|-
|[[Kill Switch]]
|-
|[[Madagascar]]
|-
|[[Manhunt]]
|-
|[[Max Payne 2: The Fall of Max Payne]]
|-
|[[Major League Baseball 2K5]]
|-
|[[Mortal Kombat: Armageddon]]
|-
|[[Mortal Kombat: Deadly Alliance]]
|-
|[[Mortal Kombat: Deception]]
|-
|[[NBA Ballers]]
|-
|[[NFL Blitz 2003]]
|-
|[[Rugby League]]
|-
|[[ObsCure]]
|-
|[[Outlaw Golf 2]]
|-
|[[Puyo Pop: Fever]]
|-
|[[RoboCop]]
|-
|[[Rolling]]
|-
|[[Alfa Romeo Racing Italiano]]
|-
|[[Secret Weapons Over Normandy]]
|-
|[[Shadow the Hedgehog]]
|-
|[[Sonic Heroes]]
|-
|[[SpongeBob SquarePants: Battle for Bikini Bottom]]
|-
|[[Tech Deck Dude Bare Knuckle Grind]]
|-
|[[Teenage Mutant Ninja Turtles: Mutant Melee]]
|-
|[[The Incredibles: Rise of the Underminer]]
|-
|[[The Incredibles]]
|-
|[[The SpongeBob SquarePants Movie Game]]
|-
|[[The Warriors]]
|-
|[[Tony Hawk's Pro Skater 3]]
|-
|[[Tony Hawk's Pro Skater 4]]
|-
|[[Total Overdose: A Gunslinger's Tale in Mexico]]
|-
|[[Toxic Grind]]
|-
|[[Without Warning]]
|-
|[[Yourself!Fitness]]
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|[[New Legends]]
|UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|-
|[[Advent Rising]]
|UE2 Build 2226
|-
|[[America's Army: Rise of a Soldier]]
|UT2003 Build 928
|-
|[[Brothers in Arms: Earned in Blood]]
|UE2 Build 2226
|-
|[[Brothers in Arms: Road to Hill 30]]
|UE2 Build 2226
|-
|[[Combat: Task Force 121]]
|UE2 Build 2110
|-
|[[Dead Man's Hand]]
|UE2 Build 2110
|-
|[[Deus Ex: Invisible War]]
|Warfare Build 777
|-
|[[Land of the Dead: Road to Fiddler's Green]]
|UE2 BUild 2226
|-
|[[Magic the Gathering: Battlegrounds]]
|Warfare Build 926
|-
|[[Men of Valor]]
|Warfare Build 926
|-
|[[Open Season]]
|Warfare Build 927
|-
|[[Pariah]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[Shadow Ops: Red Mercury]]
|UE2 Build 2110
|-
|[[Star Wars: Republic Commando]]
|UE2 Build 2226
|-
|[[Thief: Deadly Shadows]]
|Warfare Build 777
|-
|[[Tom Clancy's Ghost Recon: Advanced Warfighter]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3: Black Arrow]]
|Warfare Build 927
|-
|[[Tom Clancy's Splinter Cell]]
|Warfare Build 829
|-
|[[Tom Clancy's Splinter Cell: Chaos Theory]]
|Warfare Build 829 - Singleplayer & Co-op mode
UE2 Build 2110 - Versus mode
|-
|[[Tom Clancy's Splinter Cell: Double Agent]]
|Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
|[[Tom Clancy's Splinter Cell: Pandora Tomorrow]]
|Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
|[[Unreal II: The Awakening]]
|Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
|[[Unreal Championship]]
|UT2003 Build 928
|-
|[[Unreal Championship 2: The Liandri Conflict]]
|UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
|[[Warpath]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[World War II Combat: Road to Berlin]]
|UE2 Build 2110
|-
|[[World War II Combat: Iwo Jima]]
|UE2 Build 2110
|-
|[[XIII]]
|Warfare Build 829
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License
588cd781eba7b72a098fa1495a3e8b413f8d9ab1
Video Encoder
0
3750
6298
5993
2017-12-27T22:23:20Z
Furon
2477
wikitext
text/x-wiki
The Xbox does not use an ordinary [https://web.archive.org/web/20100617022211/http://en.wikipedia.org/wiki/RAMDAC RAMDAC] for video output. Instead, it employs a <em>video encoder</em>.
Video encoder is a chip that converts a digital pixel data stream (coming from the nVidia NV2A graphics processor) into analog video signal, just like a RAMDAC would. An ordinary RAMDAC, however, can only output VGA-style RGB signal. The video encoder used in the Xbox is more flexible, and can generate several different types of signals that adhere to various video standards and color formats. These include, but are not necessarily limited to:
* VGA-style >31 kHz RGB, though only with Sync-on-Green sync signals. (If needed, separate HSYNC and VSYNC signals can be obtained from the motherboard, or by building a special video cable with active electronics for stripping and separating the Sync-on-Green sync signal. In any case, separate HSYNC and VSYNC are not available directly through the AV connector.)
* TV-compatible 15 kHz RGB (with composite sync) – suitable for European-style SCART RGB output (are progressive 625/50 signals supported?)
* Component (Y'PbPr) signal, both in SDTV and HDTV resolutions; suitable for American-style "component" output
* PAL color signal with typical PAL timings (including PAL60), in both composite (CVBS) and s-video (Y/C) formats
* SECAM color signal with typical SECAM timings, in both composite (CVBS) and s-video (Y/C) formats
* NTSC color signal with typical NTSC timings, in both composite (CVBS) and s-video (Y/C) formats
* Black and white composite video signal without a color carrier
The video encoder is also capable of PALplus style Line 23 Wide Screen Signalling (WSS), and the Xbox PIC is rigged with the capability of controlling Scart pin 8 (the ''function switching pin'', which is used as an alternative method of Wide Screen Signalling) and pin 16 (the ''fast switching pin''.)
The make and model of the video encoder has varied through the times – three different video encoders have been used this far. All three are very similar in their features; they support various modes and are flexible enough to be able to output a VGA compatible signal (which is not supported by the Xbox kernel.) They are, however, not register-compatible.
Two of the video encoders (namely, Conexant CX25871 and Focus FS454) also have extensive scaling and filtering functionality, which allows for [https://web.archive.org/web/20100617022211/http://scanline.ca/overscan/ overscan compensation] in desktop-style "TV out" usage. (This means that the GPU can output ordinary VGA resolutions with VGA timings and the video encoder can convert them to SDTV resolutions with TV-style timings on the fly, adding borders around the image so that a projection of the VGA framebuffer image falls within the "safe area" of the video signal.) The capabilities of the Xcalibur chip, however, remain a mystery in this regard: it is not known whether it has a scaler.
All video encoders are connected to (and controlled via) [[SMBus]].
=== Conexant CX25871 ===
[https://web.archive.org/web/20100617022211/http://www.conexant.com:9000/cgi-bin/query?mss=srchprod&pg=q&i=IDXPRODSRCH&q=cx25870 Conexant CX25871] is a close relative of the Brooktree BT868/BT869. There is also a sister model (CX25870) without the Macrovision capability. This chip was used in Xbox versions v1.0 through v1.3. If you follow the link, you will find a product brief and a complete data sheet, with register-level programming information.
=== Focus FS454 ===
[https://web.archive.org/web/20100617022211/http://www.focusinfo.com/solutions/catalog.asp?id=30 Focus FS454] was used in v1.4 (and possibly v1.5) Xboxes. There is also a sister model (FS453) without the Macrovision capability. The data sheet containing the necessary programming information is available from the manufacturer by separate request. Copies of it have also been seen floating around the net.
=== Xcalibur ===
The "Xcalibur" video encoder is a custom chip manufactured for Microsoft. It was first used in the Xbox hardware revision 1.6.
The Xbox-Linux support the Xcalibur video encoders is very limited at present (see <a href="/web/20100617022211/http://www.xbox-linux.org/wiki/Xbox_v1.6_Issues" title="Xbox v1.6 Issues">Xbox v1.6 Issues</a>). The reason for this is that there is, at least currently, no official programming documentation available for this chip. It seems the only way to find out more is through reverse-engineering techniques.
Xboxes that contain the Xcalibur encoder have the firmware ROM and the PIC physically integrated into another MS-specific chip, named Xyclops.
26176ee8cb7a0d55faa81015708852d924ea9e9f
Video Encoder
0
3750
6299
6298
2017-12-27T22:51:38Z
Furon
2477
Fix formatting and links
wikitext
text/x-wiki
The '''video encoder''' is a chip that converts a digital pixel data stream (coming from the nVidia NV2A graphics processor) into analog video signal, just like a [http://en.wikipedia.org/wiki/RAMDAC RAMDAC] would. An ordinary RAMDAC, however, can only output VGA-style RGB signal. The video encoder used in the Xbox is more flexible, and can generate several different types of signals that adhere to various video standards and color formats. These include, but are not necessarily limited to:
* VGA-style >31 kHz RGB, though only with Sync-on-Green sync signals. (If needed, separate HSYNC and VSYNC signals can be obtained from the motherboard, or by building a special video cable with active electronics for stripping and separating the Sync-on-Green sync signal. In any case, separate HSYNC and VSYNC are not available directly through the AV connector.)
* TV-compatible 15 kHz RGB (with composite sync) – suitable for European-style SCART RGB output (are progressive 625/50 signals supported?)
* Component (Y'PbPr) signal, both in SDTV and HDTV resolutions; suitable for American-style "component" output
* PAL color signal with typical PAL timings (including PAL60), in both composite (CVBS) and s-video (Y/C) formats
* SECAM color signal with typical SECAM timings, in both composite (CVBS) and s-video (Y/C) formats
* NTSC color signal with typical NTSC timings, in both composite (CVBS) and s-video (Y/C) formats
* Black and white composite video signal without a color carrier
The video encoder is also capable of PALplus style Line 23 Wide Screen Signalling (WSS), and the Xbox PIC is rigged with the capability of controlling Scart pin 8 (the ''function switching pin'', which is used as an alternative method of Wide Screen Signalling) and pin 16 (the ''fast switching pin''.)
The make and model of the video encoder has varied through the years – three different video encoders have been used thus far. All three are very similar in their features; they support various modes and are flexible enough to be able to output a VGA compatible signal (which is not supported by the Xbox kernel). They are, however, not register-compatible.
Two of the video encoders (Conexant CX25871 and Focus FS454) also have extensive scaling and filtering functionality, which allows for [http://scanline.ca/overscan/ overscan compensation] in desktop-style "TV out" usage. This means that the GPU can output ordinary VGA resolutions with VGA timings and the video encoder can convert them to SDTV resolutions with TV-style timings on the fly, adding borders around the image so that a projection of the VGA framebuffer image falls within the "safe area" of the video signal. The capabilities of the Xcalibur chip, however, remain a mystery in this regard: it is not known whether it has a scaler.
All video encoders are connected to (and controlled via) the [[SMBus]].
=== Conexant CX25871 ===
The [http://www.alldatasheet.com/datasheet-pdf/pdf/153349/CONEXANT/CX25871.html Conexant CX25871] is a close relative of the Brooktree BT868/BT869. There is also a sister model (CX25870) without the Macrovision capability. This chip was used in Xbox versions 1.0 through 1.3.
=== Focus FS454 ===
The [https://www.manualslib.com/products/Focus-Fs454-211664.html Focus FS454] was used in v1.4 (and possibly v1.5) Xboxes. There is also a sister model (FS453) without the Macrovision capability.
=== Xcalibur ===
The Xcalibur video encoder is a custom chip manufactured for Microsoft. It was first used in Xbox hardware revision 1.6. Unfortunately, there is no official programming documentation available for this chip. It seems the only way to find out more is through reverse-engineering techniques.
Xboxes that contain the Xcalibur encoder have the firmware ROM and the PIC physically integrated into another custom chip, named Xyclops.
eec3fa4917791dcd62e2303a522ecf4ab38f4c2f
LPC Debug Port
0
3909
6300
2017-12-27T23:55:09Z
Furon
2477
Created page with "{|class="wikitable" style="float:right;margin-left:10px;" |+ Pin Layout |- ! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name |- | style="text-..."
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SDL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's Low Pin Count Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, the LPC port has been modified in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V when the Xbox is powered on.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V as long as the Xbox is plugged in.
* '''LRESET#''' (5) - LPC reset signal.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal.
* '''LCLK''' (2) - LPC clock signal.
8d9763d92ac3236b9f8a12d682394e2e30dbfa67
6301
6300
2017-12-28T00:20:10Z
Furon
2477
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal.
* '''LCLK''' (2) - 33MHz LPC clock signal; same as PCICLK.
1583c05ede9d1f7d581fdaffb755498f78b701b7
6344
6301
2017-12-30T17:25:42Z
Furon
2477
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal.
* '''LCLK''' (2) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
404b8f255830edd82d1064f97818858be7b9a570
6345
6344
2017-12-30T17:26:02Z
Furon
2477
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal.
* '''LCLK''' (2) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
e28f1a2e60af28c379ba7d0976caec7dbc1a801b
Talk:LPC Debug Port
1
3910
6302
2017-12-28T01:03:10Z
Furon
2477
Created page with "== Photos == Photos of the debug port across every revision (top and bottom) would be useful to show how the PCB traces changed over time. A photo showing the location of the..."
wikitext
text/x-wiki
== Photos ==
Photos of the debug port across every revision (top and bottom) would be useful to show how the PCB traces changed over time. A photo showing the location of the port in relation to other components would be nice, too. Perhaps also photos of rebuilt ports and the pads/vias that must be connected. —[[User:Furon|Furon]] ([[User talk:Furon|talk]])
4f3208b18ffa90be4042a8aec2aab4ac7b273690
File:Serial-sticker.jpg
6
3911
6303
2017-12-28T22:08:11Z
Furon
2477
Retrieved from xbox-linux.org under the [https://web.archive.org/web/20100617013616/http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License 1.2].
wikitext
text/x-wiki
Retrieved from xbox-linux.org under the [https://web.archive.org/web/20100617013616/http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License 1.2].
b857daaa928b979ba3edf3a221f4fcd7655a1851
Manufacturing Process
0
3912
6304
2017-12-29T00:04:31Z
Furon
2477
Created page with "The Xbox was manufactured in three countries throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; and Doumen, China. == Serial Number == File:Serial-sticker.jp..."
wikitext
text/x-wiki
The Xbox was manufactured in three countries throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; and Doumen, China.
== Serial Number ==
[[File:Serial-sticker.jpg|frame|An example of a serial number sticker]]
Every Xbox has a sticker on the bottom with a manufacturing date and a 12-digit serial number. The serial number encodes information about where and when the hardware was manufactured.
Using the pictured serial number as an example:
{| class="wikitable" style="text-align:center"
! Line !! Number !! Year !! Week !! Factory
|-
| 1 || 166356 || 2 || 09 || 03
|}
The first field is the factory production line number. The second field is the Xbox's number for the week (for the whole factory, not just the one line). The third field is the last digit of the year. The fourth field is the week of the year. Finally, the fifth field is the factory number. Mexico is 02, Hungary is 03, and China is 05.
So this Xbox was the 166,356<sup>th</sup> to be manufactured in week 9 of the year 2002 on production line 1 in Sárvár, Hungary.
== Timeline ==
{| class="wikitable"
! scope="col" |
! scope="col" | Mexico
! scope="col" | Hungary
! scope="col" | China
|-
! colspan=4 scope="col" | 2001
|-
! scope="row" | October
| colspan=2 | Production of 110V 1.0 Xboxes with Thomson DVD drives begins for USA/Canada.
| style="background:white" |
|-
! colspan=4 scope="col" | 2002
|-
! scope="row" | January
| Production begins for Japan.
| Production switches to 220V 1.0 models for Europe/Australia.
| style="background:white" |
|-
! scope="row" | April
| Production lines 1 and 6 are moved to China. 50% of new units now produced with Philips DVD drives.
|
| {{FIXME|reason=Which markets did China take up production for?}}
|-
! scope="row" | May
|
| Production stops after ~3 million units. All four production lines moved to China.
|
|-
! scope="row" | August
|
| style="background:white" |
| Production of the 220V 1.1 Xbox for Europe/Australia begins, with mostly Philips and sometimes Thomson DVD drives.
|-
! scope="row" | September
|
| style="background:white" |
| Most units now use Samsung DVD drives.
|-
! scope="row" | October
| Remaining four lines switched to version 1.1.
| style="background:white" |
|
|-
! scope="row" | November
|
| style="background:white" |
| Production extended to 110V USA/Canada/Japan models.
|-
! scope="row" | December
| Production ends after ~7 million units.
| style="background:white" |
| First line changes to version 1.2.
|-
! colspan=4 scope="col" | 2003
|-
! scope="row" | February
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.2.
|-
! scope="row" | March
| style="background:white" |
| style="background:white" |
| First line changes to version 1.3.
|-
! scope="row" | April
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.3.
|-
! scope="row" | July
| style="background:white" |
| style="background:white" |
| First line changes to version 1.4.
|-
! scope="row" | August
| style="background:white" |
| style="background:white" |
| First line changes to version 1.5.
|-
! colspan=4 scope="col" | 2004 {{FIXME|reason=Need timeline for 1.6 models.}}
|-
! scope="row" | ?
| style="background:white" |
| style="background:white" |
| ?
|}
== Hardware assembly ==
The Xbox was manufactured just like many other mass-produced electronic products. Printed circuit boards were made in bulk and populated by pick-and-place machines, the plastic case was formed by injection molding, and finally all of the pieces were assembled by hand on production lines.
The overall process didn't vary much between hardware revisions. The only notable change was related to the BIOS ROM. Up until version 1.6, the BIOS was flashed onto a TSOP ROM before being soldered to the motherboard. Revision 1.6 introduced the Xyclops chip, which integrated both the [[System Management Controller]] and the BIOS ROM on a single die. This meant the BIOS had to be flashed by the chip manufacturer instead of on the Xbox production line.
== Software initialization ==
When a fully-assembled Xbox reached the end of the production line, it had a:
* valid BIOS image
* blank EEPROM
* blank, unlocked hard disk
To initialize the EEPROM and hard disk in the final stage of production, a technician would insert a DVD containing a setup program. The setup program, named default.xbe just like any other primary Xbox executable, was built by the XDK with the "allow eject" flag set and the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from the DVD, which does the following:
# Format the three swap partitions
# Copy XMTAXBOX.XBE from the DVD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
=== XMTAXBOX.XBE ===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
# Retrieve the EEPROM contents from a network server
# Retrieve the contents of the system and data partitions from a network server
# Lock the hard disk
# Run some self tests and send a report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
== Credits ==
This article is adapted from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process Xbox Manufacturing Process] by Michael Steil. Its content is reproduced here under the [https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html GNU Free Documentation License 1.2].
75a08cdd496069cf260ba225edda0d41bd0075a4
6338
6304
2017-12-29T03:09:13Z
Furon
2477
Add photos
wikitext
text/x-wiki
[[File:Manufacturing26.jpg|thumb|Sárvár, Hungary factory]]
The Xbox was manufactured in three countries throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; and Doumen, China.
== Serial Number ==
[[File:Serial-sticker.jpg|frame|An example of a serial number sticker]]
Every Xbox has a sticker on the bottom with a manufacturing date and a 12-digit serial number. The serial number encodes information about where and when the hardware was manufactured.
Using the pictured serial number as an example:
{| class="wikitable" style="text-align:center"
! Line !! Number !! Year !! Week !! Factory
|-
| 1 || 166356 || 2 || 09 || 03
|}
The first field is the factory production line number. The second field is the Xbox's number for the week (for the whole factory, not just the one line). The third field is the last digit of the year. The fourth field is the week of the year. Finally, the fifth field is the factory number. Mexico is 02, Hungary is 03, and China is 05.
So this Xbox was the 166,356<sup>th</sup> to be manufactured in week 9 of the year 2002 on production line 1 in Sárvár, Hungary.
== Timeline ==
{| class="wikitable"
! scope="col" |
! scope="col" | Mexico
! scope="col" | Hungary
! scope="col" | China
|-
! colspan=4 scope="col" | 2001
|-
! scope="row" | October
| colspan=2 | Production of 110V 1.0 Xboxes with Thomson DVD drives begins for USA/Canada.
| style="background:white" |
|-
! colspan=4 scope="col" | 2002
|-
! scope="row" | January
| Production begins for Japan.
| Production switches to 220V 1.0 models for Europe/Australia.
| style="background:white" |
|-
! scope="row" | April
| Production lines 1 and 6 are moved to China. 50% of new units now produced with Philips DVD drives.
|
| {{FIXME|reason=Which markets did China take up production for?}}
|-
! scope="row" | May
|
| Production stops after ~3 million units. All four production lines moved to China.
|
|-
! scope="row" | August
|
| style="background:white" |
| Production of the 220V 1.1 Xbox for Europe/Australia begins, with mostly Philips and sometimes Thomson DVD drives.
|-
! scope="row" | September
|
| style="background:white" |
| Most units now use Samsung DVD drives.
|-
! scope="row" | October
| Remaining four lines switched to version 1.1.
| style="background:white" |
|
|-
! scope="row" | November
|
| style="background:white" |
| Production extended to 110V USA/Canada/Japan models.
|-
! scope="row" | December
| Production ends after ~7 million units.
| style="background:white" |
| First line changes to version 1.2.
|-
! colspan=4 scope="col" | 2003
|-
! scope="row" | February
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.2.
|-
! scope="row" | March
| style="background:white" |
| style="background:white" |
| First line changes to version 1.3.
|-
! scope="row" | April
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.3.
|-
! scope="row" | July
| style="background:white" |
| style="background:white" |
| First line changes to version 1.4.
|-
! scope="row" | August
| style="background:white" |
| style="background:white" |
| First line changes to version 1.5.
|-
! colspan=4 scope="col" | 2004 {{FIXME|reason=Need timeline for 1.6 models.}}
|-
! scope="row" | ?
| style="background:white" |
| style="background:white" |
| ?
|}
== Hardware assembly ==
The Xbox was manufactured just like many other mass-produced electronic products. Printed circuit boards were made in bulk and populated by pick-and-place machines, the plastic case was formed by injection molding, and finally all of the pieces were assembled by hand on production lines.
The overall process didn't vary much between hardware revisions. The only notable change was related to the BIOS ROM. Up until version 1.6, the BIOS was flashed onto a TSOP ROM before being soldered to the motherboard. Revision 1.6 introduced the Xyclops chip, which integrated both the [[System Management Controller]] and the BIOS ROM on a single die. This meant the BIOS had to be flashed by the chip manufacturer instead of on the Xbox production line.
<gallery>
File:Manufacturing19.jpg|Plastic case molding & assembly.
File:Manufacturing18.jpg|Lids
File:Manufacturing9.jpg|Green jewels
File:Manufacturing10.jpg|Green jewels
File:Manufacturing16.jpg|Jewels are dispensed from hoppers.
File:Manufacturing7.jpg|Lid shield is positioned.
File:Manufacturing3.jpg|Lid is placed over shield.
File:Manufacturing5.jpg|Jewel is aligned...
File:Manufacturing4.jpg|...and then applied.
File:Manufacturing6.jpg|The tape is left on to prevent scratches.
File:Manufacturing15.jpg|Shield and drive caddies are installed in the bottom half.
File:Manufacturing20.jpg|Assembled cases are placed on pallets.
File:Manufacturing11.jpg
File:Manufacturing12.jpg
File:Manufacturing13.jpg
File:Manufacturing14.jpg|Cases ready for their electronics.
File:Manufacturing25.jpg|Components arrive in bulk at the assembly line.
File:Manufacturing26.jpg
File:Manufacturing24.jpg|Technicians assemble components.
File:Manufacturing23.jpg
File:Manufacturing22.jpg
File:Manufacturing27.jpg
File:Manufacturing28.jpg
File:Manufacturing21.jpg|Fully assembled consoles are placed on carts, ready for initialization.
</gallery>
== Software initialization ==
When a fully-assembled Xbox reached the end of the production line, it had a:
* valid BIOS image
* blank EEPROM
* blank, unlocked hard disk
To initialize the EEPROM and hard disk in the final stage of production, a technician would insert a DVD containing a setup program. The setup program, named default.xbe just like any other primary Xbox executable, was built by the XDK with the "allow eject" flag set and the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from the DVD, which does the following:
# Format the three swap partitions
# Copy XMTAXBOX.XBE from the DVD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
=== XMTAXBOX.XBE ===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
# Retrieve the EEPROM contents from a network server
# Retrieve the contents of the system and data partitions from a network server
# Lock the hard disk
# Run some self tests and send a report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<gallery>
File:Manufacturing30.jpg|Consoles are initialized by setup program.
File:Manufacturing33.jpg|Initialized consoles undergo final integration testing.
File:Manufacturing34.jpg
File:Manufacturing2.jpg
</gallery>
== Packing and shipping ==
<gallery>
File:Manufacturing17.jpg|Styrofoam inserts are prepared.
File:Manufacturing31.jpg|Consoles are packed into boxes.
File:Manufacturing32.jpg|Boxes are sealed...
File:Manufacturing29.jpg|...and loaded on pallets, ready for shipping.
</gallery>
== Credits ==
This article is adapted from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process Xbox Manufacturing Process] by Michael Steil. Its content is reproduced here under the [https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html GNU Free Documentation License 1.2].
Production line photos are from [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ Andy Rostad's gallery].
a2f2d6dd2e1748ee9d4774059a9a3a7eda4b21db
6339
6338
2017-12-29T03:18:22Z
Furon
2477
Mention Taiwan
wikitext
text/x-wiki
[[File:Manufacturing26.jpg|thumb|Sárvár, Hungary factory]]
The Xbox was manufactured in four locations throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; Doumen, China; and Taiwan{{FIXME|reason=City?}}.
== Serial Number ==
[[File:Serial-sticker.jpg|frame|An example of a serial number sticker]]
Every Xbox has a sticker on the bottom with a manufacturing date and a 12-digit serial number. The serial number encodes information about where and when the hardware was manufactured.
Using the pictured serial number as an example:
{| class="wikitable" style="text-align:center"
! Line !! Number !! Year !! Week !! Factory
|-
| 1 || 166356 || 2 || 09 || 03
|}
The first field is the factory production line number. The second field is the Xbox's number for the week (for the whole factory, not just the one line). The third field is the last digit of the year. The fourth field is the week of the year. Finally, the fifth field is the factory number. Mexico is 02, Hungary is 03, China is 05, and Taiwan is 06.
So this Xbox was the 166,356<sup>th</sup> to be manufactured in week 9 of the year 2002 on production line 1 in Sárvár, Hungary.
== Timeline ==
{| class="wikitable"
! scope="col" |
! scope="col" | Mexico
! scope="col" | Hungary
! scope="col" | China
|-
! colspan=4 scope="col" | 2001
|-
! scope="row" | October
| colspan=2 | Production of 110V 1.0 Xboxes with Thomson DVD drives begins for USA/Canada.
| style="background:white" |
|-
! colspan=4 scope="col" | 2002
|-
! scope="row" | January
| Production begins for Japan.
| Production switches to 220V 1.0 models for Europe/Australia.
| style="background:white" |
|-
! scope="row" | April
| Production lines 1 and 6 are moved to China. 50% of new units now produced with Philips DVD drives.
|
| {{FIXME|reason=Which markets did China take up production for?}}
|-
! scope="row" | May
|
| Production stops after ~3 million units. All four production lines moved to China.
|
|-
! scope="row" | August
|
| style="background:white" |
| Production of the 220V 1.1 Xbox for Europe/Australia begins, with mostly Philips and sometimes Thomson DVD drives.
|-
! scope="row" | September
|
| style="background:white" |
| Most units now use Samsung DVD drives.
|-
! scope="row" | October
| Remaining four lines switched to version 1.1.
| style="background:white" |
|
|-
! scope="row" | November
|
| style="background:white" |
| Production extended to 110V USA/Canada/Japan models.
|-
! scope="row" | December
| Production ends after ~7 million units.
| style="background:white" |
| First line changes to version 1.2.
|-
! colspan=4 scope="col" | 2003
|-
! scope="row" | February
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.2.
|-
! scope="row" | March
| style="background:white" |
| style="background:white" |
| First line changes to version 1.3.
|-
! scope="row" | April
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.3.
|-
! scope="row" | July
| style="background:white" |
| style="background:white" |
| First line changes to version 1.4.
|-
! scope="row" | August
| style="background:white" |
| style="background:white" |
| First line changes to version 1.5.
|-
! colspan=4 scope="col" | 2004 {{FIXME|reason=Need timeline for 1.6 models.}}
|-
! scope="row" | ?
| style="background:white" |
| style="background:white" |
| ?
|}
== Hardware assembly ==
The Xbox was manufactured just like many other mass-produced electronic products. Printed circuit boards were made in bulk and populated by pick-and-place machines, the plastic case was formed by injection molding, and finally all of the pieces were assembled by hand on production lines.
The overall process didn't vary much between hardware revisions. The only notable change was related to the BIOS ROM. Up until version 1.6, the BIOS was flashed onto a TSOP ROM before being soldered to the motherboard. Revision 1.6 introduced the Xyclops chip, which integrated both the [[System Management Controller]] and the BIOS ROM on a single die. This meant the BIOS had to be flashed by the chip manufacturer instead of on the Xbox production line.
<gallery>
File:Manufacturing19.jpg|Plastic case molding & assembly.
File:Manufacturing18.jpg|Lids
File:Manufacturing9.jpg|Green jewels
File:Manufacturing10.jpg|Green jewels
File:Manufacturing16.jpg|Jewels are dispensed from hoppers.
File:Manufacturing7.jpg|Lid shield is positioned.
File:Manufacturing3.jpg|Lid is placed over shield.
File:Manufacturing5.jpg|Jewel is aligned...
File:Manufacturing4.jpg|...and then applied.
File:Manufacturing6.jpg|The tape is left on to prevent scratches.
File:Manufacturing15.jpg|Shield and drive caddies are installed in the bottom half.
File:Manufacturing20.jpg|Assembled cases are placed on pallets.
File:Manufacturing11.jpg
File:Manufacturing12.jpg
File:Manufacturing13.jpg
File:Manufacturing14.jpg|Cases ready for their electronics.
File:Manufacturing25.jpg|Components arrive in bulk at the assembly line.
File:Manufacturing26.jpg
File:Manufacturing24.jpg|Technicians assemble components.
File:Manufacturing23.jpg
File:Manufacturing22.jpg
File:Manufacturing27.jpg
File:Manufacturing28.jpg
File:Manufacturing21.jpg|Fully assembled consoles are placed on carts, ready for initialization.
</gallery>
== Software initialization ==
When a fully-assembled Xbox reached the end of the production line, it had a:
* valid BIOS image
* blank EEPROM
* blank, unlocked hard disk
To initialize the EEPROM and hard disk in the final stage of production, a technician would insert a DVD containing a setup program. The setup program, named default.xbe just like any other primary Xbox executable, was built by the XDK with the "allow eject" flag set and the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from the DVD, which does the following:
# Format the three swap partitions
# Copy XMTAXBOX.XBE from the DVD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
=== XMTAXBOX.XBE ===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
# Retrieve the EEPROM contents from a network server
# Retrieve the contents of the system and data partitions from a network server
# Lock the hard disk
# Run some self tests and send a report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<gallery>
File:Manufacturing30.jpg|Consoles are initialized by setup program.
File:Manufacturing33.jpg|Initialized consoles undergo final integration testing.
File:Manufacturing34.jpg
File:Manufacturing2.jpg
</gallery>
== Packing and shipping ==
<gallery>
File:Manufacturing17.jpg|Styrofoam inserts are prepared.
File:Manufacturing31.jpg|Consoles are packed into boxes.
File:Manufacturing32.jpg|Boxes are sealed...
File:Manufacturing29.jpg|...and loaded on pallets, ready for shipping.
</gallery>
== Credits ==
This article is adapted from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process Xbox Manufacturing Process] by Michael Steil. Its content is reproduced here under the [https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html GNU Free Documentation License 1.2].
Production line photos are from [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ Andy Rostad's gallery].
7b268c39b2ae814afa3e09005058b59ef8b47f44
6341
6339
2017-12-29T03:57:41Z
Furon
2477
Add video links
wikitext
text/x-wiki
[[File:Manufacturing26.jpg|thumb|Sárvár, Hungary factory]]
The Xbox was manufactured in four locations throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; Doumen, China; and Taiwan{{FIXME|reason=City?}}.
== Serial Number ==
[[File:Serial-sticker.jpg|frame|An example of a serial number sticker]]
Every Xbox has a sticker on the bottom with a manufacturing date and a 12-digit serial number. The serial number encodes information about where and when the hardware was manufactured.
Using the pictured serial number as an example:
{| class="wikitable" style="text-align:center"
! Line !! Number !! Year !! Week !! Factory
|-
| 1 || 166356 || 2 || 09 || 03
|}
The first field is the factory production line number. The second field is the Xbox's number for the week (for the whole factory, not just the one line). The third field is the last digit of the year. The fourth field is the week of the year. Finally, the fifth field is the factory number. Mexico is 02, Hungary is 03, China is 05, and Taiwan is 06.
So this Xbox was the 166,356<sup>th</sup> to be manufactured in week 9 of the year 2002 on production line 1 in Sárvár, Hungary.
== Timeline ==
{| class="wikitable"
! scope="col" |
! scope="col" | Mexico
! scope="col" | Hungary
! scope="col" | China
|-
! colspan=4 scope="col" | 2001
|-
! scope="row" | October
| colspan=2 | Production of 110V 1.0 Xboxes with Thomson DVD drives begins for USA/Canada.
| style="background:white" |
|-
! colspan=4 scope="col" | 2002
|-
! scope="row" | January
| Production begins for Japan.
| Production switches to 220V 1.0 models for Europe/Australia.
| style="background:white" |
|-
! scope="row" | April
| Production lines 1 and 6 are moved to China. 50% of new units now produced with Philips DVD drives.
|
| {{FIXME|reason=Which markets did China take up production for?}}
|-
! scope="row" | May
|
| Production stops after ~3 million units. All four production lines moved to China.
|
|-
! scope="row" | August
|
| style="background:white" |
| Production of the 220V 1.1 Xbox for Europe/Australia begins, with mostly Philips and sometimes Thomson DVD drives.
|-
! scope="row" | September
|
| style="background:white" |
| Most units now use Samsung DVD drives.
|-
! scope="row" | October
| Remaining four lines switched to version 1.1.
| style="background:white" |
|
|-
! scope="row" | November
|
| style="background:white" |
| Production extended to 110V USA/Canada/Japan models.
|-
! scope="row" | December
| Production ends after ~7 million units.
| style="background:white" |
| First line changes to version 1.2.
|-
! colspan=4 scope="col" | 2003
|-
! scope="row" | February
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.2.
|-
! scope="row" | March
| style="background:white" |
| style="background:white" |
| First line changes to version 1.3.
|-
! scope="row" | April
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.3.
|-
! scope="row" | July
| style="background:white" |
| style="background:white" |
| First line changes to version 1.4.
|-
! scope="row" | August
| style="background:white" |
| style="background:white" |
| First line changes to version 1.5.
|-
! colspan=4 scope="col" | 2004 {{FIXME|reason=Need timeline for 1.6 models.}}
|-
! scope="row" | ?
| style="background:white" |
| style="background:white" |
| ?
|}
== Hardware assembly ==
The Xbox was manufactured just like many other mass-produced electronic products. Printed circuit boards were made in bulk and populated by pick-and-place machines, the plastic case was formed by injection molding, and finally all of the pieces were assembled by hand on production lines.
The overall process didn't vary much between hardware revisions. The only notable change was related to the BIOS ROM. Up until version 1.6, the BIOS was flashed onto a TSOP ROM before being soldered to the motherboard. Revision 1.6 introduced the Xyclops chip, which integrated both the [[System Management Controller]] and the BIOS ROM on a single die. This meant the BIOS had to be flashed by the chip manufacturer instead of on the Xbox production line.
<gallery>
File:Manufacturing19.jpg|Plastic case molding & assembly.
File:Manufacturing18.jpg|Lids
File:Manufacturing9.jpg|Green jewels
File:Manufacturing10.jpg|Green jewels
File:Manufacturing16.jpg|Jewels are dispensed from hoppers.
File:Manufacturing7.jpg|Lid shield is positioned.
File:Manufacturing3.jpg|Lid is placed over shield.
File:Manufacturing5.jpg|Jewel is aligned...
File:Manufacturing4.jpg|...and then applied.
File:Manufacturing6.jpg|The tape is left on to prevent scratches.
File:Manufacturing15.jpg|Shield and drive caddies are installed in the bottom half.
File:Manufacturing20.jpg|Assembled cases are placed on pallets.
File:Manufacturing11.jpg
File:Manufacturing12.jpg
File:Manufacturing13.jpg
File:Manufacturing14.jpg|Cases ready for their electronics.
File:Manufacturing25.jpg|Components arrive in bulk at the assembly line.
File:Manufacturing26.jpg
File:Manufacturing24.jpg|Technicians assemble components.
File:Manufacturing23.jpg
File:Manufacturing22.jpg
File:Manufacturing27.jpg
File:Manufacturing28.jpg
File:Manufacturing21.jpg|Fully assembled consoles are placed on carts, ready for initialization.
</gallery>
== Software initialization ==
When a fully-assembled Xbox reached the end of the production line, it had a:
* valid BIOS image
* blank EEPROM
* blank, unlocked hard disk
To initialize the EEPROM and hard disk in the final stage of production, a technician would insert a DVD containing a setup program. The setup program, named default.xbe just like any other primary Xbox executable, was built by the XDK with the "allow eject" flag set and the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from the DVD, which does the following:
# Format the three swap partitions
# Copy XMTAXBOX.XBE from the DVD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
=== XMTAXBOX.XBE ===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
# Retrieve the EEPROM contents from a network server
# Retrieve the contents of the system and data partitions from a network server
# Lock the hard disk
# Run some self tests and send a report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<gallery>
File:Manufacturing30.jpg|Consoles are initialized by setup program.
File:Manufacturing33.jpg|Initialized consoles undergo final integration testing.
File:Manufacturing34.jpg
File:Manufacturing2.jpg
</gallery>
== Packing and shipping ==
<gallery>
File:Manufacturing17.jpg|Styrofoam inserts are prepared.
File:Manufacturing31.jpg|Consoles are packed into boxes.
File:Manufacturing32.jpg|Boxes are sealed...
File:Manufacturing29.jpg|...and loaded on pallets, ready for shipping.
</gallery>
== External Links ==
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Factory Tour Video (Sárvár, Hungary; 2002)] - Demonstrates almost the entire assembly process from start to finish (not including case manufacturing).
* [https://www.youtube.com/watch?v=_iR0eNuyUKI Flextronics Advertisement] - Contains still photos of the PCB manufacturing and testing processes.
== Credits ==
This article is adapted from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process Xbox Manufacturing Process] by Michael Steil. Its content is reproduced here under the [https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html GNU Free Documentation License 1.2].
Production line photos are from [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ Andy Rostad's gallery].
c6cca4ba3d4d19d4c01138a600d3e5aac7d08c92
6342
6341
2017-12-29T18:57:17Z
Furon
2477
wikitext
text/x-wiki
[[File:Manufacturing26.jpg|thumb|Sárvár, Hungary factory]]
The Xbox was manufactured by Flextronics in four locations throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; Doumen, China; and Taiwan{{FIXME|reason=City?}}.
== Serial Number ==
[[File:Serial-sticker.jpg|frame|An example of a serial number sticker]]
Every Xbox has a sticker on the bottom with a manufacturing date and a 12-digit serial number. The serial number encodes information about where and when the hardware was manufactured.
Using the pictured serial number as an example:
{| class="wikitable" style="text-align:center"
! Line !! Number !! Year !! Week !! Factory
|-
| 1 || 166356 || 2 || 09 || 03
|}
The first field is the factory production line number. The second field is the Xbox's number for the week (for the whole factory, not just the one line). The third field is the last digit of the year. The fourth field is the week of the year. Finally, the fifth field is the factory number. Mexico is 02, Hungary is 03, China is 05, and Taiwan is 06.
So this Xbox was the 166,356<sup>th</sup> to be manufactured in week 9 of the year 2002 on production line 1 in Sárvár, Hungary.
== Timeline ==
{| class="wikitable"
! scope="col" |
! scope="col" | Mexico
! scope="col" | Hungary
! scope="col" | China
|-
! colspan=4 scope="col" | 2001
|-
! scope="row" | October
| colspan=2 | Production of 110V 1.0 Xboxes with Thomson DVD drives begins for USA/Canada.
| style="background:white" |
|-
! colspan=4 scope="col" | 2002
|-
! scope="row" | January
| Production begins for Japan.
| Production switches to 220V 1.0 models for Europe/Australia.
| style="background:white" |
|-
! scope="row" | April
| Production lines 1 and 6 are moved to China. 50% of new units now produced with Philips DVD drives.
|
| {{FIXME|reason=Which markets did China take up production for?}}
|-
! scope="row" | May
|
| Production stops after ~3 million units. All four production lines moved to China.
|
|-
! scope="row" | August
|
| style="background:white" |
| Production of the 220V 1.1 Xbox for Europe/Australia begins, with mostly Philips and sometimes Thomson DVD drives.
|-
! scope="row" | September
|
| style="background:white" |
| Most units now use Samsung DVD drives.
|-
! scope="row" | October
| Remaining four lines switched to version 1.1.
| style="background:white" |
|
|-
! scope="row" | November
|
| style="background:white" |
| Production extended to 110V USA/Canada/Japan models.
|-
! scope="row" | December
| Production ends after ~7 million units.
| style="background:white" |
| First line changes to version 1.2.
|-
! colspan=4 scope="col" | 2003
|-
! scope="row" | February
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.2.
|-
! scope="row" | March
| style="background:white" |
| style="background:white" |
| First line changes to version 1.3.
|-
! scope="row" | April
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.3.
|-
! scope="row" | July
| style="background:white" |
| style="background:white" |
| First line changes to version 1.4.
|-
! scope="row" | August
| style="background:white" |
| style="background:white" |
| First line changes to version 1.5.
|-
! colspan=4 scope="col" | 2004 {{FIXME|reason=Need timeline for 1.6 models.}}
|-
! scope="row" | ?
| style="background:white" |
| style="background:white" |
| ?
|}
== Hardware assembly ==
The Xbox was manufactured just like many other mass-produced electronic products. Printed circuit boards were made in bulk and populated by pick-and-place machines, the plastic case was formed by injection molding, and finally all of the pieces were assembled by hand on production lines.
The overall process didn't vary much between hardware revisions. The only notable change was related to the BIOS ROM. Up until version 1.6, the BIOS was flashed onto a TSOP ROM before being soldered to the motherboard. Revision 1.6 introduced the Xyclops chip, which integrated both the [[System Management Controller]] and the BIOS ROM on a single die. This meant the BIOS had to be flashed by the chip manufacturer instead of on the Xbox production line.
<gallery>
File:Manufacturing19.jpg|Plastic case molding & assembly.
File:Manufacturing18.jpg|Lids
File:Manufacturing9.jpg|Green jewels
File:Manufacturing10.jpg|Green jewels
File:Manufacturing16.jpg|Jewels are dispensed from hoppers.
File:Manufacturing7.jpg|Lid shield is positioned.
File:Manufacturing3.jpg|Lid is placed over shield.
File:Manufacturing5.jpg|Jewel is aligned...
File:Manufacturing4.jpg|...and then applied.
File:Manufacturing6.jpg|The tape is left on to prevent scratches.
File:Manufacturing15.jpg|Shield and drive caddies are installed in the bottom half.
File:Manufacturing20.jpg|Assembled cases are placed on pallets.
File:Manufacturing11.jpg
File:Manufacturing12.jpg
File:Manufacturing13.jpg
File:Manufacturing14.jpg|Cases ready for their electronics.
File:Manufacturing25.jpg|Components arrive in bulk at the assembly line.
File:Manufacturing26.jpg
File:Manufacturing24.jpg|Technicians assemble components.
File:Manufacturing23.jpg
File:Manufacturing22.jpg
File:Manufacturing27.jpg
File:Manufacturing28.jpg
File:Manufacturing21.jpg|Fully assembled consoles are placed on carts, ready for initialization.
</gallery>
== Software initialization ==
When a fully-assembled Xbox reached the end of the production line, it had a:
* valid BIOS image
* blank EEPROM
* blank, unlocked hard disk
To initialize the EEPROM and hard disk in the final stage of production, a technician would insert a DVD containing a setup program. The setup program, named default.xbe just like any other primary Xbox executable, was built by the XDK with the "allow eject" flag set and the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from the DVD, which does the following:
# Format the three swap partitions
# Copy XMTAXBOX.XBE from the DVD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
=== XMTAXBOX.XBE ===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
# Retrieve the EEPROM contents from a network server
# Retrieve the contents of the system and data partitions from a network server
# Lock the hard disk
# Run some self tests and send a report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<gallery>
File:Manufacturing30.jpg|Consoles are initialized by setup program.
File:Manufacturing33.jpg|Initialized consoles undergo final integration testing.
File:Manufacturing34.jpg
File:Manufacturing2.jpg
</gallery>
== Packing and shipping ==
<gallery>
File:Manufacturing17.jpg|Styrofoam inserts are prepared.
File:Manufacturing31.jpg|Consoles are packed into boxes.
File:Manufacturing32.jpg|Boxes are sealed...
File:Manufacturing29.jpg|...and loaded on pallets, ready for shipping.
</gallery>
== Videos ==
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Factory Tour Video (Sárvár, Hungary; 2002)] - Demonstrates almost the entire assembly process from start to finish (not including case manufacturing).
* [https://www.youtube.com/watch?v=_iR0eNuyUKI Flextronics Advertisement] - Contains still photos of the PCB manufacturing and testing processes.
== Further Reading ==
* [https://web.archive.org/web/20100617013616/http://www.ifm.eng.cam.ac.uk/ctm/idm/cases/xbox.html Case study - Microsoft Xbox], Innovation and Design Management, University of Cambridge
* O'Brien, J. [https://web.archive.org/web/20100617013616/http://www.wired.com/wired/archive/9.11/flex_pr.html The making of the Xbox], Wired, Issue 9.11, November 2001
* Shah, J. and Serant, C. [https://web.archive.org/web/20100617013616/http://www.ebnonline.com/story/OEG20020311S0076 Microsoft's Xbox sets supply chain standard], EBN Online, 11 March 2002
* Olavsrud, T. [https://web.archive.org/web/20100617013616/http://www.internetnews.com/bus-news/article.php/1129171 Flextronics relocates Xbox manufacturing facility], Internetnews.com, 15 May 2002
* Penz, B. [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-06/articles/16-06_27.asp Game Over? Xbox production heads east], Business Hungary, Vol 16 No 6, June 2002
* Carbone, J. [https://web.archive.org/web/20100617013616/http://manufacturing.net/pur/article/CA237778?stt=001&pubdate=08%2F15%2F02 Outsourcing the Xbox], Purchasing Magazine Online, 15 August 2002
* Neilley, R. [https://web.archive.org/web/20100617013616/http://www.immnet.com/articles?article=1763 Molding is big man on this campus], PlasticsToday, 1 December 2001
== Credits ==
This article is adapted from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process Xbox Manufacturing Process] by Michael Steil. Its content is reproduced here under the [https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html GNU Free Documentation License 1.2].
Production line photos are from [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ Andy Rostad's gallery].
7adbdca8973708f84fa3445cc70298d0fd52080e
6343
6342
2017-12-29T20:26:24Z
Furon
2477
Mention the label bar code
wikitext
text/x-wiki
[[File:Manufacturing26.jpg|thumb|Sárvár, Hungary factory]]
The Xbox was manufactured by Flextronics in four locations throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; Doumen, China; and Taiwan{{FIXME|reason=City?}}.
== Serial Number ==
[[File:Serial-sticker.jpg|frame|An example of a serial number sticker]]
Every Xbox has a sticker on the bottom with a manufacturing date and a 12-digit serial number. The serial number encodes information about where and when the hardware was manufactured.
Using the pictured serial number as an example:
{| class="wikitable" style="text-align:center"
! Line !! Number !! Year !! Week !! Factory
|-
| 1 || 166356 || 2 || 09 || 03
|}
The first field is the factory production line number. The second field is the Xbox's number for the week (for the whole factory, not just the one line). The third field is the last digit of the year. The fourth field is the week of the year. Finally, the fifth field is the factory number. Mexico is 02, Hungary is 03, China is 05, and Taiwan is 06.
So this Xbox was the 166,356<sup>th</sup> to be manufactured in week 9 of the year 2002 on production line 1 in Sárvár, Hungary.
The bar code is the 12-digit serial number in standard [https://en.wikipedia.org/wiki/Code_39 Code 39] format.
== Timeline ==
{| class="wikitable"
! scope="col" |
! scope="col" | Mexico
! scope="col" | Hungary
! scope="col" | China
|-
! colspan=4 scope="col" | 2001
|-
! scope="row" | October
| colspan=2 | Production of 110V 1.0 Xboxes with Thomson DVD drives begins for USA/Canada.
| style="background:white" |
|-
! colspan=4 scope="col" | 2002
|-
! scope="row" | January
| Production begins for Japan.
| Production switches to 220V 1.0 models for Europe/Australia.
| style="background:white" |
|-
! scope="row" | April
| Production lines 1 and 6 are moved to China. 50% of new units now produced with Philips DVD drives.
|
| {{FIXME|reason=Which markets did China take up production for?}}
|-
! scope="row" | May
|
| Production stops after ~3 million units. All four production lines moved to China.
|
|-
! scope="row" | August
|
| style="background:white" |
| Production of the 220V 1.1 Xbox for Europe/Australia begins, with mostly Philips and sometimes Thomson DVD drives.
|-
! scope="row" | September
|
| style="background:white" |
| Most units now use Samsung DVD drives.
|-
! scope="row" | October
| Remaining four lines switched to version 1.1.
| style="background:white" |
|
|-
! scope="row" | November
|
| style="background:white" |
| Production extended to 110V USA/Canada/Japan models.
|-
! scope="row" | December
| Production ends after ~7 million units.
| style="background:white" |
| First line changes to version 1.2.
|-
! colspan=4 scope="col" | 2003
|-
! scope="row" | February
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.2.
|-
! scope="row" | March
| style="background:white" |
| style="background:white" |
| First line changes to version 1.3.
|-
! scope="row" | April
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.3.
|-
! scope="row" | July
| style="background:white" |
| style="background:white" |
| First line changes to version 1.4.
|-
! scope="row" | August
| style="background:white" |
| style="background:white" |
| First line changes to version 1.5.
|-
! colspan=4 scope="col" | 2004 {{FIXME|reason=Need timeline for 1.6 models.}}
|-
! scope="row" | ?
| style="background:white" |
| style="background:white" |
| ?
|}
== Hardware assembly ==
The Xbox was manufactured just like many other mass-produced electronic products. Printed circuit boards were made in bulk and populated by pick-and-place machines, the plastic case was formed by injection molding, and finally all of the pieces were assembled by hand on production lines.
The overall process didn't vary much between hardware revisions. The only notable change was related to the BIOS ROM. Up until version 1.6, the BIOS was flashed onto a TSOP ROM before being soldered to the motherboard. Revision 1.6 introduced the Xyclops chip, which integrated both the [[System Management Controller]] and the BIOS ROM on a single die. This meant the BIOS had to be flashed by the chip manufacturer instead of on the Xbox production line.
<gallery>
File:Manufacturing19.jpg|Plastic case molding & assembly.
File:Manufacturing18.jpg|Lids
File:Manufacturing9.jpg|Green jewels
File:Manufacturing10.jpg|Green jewels
File:Manufacturing16.jpg|Jewels are dispensed from hoppers.
File:Manufacturing7.jpg|Lid shield is positioned.
File:Manufacturing3.jpg|Lid is placed over shield.
File:Manufacturing5.jpg|Jewel is aligned...
File:Manufacturing4.jpg|...and then applied.
File:Manufacturing6.jpg|The tape is left on to prevent scratches.
File:Manufacturing15.jpg|Shield and drive caddies are installed in the bottom half.
File:Manufacturing20.jpg|Assembled cases are placed on pallets.
File:Manufacturing11.jpg
File:Manufacturing12.jpg
File:Manufacturing13.jpg
File:Manufacturing14.jpg|Cases ready for their electronics.
File:Manufacturing25.jpg|Components arrive in bulk at the assembly line.
File:Manufacturing26.jpg
File:Manufacturing24.jpg|Technicians assemble components.
File:Manufacturing23.jpg
File:Manufacturing22.jpg
File:Manufacturing27.jpg
File:Manufacturing28.jpg
File:Manufacturing21.jpg|Fully assembled consoles are placed on carts, ready for initialization.
</gallery>
== Software initialization ==
When a fully-assembled Xbox reached the end of the production line, it had a:
* valid BIOS image
* blank EEPROM
* blank, unlocked hard disk
To initialize the EEPROM and hard disk in the final stage of production, a technician would insert a DVD containing a setup program. The setup program, named default.xbe just like any other primary Xbox executable, was built by the XDK with the "allow eject" flag set and the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from the DVD, which does the following:
# Format the three swap partitions
# Copy XMTAXBOX.XBE from the DVD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
=== XMTAXBOX.XBE ===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
# Retrieve the EEPROM contents from a network server
# Retrieve the contents of the system and data partitions from a network server
# Lock the hard disk
# Run some self tests and send a report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<gallery>
File:Manufacturing30.jpg|Consoles are initialized by setup program.
File:Manufacturing33.jpg|Initialized consoles undergo final integration testing.
File:Manufacturing34.jpg
File:Manufacturing2.jpg
</gallery>
== Packing and shipping ==
<gallery>
File:Manufacturing17.jpg|Styrofoam inserts are prepared.
File:Manufacturing31.jpg|Consoles are packed into boxes.
File:Manufacturing32.jpg|Boxes are sealed...
File:Manufacturing29.jpg|...and loaded on pallets, ready for shipping.
</gallery>
== Videos ==
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Factory Tour Video (Sárvár, Hungary; 2002)] - Demonstrates almost the entire assembly process from start to finish (not including case manufacturing).
* [https://www.youtube.com/watch?v=_iR0eNuyUKI Flextronics Advertisement] - Contains still photos of the PCB manufacturing and testing processes.
== Further Reading ==
* [https://web.archive.org/web/20100617013616/http://www.ifm.eng.cam.ac.uk/ctm/idm/cases/xbox.html Case study - Microsoft Xbox], Innovation and Design Management, University of Cambridge
* O'Brien, J. [https://web.archive.org/web/20100617013616/http://www.wired.com/wired/archive/9.11/flex_pr.html The making of the Xbox], Wired, Issue 9.11, November 2001
* Shah, J. and Serant, C. [https://web.archive.org/web/20100617013616/http://www.ebnonline.com/story/OEG20020311S0076 Microsoft's Xbox sets supply chain standard], EBN Online, 11 March 2002
* Olavsrud, T. [https://web.archive.org/web/20100617013616/http://www.internetnews.com/bus-news/article.php/1129171 Flextronics relocates Xbox manufacturing facility], Internetnews.com, 15 May 2002
* Penz, B. [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-06/articles/16-06_27.asp Game Over? Xbox production heads east], Business Hungary, Vol 16 No 6, June 2002
* Carbone, J. [https://web.archive.org/web/20100617013616/http://manufacturing.net/pur/article/CA237778?stt=001&pubdate=08%2F15%2F02 Outsourcing the Xbox], Purchasing Magazine Online, 15 August 2002
* Neilley, R. [https://web.archive.org/web/20100617013616/http://www.immnet.com/articles?article=1763 Molding is big man on this campus], PlasticsToday, 1 December 2001
== Credits ==
This article is adapted from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process Xbox Manufacturing Process] by Michael Steil. Its content is reproduced here under the [https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html GNU Free Documentation License 1.2].
Production line photos are from [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ Andy Rostad's gallery].
c0c9d4fba782cd0e5b961fbad53dc1af6dc473ba
File:Manufacturing1.jpg
6
3913
6305
2017-12-29T01:54:37Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing2.jpg
6
3914
6306
2017-12-29T02:04:17Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing3.jpg
6
3915
6307
2017-12-29T02:04:38Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing4.jpg
6
3916
6308
2017-12-29T02:04:59Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing5.jpg
6
3917
6309
2017-12-29T02:05:23Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing6.jpg
6
3918
6310
2017-12-29T02:05:35Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing7.jpg
6
3919
6311
2017-12-29T02:05:55Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing9.jpg
6
3920
6312
2017-12-29T02:06:13Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing10.jpg
6
3921
6313
2017-12-29T02:06:25Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing11.jpg
6
3922
6314
2017-12-29T02:06:40Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing12.jpg
6
3923
6315
2017-12-29T02:06:59Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing13.jpg
6
3924
6316
2017-12-29T02:07:14Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing14.jpg
6
3925
6317
2017-12-29T02:07:27Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing15.jpg
6
3926
6318
2017-12-29T02:07:40Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing16.jpg
6
3927
6319
2017-12-29T02:08:03Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing17.jpg
6
3928
6320
2017-12-29T02:08:15Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing18.jpg
6
3929
6321
2017-12-29T02:08:32Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing19.jpg
6
3930
6322
2017-12-29T02:08:46Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing20.jpg
6
3931
6323
2017-12-29T02:09:08Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing21.jpg
6
3932
6324
2017-12-29T02:09:22Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing22.jpg
6
3933
6325
2017-12-29T02:09:38Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing23.jpg
6
3934
6326
2017-12-29T02:09:54Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing24.jpg
6
3935
6327
2017-12-29T02:10:14Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing25.jpg
6
3936
6328
2017-12-29T02:12:38Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing26.jpg
6
3937
6329
2017-12-29T02:12:51Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing27.jpg
6
3938
6330
2017-12-29T02:13:07Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing28.jpg
6
3939
6331
2017-12-29T02:13:20Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing29.jpg
6
3940
6332
2017-12-29T02:13:39Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing30.jpg
6
3941
6333
2017-12-29T02:13:53Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing31.jpg
6
3942
6334
2017-12-29T02:14:09Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing32.jpg
6
3943
6335
2017-12-29T02:14:20Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing33.jpg
6
3944
6336
2017-12-29T02:14:40Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
File:Manufacturing34.jpg
6
3945
6337
2017-12-29T02:14:53Z
Furon
2477
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
wikitext
text/x-wiki
From [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ andy.saturn9.ws]
be6d6c5f23e379b8e5a7bbae3592e3ea3ad8865c
Main Page
0
1
6340
6252
2017-12-29T03:19:04Z
Furon
2477
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
806e4febbed0e30158506aefd0b6a823730b1909
Super I/O
0
3820
6346
5950
2017-12-30T20:56:35Z
Furon
2477
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U1 SMsC LPC ic ===
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and ?
|(not finished)
|-
|U1 pin 6,7
|C17(down) and GND
|Both U1 pins yes)
|-
|U1 p24
|J9 pin 3
|LFrame
|-
|U1 p29
|J9 pin 1
|LClk
|-
|U1 p30
|J9 pin 16
|(unkown function)
|-
|U1 P84
|U3 ???
|RX
|-
|U1 P85
|U3 ???
|TX
|}
=== J9 LPC header===
Not finished
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|J9 pin 1
|U1 p29
|
|-
|J9 pin 2
|GND
|
|-
|J9 pin 3
|U1 p24
|LFrame
|-
|J9 pin 4
|NC
|no pin
|-
|J9 pin 5
|
|RST
|-
|J9 pin 6
|C12(e),C13(S),C15(S),U3 p11.
|5V
|-
|J9 pin 7
|
|LAD3
|-
|J9 pin 8
|
|LAD2
|-
|J9 pin 9
|3.3V
|
|-
|J9 pin 10
|
|LAD1
|-
|J9 pin 11
|
|LAD0
|-
|J9 pin 12
|GND
|
|-
|J9 pin 13
|U1 p104
|SCL
|-
|J9 pin 14
|U1 p103
|SDA
|-
|J9 pin 15
|3.3V
|
|-
|J9 pin 16
|U1 p30
|(unkown function)
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
6d2c2f12ebf185504357ad8a3d09bf5765a1ae91
Talk:Manufacturing Process
1
3946
6347
2018-01-10T16:17:59Z
Codeasm
2480
/* TSOP programmed in system or from manufactoring? */ new section
wikitext
text/x-wiki
== TSOP programmed in system or from manufactoring? ==
Someone pointed me to the following letter: [http://www.ogxbox.com/archive/xboxsecurity.html 17 Mistakes Microsoft Made in the Xbox Security System]
under section: Modchips its being said that ``` the flash chip gets programmed in-system, the first time they are turned on, using an external LPC ROM chip. ```
If Michael Steil is right, our wiki page should be altered accordingly, unless this was a asumption based on the observation they made of a potencial leftover from earlier revisions of the MCPX? we should try to know if Steil got this info from an MS or factory source or someone who should know this
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:17, 10 January 2018 (PST)
18cb93ecfe907641e73f29b8a1d2517d299c60c0
6348
6347
2018-01-10T16:25:43Z
Codeasm
2480
/* TSOP programmed in system or from manufactoring? */
wikitext
text/x-wiki
== TSOP programmed in system or from manufactoring? ==
Someone pointed me to the following letter: [http://www.ogxbox.com/archive/xboxsecurity.html 17 Mistakes Microsoft Made in the Xbox Security System]
under section: Modchips its being said that ''the flash chip gets programmed in-system, the first time they are turned on, using an external LPC ROM chip.''
If Michael Steil is right, our wiki page should be altered accordingly, unless this was a asumption based on the observation they made of a potencial leftover from earlier revisions of the MCPX? we should try to know if Steil got this info from an MS or factory source or someone who should know this
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:17, 10 January 2018 (PST)
d01e8ba69884316f37824b4226cdf132b6c3692b
Talk:Manufacturing Process
1
3946
6349
6348
2018-01-10T17:35:47Z
Codeasm
2480
/* TSOP programmed in system or from manufactoring? */
wikitext
text/x-wiki
== TSOP programmed in system or from manufactoring? ==
Someone pointed me to the following letter: [http://www.ogxbox.com/archive/xboxsecurity.html 17 Mistakes Microsoft Made in the Xbox Security System]
under section: Modchips its being said that ''the flash chip gets programmed in-system, the first time they are turned on, using an external LPC ROM chip.''
If Michael Steil is right, our wiki page should be altered accordingly, unless this was a asumption based on the observation they made of a potencial leftover from earlier revisions of the MCPX? we should try to know if Steil got this info from an MS or factory source or someone who should know this
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:17, 10 January 2018 (PST)
http://www.ogxbox.com/forums/index.php?/topic/335-tsop-flashing-at-wich-factory-and-onboard/&tab=comments#comment-1524
So certain modchips or even kernels would allow writing TSOP from modchip booted xboxes,
its not a technical limitation then, just... who is right or are earlier xboxes preflashed and later ones onboard or the other way arround?
--[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 09:35, 10 January 2018 (PST)
5caf6f67bf1938692d4c8b177131efa8daab7fb3
SMBus
0
3766
6350
6259
2018-01-12T19:46:30Z
Furon
2477
Add info about arbitration and USB-SMBus adapters
wikitext
text/x-wiki
Retreived from http://www.xbox-linux.org/wiki/SMBus_Controller
by ''Michael Steil'' (original version: 15/26 June 2002)
All non-PC components of the Xbox console are connected through an I²C/SMbus interface. I²C/SMBus is a slow low-cost serial bus with each device having a unique 7-bit ID. (Wikipedia has informative articles about [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/I2c I²C] and [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/SMBus SMBus], you might want to check them out.)
There are only two operations of an SMBus controller: write and read. Writing means that an 8 bit command code and an 8 or 16 bit operand are sent to an SMBus device. Reading means that an 8 bit command code is sent to the device and an 8 or 16 bit answer is expected.
The controller for the SMBus interface in the Xbox is a PCI device with the DevID 01B4 and it is built into MPCX southbridge. It supports bus arbitration and the Xbox kernel will retry transactions if a collision occurs. This means it is safe to use a second SMBus master (a USB-SMBus adapter, for example) while the Xbox is running ''as long as the second master also supports arbitration''. Adapters based on the Silicon Labs CP2112 or Microchip MCP2221 chips will work, for example.
==SMBus Controller Port Layout==
{| class="wikitable"
|-
! Port !! Description
|-
| 0xC000
| '''Status'''
* bit 0: abort
* bit 1: collision
* bit 2: protocol error
* bit 3: busy
* bit 4: cycle complete
* bit 5: timeout
|-
| 0xC002
| '''Control'''
* bit 2-0: cycle type
* bit 3: start
* bit 4: enable interrupt
* bit 5: abort
|-
| 0xC004
| '''Address'''
|-
| 0xC006
| '''Data'''
|-
| 0xC008
| '''Command'''
|}
This is very similar (but not identical) to the AMD756/AMD766/AMD768 SMBus controllers. The [https://web.archive.org/web/20100617015507/http://www.lm-sensors.nu/ lm_sensors project] includes GPLed Linux kernel code for it since version 2.6.4 (kernel/busses/i2c-amd756.c).
==SMBus Controller Programming==
The following two routines illustrate how to read and write data from and to an SMBus device:
<pre> int SMBusWriteCommand(unsigned char slave, unsigned char command, int isWord, unsigned short data) {
again:
_outp(0xc004, (slave<<1)&0xfe);
_outp(0xc008, command);
_outpw(0xc006, data);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
return 1;
}
</pre>
<pre> int SMBusReadCommand(unsigned char slave, unsigned char command, int isWord, unsigned short *data) {
again:
_outp(0xc004, (slave<<1)|0x01);
_outp(0xc008, command);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
*data = _inpw(0xc006);
return 1;
}
</pre>
<br />
To avoid busy waiting of the CPU, the SMBus controller can also issue an interrupt when the operation is complete, by setting bit #4 in the control port when initiating the transfer.
==Xbox SMBus Devices==
The following four devices are connected to the Xbox SMBus:
{| class="wikitable"
|-
| '''Device'''
| '''Hardware Address'''
| '''Software Address'''
|-
| PIC16LC
| 0x10
| 0x20
|-
| Conexant CX25871 Video Encoder
| 0x45
| 0x8a
|-
| ADM1032 System Temperature Monitor
| 0x4c
| 0x98
|-
| Serial EEPROM
| 0x54
| 0xa8
|}
Do not confuse the hardware with the software addresses: The software ID is the hardware ID shifted by one bit left. The code above expects the hardware ID.
Actually, these addresses are not literally accurate; you find that the hardware address is 0x54 for the EEPROM: the actual address of the EEPROM on the i2c bus is 1010 (0xa), however, you will also notice that 0x54 is '''1010'''100 in binary, and it seems that this 100 is also appended onto the other devices as well (although their software address is naturally read as say '''1010'''1000 - obviously because of the left shifting, however, it could be speculated that it would be possible to communicate with devices over the SMBus that are connected via i2c, so long as you knew their base address.
b061a2028c3e084da7219c61ccb02c5f59530799
6351
6350
2018-01-12T19:46:57Z
Furon
2477
wikitext
text/x-wiki
Retreived from http://www.xbox-linux.org/wiki/SMBus_Controller
by ''Michael Steil'' (original version: 15/26 June 2002)
All non-PC components of the Xbox console are connected through an I²C/SMbus interface. I²C/SMBus is a slow low-cost serial bus with each device having a unique 7-bit ID. (Wikipedia has informative articles about [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/I2c I²C] and [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/SMBus SMBus], you might want to check them out.)
There are only two operations of an SMBus controller: write and read. Writing means that an 8 bit command code and an 8 or 16 bit operand are sent to an SMBus device. Reading means that an 8 bit command code is sent to the device and an 8 or 16 bit answer is expected.
The controller for the SMBus interface in the Xbox is a PCI device with the DevID 01B4 and it is built into MPCX southbridge. It supports bus arbitration and the Xbox kernel will retry transactions if a collision occurs. This means it is safe to use a second SMBus master (like a USB-SMBus adapter) while the Xbox is running ''as long as the second master also supports arbitration''. Adapters based on the Silicon Labs CP2112 or Microchip MCP2221 chips will work, for example.
==SMBus Controller Port Layout==
{| class="wikitable"
|-
! Port !! Description
|-
| 0xC000
| '''Status'''
* bit 0: abort
* bit 1: collision
* bit 2: protocol error
* bit 3: busy
* bit 4: cycle complete
* bit 5: timeout
|-
| 0xC002
| '''Control'''
* bit 2-0: cycle type
* bit 3: start
* bit 4: enable interrupt
* bit 5: abort
|-
| 0xC004
| '''Address'''
|-
| 0xC006
| '''Data'''
|-
| 0xC008
| '''Command'''
|}
This is very similar (but not identical) to the AMD756/AMD766/AMD768 SMBus controllers. The [https://web.archive.org/web/20100617015507/http://www.lm-sensors.nu/ lm_sensors project] includes GPLed Linux kernel code for it since version 2.6.4 (kernel/busses/i2c-amd756.c).
==SMBus Controller Programming==
The following two routines illustrate how to read and write data from and to an SMBus device:
<pre> int SMBusWriteCommand(unsigned char slave, unsigned char command, int isWord, unsigned short data) {
again:
_outp(0xc004, (slave<<1)&0xfe);
_outp(0xc008, command);
_outpw(0xc006, data);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
return 1;
}
</pre>
<pre> int SMBusReadCommand(unsigned char slave, unsigned char command, int isWord, unsigned short *data) {
again:
_outp(0xc004, (slave<<1)|0x01);
_outp(0xc008, command);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
*data = _inpw(0xc006);
return 1;
}
</pre>
<br />
To avoid busy waiting of the CPU, the SMBus controller can also issue an interrupt when the operation is complete, by setting bit #4 in the control port when initiating the transfer.
==Xbox SMBus Devices==
The following four devices are connected to the Xbox SMBus:
{| class="wikitable"
|-
| '''Device'''
| '''Hardware Address'''
| '''Software Address'''
|-
| PIC16LC
| 0x10
| 0x20
|-
| Conexant CX25871 Video Encoder
| 0x45
| 0x8a
|-
| ADM1032 System Temperature Monitor
| 0x4c
| 0x98
|-
| Serial EEPROM
| 0x54
| 0xa8
|}
Do not confuse the hardware with the software addresses: The software ID is the hardware ID shifted by one bit left. The code above expects the hardware ID.
Actually, these addresses are not literally accurate; you find that the hardware address is 0x54 for the EEPROM: the actual address of the EEPROM on the i2c bus is 1010 (0xa), however, you will also notice that 0x54 is '''1010'''100 in binary, and it seems that this 100 is also appended onto the other devices as well (although their software address is naturally read as say '''1010'''1000 - obviously because of the left shifting, however, it could be speculated that it would be possible to communicate with devices over the SMBus that are connected via i2c, so long as you knew their base address.
81721cd7df472c08a06571fd9845f9a0e2f33ee9
DVD Emulator
0
3821
6352
5947
2018-01-14T13:58:54Z
Codeasm
2480
Added Raptor card details.
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding witch files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and posibly potencial faults that could occur.
The Hardware required for this where a Developement kit (with the DVD emulation board) a sort of scsi cable and a XDK-Raptor card.{{citation needed}}
two versions of the PCI scsi card are known:
* 940-75004 Rev.01
* unkown, have to ask.
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
For development it wasnt the fastest way to get an executable to the xbox, and for homebrew its pretty useless.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
== Resources ==
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the DVD emulation board]
3f2edfc6d23a48f5089821614816589e0f1c766c
6353
6352
2018-01-15T11:20:14Z
Codeasm
2480
XDK Raptor card, found out mine is atleast another version, 2 or more?
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding witch files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and posibly potencial faults that could occur.
The Hardware required for this where a Developement kit (with the DVD emulation board) a sort of scsi cable and a XDK-Raptor card.{{citation needed}}
two versions of the PCI scsi card are known:
* 940-75004 Rev.01
* 700-75307 Rev.01
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
For development it wasnt the fastest way to get an executable to the xbox, and for homebrew its pretty useless.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
== Resources ==
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the DVD emulation board]
4cc6aaf2615a17a6e7d6db6f8e973659e9c5ec13
6354
6353
2018-01-15T11:33:59Z
Codeasm
2480
found another rev.
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding witch files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and posibly potencial faults that could occur.
The Hardware required for this where a Developement kit (with the DVD emulation board) a sort of scsi cable and a XDK-Raptor card.{{citation needed}}
two or more versions of the PCI scsi card are known:
* 940-75004 Rev.01
* 700-75307 Rev.01
* 700-75307 Rev 03 [https://assemblergames.com/threads/sealed-xbox-raptor-card-for-xdk-dvd-emu.41763/ Assemblergames](posibly same as rev1?)
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
For development it wasnt the fastest way to get an executable to the xbox, and for homebrew its pretty useless.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
== Resources ==
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the DVD emulation board]
836def719e921cc79f0432405060d5f074554a37
6356
6354
2018-01-15T15:41:13Z
Codeasm
2480
some number detail
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding witch files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and posibly potencial faults that could occur.
The Hardware required for this where a Developement kit (with the DVD emulation board) a sort of scsi cable and a XDK-Raptor card.{{citation needed}}
The complete kit, a Raptor PCI Scsi card and Hardisk was numbered: 940-75004 Rev.01
two or more versions of the PCI scsi card are known:
* 700-75307 Rev.01
* 700-75307 Rev 03 [https://assemblergames.com/threads/sealed-xbox-raptor-card-for-xdk-dvd-emu.41763/ Assemblergames](posibly same as rev1?)
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
For development it wasnt the fastest way to get an executable to the xbox, and for homebrew its pretty useless.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
== Resources ==
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the DVD emulation board]
3142c161d3296405138840c7870d1469393f68b5
System Management Controller
0
3748
6355
5997
2018-01-15T11:56:57Z
Codeasm
2480
/* Revisions */ chihiro smc
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
It is also the hardware which is connected to the Power and Eject buttons.
The PIC is running at 20 MHz with its own ROM, RAM and I/O lines.
The PIC is always running, even if the Xbox is turned off. When the power cable is unplugged, it gets its energy from a capacitor for some hours.
It is connected via I²C and located on address 0x10.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
* P2L{{citation needed}}
* D01 (Seen in a debug kit)
* D05 (seen in a earlier model chihiro)
be6e8428729e54c85b6a0e14aee54168930bee48
Talk:Super I/O
1
3908
6357
6296
2018-01-16T01:18:45Z
Furon
2477
wikitext
text/x-wiki
== Alternative Super I/O Controller ==
<del>If one wanted to create a new kernel debugger board, the Microchip LPC47N217 Super I/O Controller is still in production and has a configuration interface compatible with the SMSC LPC47M157. It has fewer pins, thanks to a reduced number of logical devices, so should be easier to solder.</del> Turns out the LPC47N217's configuration registers are not compatible, after all. Its register I/O sequence is also slightly different, so the kernel would have to be patched.
-- [[User:Furon|Furon]] ([[User talk:Furon|talk]])
dc122d6f3dfb11699a9f9470472b42a6a8a08ad2
User:Codeasm
2
3729
6358
6258
2018-01-17T21:03:57Z
Codeasm
2480
Xbox part number list
wikitext
text/x-wiki
Me like Xbox.
----
== Some work that doesnt fit somewhere else, yet ==
== Xbox led error codes ==
this table asumes there is NO AV output, if there is Video output, refer to the onscreen error code or message on display.
The led error codes should only apear without any video output or you dashboard like XBMC is fooling you. When using modchips, check LPC pin connections, fix/remove solderblobs and check D0 and alike wires. try without modchip to see if the onboard TSOP does something.
taken from: [https://web.archive.org/web/20061013114130/http://xbox-scene.org/articles/leds.php]
Tutorial written by : XanTium
Last edited: June 14, 2004
=== GREEN/RED Flashing ===
Probably a bad chip or bad image.
=== 2 reboots then GREEN/RED Flashing ===
FRAG, dead {{citation needed|reason=mine is dead, some other xboxes are dead, but are they dead? cant be fixed and reason unkown? Mine had a leaking clockcap}}.
NO AV, if AV turns on with a code, its NOT a frag.
The 1.0 - 1.5 xbox revisions will leave the power on and "frags". The 1.6 and 1.6b xboxes will turn the power off.[https://assemblergames.com/threads/xbox-flashing-red-and-green.64852/page-2 source]
=== SOLID GREEN/No EJECT/No AUDIO/No VIDEO ===
Probably a bad solder point. Check all your points again.
It could also be a heat problem , make sure your fan is connected and don't put your xbox near heat sources. You can also try to open the top of the xbox and check if it goes better.
=== SOLID GREEN/No AUDIO/No VIDEO ===
This is probably a problems with your audio settings. Try to boot your xbox with a standard a/v pack instead of a HD pack.
=== ORANGE/GREEN Flashing ===
No AUDIO/VIDEO (A/V) pack.
This may also be down to a solder splash on the board or a damaged track.
=== ORANGE Flashing ===
This may also be down to a solder splash on the board or a damaged track. May also be due overheating.
=== GREEN for half a sec then RED Flashing ===
Bad/Corrupted or Empty Eeprom.
=== SOLID RED ===
System overheated , hardware failure , ...
=== FLASHING RED ===
Dead, broken or empty eeprom.
=== 3/4 GREEN 1/4 RED ===
DVD not properly connected or faulty dvd board {{citation needed|reason=havent tested this one myself}}
=== 3/4 RED 1/4 GREEN ===
Harddisk faulty, or not properly connected {{citation needed|reason=havent tested this one myself}}
=== RED/ORANGE Flashing ===
Bad RAM, solderjoint near RAM or other RAM related problem. Did you replace/added RAM? That might be the problem.{{citation needed|reason=havent tested this one myself, never replaced ram.}}
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Microsoft part number list ===
WORK IN PROGRESS
Duke
----------------------
Case serial pcb ic X numbr
----------------------------------------------------------------------
KD708184347 K23B121 REV:A X08-17160
041593501 X08-17160
045701396 X08-17160
050469092 X08-17160
S controller
----------------------
serial pcb ic X numbr
----------------------------------------------------------------------
700182091A K86-00002
719436212A X08-69873
ca4df55ae5b951fe7272325dd7758d25fa437966
6359
6358
2018-01-20T19:20:35Z
Codeasm
2480
wikitext
text/x-wiki
Me like Xbox.
----
http://web.archive.org/web/20151002194113/http://home.comcast.net/~admiral_powerslave/jtag.html
== Some work that doesnt fit somewhere else, yet ==
== Xbox led error codes ==
this table asumes there is NO AV output, if there is Video output, refer to the onscreen error code or message on display.
The led error codes should only apear without any video output or you dashboard like XBMC is fooling you. When using modchips, check LPC pin connections, fix/remove solderblobs and check D0 and alike wires. try without modchip to see if the onboard TSOP does something.
taken from: [https://web.archive.org/web/20061013114130/http://xbox-scene.org/articles/leds.php]
Tutorial written by : XanTium
Last edited: June 14, 2004
=== GREEN/RED Flashing ===
Probably a bad chip or bad image.
=== 2 reboots then GREEN/RED Flashing ===
FRAG, dead {{citation needed|reason=mine is dead, some other xboxes are dead, but are they dead? cant be fixed and reason unkown? Mine had a leaking clockcap}}.
NO AV, if AV turns on with a code, its NOT a frag.
The 1.0 - 1.5 xbox revisions will leave the power on and "frags". The 1.6 and 1.6b xboxes will turn the power off.[https://assemblergames.com/threads/xbox-flashing-red-and-green.64852/page-2 source]
=== SOLID GREEN/No EJECT/No AUDIO/No VIDEO ===
Probably a bad solder point. Check all your points again.
It could also be a heat problem , make sure your fan is connected and don't put your xbox near heat sources. You can also try to open the top of the xbox and check if it goes better.
=== SOLID GREEN/No AUDIO/No VIDEO ===
This is probably a problems with your audio settings. Try to boot your xbox with a standard a/v pack instead of a HD pack.
=== ORANGE/GREEN Flashing ===
No AUDIO/VIDEO (A/V) pack.
This may also be down to a solder splash on the board or a damaged track.
=== ORANGE Flashing ===
This may also be down to a solder splash on the board or a damaged track. May also be due overheating.
=== GREEN for half a sec then RED Flashing ===
Bad/Corrupted or Empty Eeprom.
=== SOLID RED ===
System overheated , hardware failure , ...
=== FLASHING RED ===
Dead, broken or empty eeprom.
=== 3/4 GREEN 1/4 RED ===
DVD not properly connected or faulty dvd board {{citation needed|reason=havent tested this one myself}}
=== 3/4 RED 1/4 GREEN ===
Harddisk faulty, or not properly connected {{citation needed|reason=havent tested this one myself}}
=== RED/ORANGE Flashing ===
Bad RAM, solderjoint near RAM or other RAM related problem. Did you replace/added RAM? That might be the problem.{{citation needed|reason=havent tested this one myself, never replaced ram.}}
== patents ==
https://www.google.com/patents/USD451513 Duke
https://www.google.ch/patents/USD452534 Top of console
https://www.google.com/patents/USD452282 Top shell of console
https://encrypted.google.com/patents/EP1475131B1 Keypad for OG xbox (Live)
https://encrypted.google.com/patents/US8493326 Linked too
=== Memory cards ===
I own multiple memorycards and 3 diferent vendors.
one of wich is ofcourse Microsoft itself.
here is what I have sofar. it would be nice to have a good seperate wiki entry for this, but I rather ask first where and what.
<pre>
Bus 003 Device 005: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Bus 003 Device 006: ID 044f:0f0c ThrustMaster, Inc.
Bus 003 Device 003: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
</pre>
<pre>
Bus 003 Device 014: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 015: ID 044f:0f0c ThrustMaster, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x044f ThrustMaster, Inc.
idProduct 0x0f0c
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
<pre>
Bus 003 Device 016: ID 040b:6520 Weltrend Semiconductor XBOX Xploder
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x040b Weltrend Semiconductor
idProduct 0x6520 XBOX Xploder
bcdDevice 2.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== Microsoft part number list ===
WORK IN PROGRESS
Duke
----------------------
Case serial pcb ic X numbr
----------------------------------------------------------------------
KD708184347 K23B121 REV:A X08-17160
041593501 X08-17160
045701396 X08-17160
050469092 X08-17160
S controller
----------------------
serial pcb ic X numbr
----------------------------------------------------------------------
700182091A K86-00002
719436212A X08-69873
dc21def322947a299d797eb0894726dd0d6cff50
Power Supply
0
3818
6360
6176
2018-01-22T08:55:21Z
Codeasm
2480
/* Minebea */ Syclopse shared these details with me.
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumoured to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
* 3V3 Standby 0.075A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
=== Foxlink Technology LTD ===
{{FIXME|reason=I dont own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
* 96W Max output power
* 3V3 Standby 0.045A
* 3V3 4.8A
* 5V 13.2A
* 12V 1.2A
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what apeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either recieve a thicker but very similiar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interupter). a online form would then be used to determine wich type of cable you recieve by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personaly requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and recieved a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumely this one doesnt come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, wich also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 and later ===
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +5V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || None
|-
| Pin 5 || GND
|-
| Pin 6 || None
|-
| Pin 7 || +3.3V
|-
| Pin 8 || None
|-
| Pin 9 || GND
|-
| Pin 10 || POWOK
|-
| Pin 11 || +12V
|-
| Pin 12 || None
|-
| Pin 13 || +5V
|-
| Pin 14 || GND
|-
| Pin 15 || +3V Standby
|-
| Pin 16 || GND
|-
| Pin 17 || None
|-
| Pin 18 || +3.3V
|-
| Pin 19 || GND
|-
| Pin 20 || POWON
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
a75e8682549774389a53254ed3cf6c3b8af234a9
Xbox 360 Backward Compatibility
0
3701
6361
5565
2018-01-24T17:56:39Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPRDT section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter? eax points to a zero terminated list of pointers into the kernel memory [7 elements]
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter? " [4 elements]
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter? Seems to be some call to that address?!
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter? " [3 elements]
|-
| colspan="3" | Cleaner list starts here {{FIXME}}
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x21 ||
|-
| 0x04 || 0x22 ||
|-
| 0x04 || 0x23 ||
|-
| 0x04 || 0x24 ||
|-
| 0x04 || 0x35 ||
|-
| 0x04 || 0x50 ||
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter? Memory is 0x00 filled before. location is 0x8002b420, size would be 0x3000
|-
| 0x06 || 0x02 ||
|-
| 0x06 || 0x20 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x21 ||
|-
| 0x06 || 0x22 ||
|-
| 0x06 || 0x23 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x24 ||
|-
| 0x06 || 0x25 ||
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x40 ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://www.youtube.com/watch?v=Da_ont-2AG0 Modern Vintage Gamer: Revisiting Original Xbox Backward Compatibility on the Xbox 360]
39db60fb749ac541be13712a34283223561f3634
Super I/O
0
3820
6362
6346
2018-02-06T20:11:57Z
Codeasm
2480
/* U1 SMsC LPC ic */ updates for pins 27,40, 44,45 and 60 (pins RX and TX on MAX223)
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U1 SMsC LPC ic ===
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and ?
|(not finished)
|-
|U1 pin 6,7
|C17(down) and GND
|Both U1 pins yes)
|-
|U1 p24
|J9 pin 3
|LFrame
|-
|U1 p27
|R7
|Pull up (3.3v)
|-
|U1 p29
|J9 pin 1
|LClk
|-
|U1 p30
|J9 pin 16
|(unkown function)
|-
|U1 p40
|GND
|
|-
|U1 p44
|3.3v with C2
|Vcc?
|-
|U1 p45
|R1 (R2 unpopulated)
|Pull down (R2 would be pullup 3.3v)
|-
|U1 p60
|GND
|
|-
|U1 P84
|U3 P8
|RX
|-
|U1 P85
|U3 P6
|TX
|}
=== J9 LPC header===
Not finished
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|J9 pin 1
|U1 p29
|
|-
|J9 pin 2
|GND
|
|-
|J9 pin 3
|U1 p24
|LFrame
|-
|J9 pin 4
|NC
|no pin
|-
|J9 pin 5
|
|RST
|-
|J9 pin 6
|C12(e),C13(S),C15(S),U3 p11.
|5V
|-
|J9 pin 7
|
|LAD3
|-
|J9 pin 8
|
|LAD2
|-
|J9 pin 9
|3.3V
|
|-
|J9 pin 10
|
|LAD1
|-
|J9 pin 11
|
|LAD0
|-
|J9 pin 12
|GND
|
|-
|J9 pin 13
|U1 p104
|SCL
|-
|J9 pin 14
|U1 p103
|SDA
|-
|J9 pin 15
|3.3V
|
|-
|J9 pin 16
|U1 p30
|(unkown function)
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
5fbd95de3e109ff3f47abf46091417618319ed87
6363
6362
2018-02-06T20:22:42Z
Codeasm
2480
Added U2 detail, not much, only serial pins
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
| 0
| U2
| unpopulated DIP24 MCU(?)
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U1 SMsC LPC ic ===
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and ?
|(not finished)
|-
|U1 pin 6,7
|C17(down) and GND
|Both U1 pins yes)
|-
|U1 p24
|J9 pin 3
|LFrame
|-
|U1 p27
|R7
|Pull up (3.3v)
|-
|U1 p29
|J9 pin 1
|LClk
|-
|U1 p30
|J9 pin 16
|(unkown function)
|-
|U1 p40
|GND
|
|-
|U1 p44
|3.3v with C2
|Vcc?
|-
|U1 p45
|R1 (R2 unpopulated)
|Pull down (R2 would be pullup 3.3v)
|-
|U1 p60
|GND
|
|-
|U1 P84
|U3 P8, U2 P18
|RX
|-
|U1 P85
|U3 P6, U2 P17
|TX
|}
=== J9 LPC header===
Not finished
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|J9 pin 1
|U1 p29
|
|-
|J9 pin 2
|GND
|
|-
|J9 pin 3
|U1 p24
|LFrame
|-
|J9 pin 4
|NC
|no pin
|-
|J9 pin 5
|
|RST
|-
|J9 pin 6
|C12(e),C13(S),C15(S),U3 p11.
|5V
|-
|J9 pin 7
|
|LAD3
|-
|J9 pin 8
|
|LAD2
|-
|J9 pin 9
|3.3V
|
|-
|J9 pin 10
|
|LAD1
|-
|J9 pin 11
|
|LAD0
|-
|J9 pin 12
|GND
|
|-
|J9 pin 13
|U1 p104
|SCL
|-
|J9 pin 14
|U1 p103
|SDA
|-
|J9 pin 15
|3.3V
|
|-
|J9 pin 16
|U1 p30
|(unkown function)
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
48776d81b2c5f1d80eace09d0ebad9f82b6e4485
6364
6363
2018-02-13T06:22:45Z
Ernegien
2491
/* J9 LPC header */
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
| 0
| U2
| unpopulated DIP24 MCU(?)
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U1 SMsC LPC ic ===
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and ?
|(not finished)
|-
|U1 pin 6,7
|C17(down) and GND
|Both U1 pins yes)
|-
|U1 p24
|J9 pin 3
|LFrame
|-
|U1 p27
|R7
|Pull up (3.3v)
|-
|U1 p29
|J9 pin 1
|LClk
|-
|U1 p30
|J9 pin 16
|(unkown function)
|-
|U1 p40
|GND
|
|-
|U1 p44
|3.3v with C2
|Vcc?
|-
|U1 p45
|R1 (R2 unpopulated)
|Pull down (R2 would be pullup 3.3v)
|-
|U1 p60
|GND
|
|-
|U1 P84
|U3 P8, U2 P18
|RX
|-
|U1 P85
|U3 P6, U2 P17
|TX
|}
=== J9 LPC header===
NOTE: version 1.3+ motherboards are missing the LFRAME signal which will need to be generated by an external CPLD [https://www.reddit.com/r/originalxbox/comments/7uo3lq/got_an_xbox_for_free_dvd_tray_wont_stop_ejecting/dtmqmn3/]
NOTE: version 1.5 motherboards are missing pins 2 (GND) and 9 (VCC3), and pins 12 (GND) and 15 (VCC3) haven't been confirmed to work correctly{{citation needed}}
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 1
| LCLK
| Output
| PCI clock
| U1 29
|
|-
| 2
| VSS
| Power
| System ground
| (see
other parts)
|
|-
| 3
| LFRAME#
| Output
| Frame signal
| U1 24
| Indicates start of a new cycle
and termination of broken cycle.
|-
| 4
| ---
| ---
| ---
| ---
| Voided to ensure correct ribbon
cable alignment.
|-
| 5
| LRST#
| Output
| PCI reset
| U1 26
| Used as LPC interface reset.
|-
| 6
| VCC5
| Power
| 5V power supply
| (see
other parts)
| C12(e), C13(S), C15(S), U3 Pin
11
|-
| 7
| LAD3
| I/O
| LPC address/data bus
| U1 23
| Multiplexed command, address and
data bus.
|-
| 8
| LAD2
| I/O
| LPC address/data bus
| U1 22
| Multiplexed command, address and
data bus.
|-
| 9
| VCC3
| Power
| 3.3V power supply
| (see
other parts)
|
|-
| 10
| LAD1
| I/O
| LPC address/data bus
| U1 21
| Multiplexed command, address and
data bus.
|-
| 11
| LAD0
| I/O
| LPC address/data bus
| U1 20
| Multiplexed command, address and
data bus.
|-
| 12
| VSS
| Power
| System ground
| (see
other parts)
|
|-
| 13
| SCL
| I/O
| SMBus clock signal
| U1 104
|
|-
| 14
| SDA
| I/O
| SMBus data signal
| U1 103
|
|-
| 15
| VCC3
| Power
| 3.3V power supply
| (see
other parts)
| Intended to be used for external
IO board
|-
| 16
| L_SER_IRQ
| Input
| Serial interrupt requests
| U1 30
| Provides a serial interrupt
request line for mouse/keyboard implementations of the IO board.
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
32ee15b8efe3828bb74d11a4cb2119393136f9e4
6365
6364
2018-02-13T06:25:07Z
Ernegien
2491
/* J9 LPC header */
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
| 0
| U2
| unpopulated DIP24 MCU(?)
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U1 SMsC LPC ic ===
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and ?
|(not finished)
|-
|U1 pin 6,7
|C17(down) and GND
|Both U1 pins yes)
|-
|U1 p24
|J9 pin 3
|LFrame
|-
|U1 p27
|R7
|Pull up (3.3v)
|-
|U1 p29
|J9 pin 1
|LClk
|-
|U1 p30
|J9 pin 16
|(unkown function)
|-
|U1 p40
|GND
|
|-
|U1 p44
|3.3v with C2
|Vcc?
|-
|U1 p45
|R1 (R2 unpopulated)
|Pull down (R2 would be pullup 3.3v)
|-
|U1 p60
|GND
|
|-
|U1 P84
|U3 P8, U2 P18
|RX
|-
|U1 P85
|U3 P6, U2 P17
|TX
|}
=== J9 LPC header===
NOTE: version 1.3+ motherboards are missing the LFRAME signal which will need to be generated by an external CPLD [https://www.reddit.com/r/originalxbox/comments/7uo3lq/got_an_xbox_for_free_dvd_tray_wont_stop_ejecting/dtmqmn3/]
NOTE: version 1.5 motherboards are missing pins 2 (GND) and 9 (VCC3), and pins 12 (GND) and 15 (VCC3) haven't been confirmed to work correctly{{citation needed}}
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 1
| LCLK
| Output
| PCI clock
| U1 29
|
|-
| 2
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 3
| LFRAME#
| Output
| Frame signal
| U1 24
| Indicates start of a new cycle and termination of broken cycle.
|-
| 4
| ---
| ---
| ---
| ---
| Voided to ensure correct ribbon cable alignment.
|-
| 5
| LRST#
| Output
| PCI reset
| U1 26
| Used as LPC interface reset.
|-
| 6
| VCC5
| Power
| 5V power supply
| (see other parts)
| C12(e), C13(S), C15(S), U3 11
|-
| 7
| LAD3
| I/O
| LPC address/data bus
| U1 23
| Multiplexed command, address and data bus.
|-
| 8
| LAD2
| I/O
| LPC address/data bus
| U1 22
| Multiplexed command, address and data bus.
|-
| 9
| VCC3
| Power
| 3.3V power supply
| (see other parts)
|
|-
| 10
| LAD1
| I/O
| LPC address/data bus
| U1 21
| Multiplexed command, address and data bus.
|-
| 11
| LAD0
| I/O
| LPC address/data bus
| U1 20
| Multiplexed command, address and data bus.
|-
| 12
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 13
| SCL
| I/O
| SMBus clock signal
| U1 104
|
|-
| 14
| SDA
| I/O
| SMBus data signal
| U1 103
|
|-
| 15
| VCC3
| Power
| 3.3V power supply
| (see other parts)
| Intended to be used for external IO board
|-
| 16
| L_SER_IRQ
| Input
| Serial interrupt requests
| U1 30
| Provides a serial interrupt request line for mouse/keyboard implementations of the IO board.
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [http://imgur.com/a/vJi9E Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
91a19f564b672deb4d5dbb3b48a06a8663b55324
6366
6365
2018-02-13T06:30:40Z
Ernegien
2491
/* Related links */
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
| 0
| U2
| unpopulated DIP24 MCU(?)
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U1 SMsC LPC ic ===
{| class="wikitable"
!| Pin
! to pin
! Note
|-
|U1 pin 18
|C17(up) and ?
|(not finished)
|-
|U1 pin 6,7
|C17(down) and GND
|Both U1 pins yes)
|-
|U1 p24
|J9 pin 3
|LFrame
|-
|U1 p27
|R7
|Pull up (3.3v)
|-
|U1 p29
|J9 pin 1
|LClk
|-
|U1 p30
|J9 pin 16
|(unkown function)
|-
|U1 p40
|GND
|
|-
|U1 p44
|3.3v with C2
|Vcc?
|-
|U1 p45
|R1 (R2 unpopulated)
|Pull down (R2 would be pullup 3.3v)
|-
|U1 p60
|GND
|
|-
|U1 P84
|U3 P8, U2 P18
|RX
|-
|U1 P85
|U3 P6, U2 P17
|TX
|}
=== J9 LPC header===
NOTE: version 1.3+ motherboards are missing the LFRAME signal which will need to be generated by an external CPLD [https://www.reddit.com/r/originalxbox/comments/7uo3lq/got_an_xbox_for_free_dvd_tray_wont_stop_ejecting/dtmqmn3/]
NOTE: version 1.5 motherboards are missing pins 2 (GND) and 9 (VCC3), and pins 12 (GND) and 15 (VCC3) haven't been confirmed to work correctly{{citation needed}}
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 1
| LCLK
| Output
| PCI clock
| U1 29
|
|-
| 2
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 3
| LFRAME#
| Output
| Frame signal
| U1 24
| Indicates start of a new cycle and termination of broken cycle.
|-
| 4
| ---
| ---
| ---
| ---
| Voided to ensure correct ribbon cable alignment.
|-
| 5
| LRST#
| Output
| PCI reset
| U1 26
| Used as LPC interface reset.
|-
| 6
| VCC5
| Power
| 5V power supply
| (see other parts)
| C12(e), C13(S), C15(S), U3 11
|-
| 7
| LAD3
| I/O
| LPC address/data bus
| U1 23
| Multiplexed command, address and data bus.
|-
| 8
| LAD2
| I/O
| LPC address/data bus
| U1 22
| Multiplexed command, address and data bus.
|-
| 9
| VCC3
| Power
| 3.3V power supply
| (see other parts)
|
|-
| 10
| LAD1
| I/O
| LPC address/data bus
| U1 21
| Multiplexed command, address and data bus.
|-
| 11
| LAD0
| I/O
| LPC address/data bus
| U1 20
| Multiplexed command, address and data bus.
|-
| 12
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 13
| SCL
| I/O
| SMBus clock signal
| U1 104
|
|-
| 14
| SDA
| I/O
| SMBus data signal
| U1 103
|
|-
| 15
| VCC3
| Power
| 3.3V power supply
| (see other parts)
| Intended to be used for external IO board
|-
| 16
| L_SER_IRQ
| Input
| Serial interrupt requests
| U1 30
| Provides a serial interrupt request line for mouse/keyboard implementations of the IO board.
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [https://imgur.com/a/ROMYa Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
96cde1200fb7161b8e66030220acaacda39cec58
6367
6366
2018-02-13T07:26:50Z
Ernegien
2491
/* U1 SMsC LPC ic */
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
| 0
| U2
| unpopulated DIP24 MCU(?)
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U1 SMsC LPC ic ===
Still lots to fill out here, but all connections required for kernel debugging via null-modem cable tied to TX/RX/GND have been accounted for.
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 6
| CLKI32
| Input
| 32.768kHz trickle clock input
| GND (C17)
| Disabled via GND
|-
| 7
| VSS
| Power
| Ground
| GND (C17)
|
|-
| 18
| VTR
| Power
| 3.3V standby voltage
| C17 bypass to 3.3V
| Connected to VCC because no wakeup functionality is required
|-
| 19
| CLOCKI
| Input
| 14.318MHz clock input
| Y2 3
|
|-
| 20
| LAD0
| I/O
| LPC address/data bus
| J9 11
| Multiplexed command, address and data bus.
|-
| 21
| LAD1
| I/O
| LPC address/data bus
| J9 10
| Multiplexed command, address and data bus.
|-
| 22
| LAD2
| I/O
| LPC address/data bus
| J9 8
| Multiplexed command, address and data bus.
|-
| 23
| LAD3
| I/O
| LPC address/data bus
| J9 7
| Multiplexed command, address and data bus.
|-
| 24
| LFRAME#
| Input
| Frame signal
| J9 3
| Indicates start of a new cycle and termination of broken cycle.
|-
| 26
| PCI_RESET#
| Input
| PCI reset
| J9 5
| Used as LPC interface reset.
|-
| 27
| LPCPD#
| Input
| Power down signal
| R7 (10k) pull-up to 3.3V
| Indicates that it should prepare for power to be shut down on the LPC interface. Tied high relying on PCI_RESET to do its job.
|-
| 29
| PCI_CLK
| Input
| PCI clock
| J9 1
|
|-
| 30
| SER_IRQ
| Output
| Serial interrupt requests
| J9 16
| Provides a serial interrupt request line for mouse/keyboard implementations of the IO board.
|-
| 31
| VSS
| Power
| Ground
| GND
|
|-
| 32
| GP10/J1B1
|
|
| Trace open?
|
|-
| 33
| GP11/J1B2
|
|
| Trace open?
|
|-
| 34
| GP12/J2B1
|
|
| Trace open?
|
|-
| 37
| GP15/J1Y
|
|
| Trace open?
|
|-
| 38
| GP16/J2X
|
|
| Trace open?
|
|-
| 39
| GP17/J2Y
|
|
| Trace open?
|
|-
| 40
| AVSS
| Power
| Analog ground
| GND
|
|-
| 42
| GP21/P16/nDS1
|
|
| Trace open?
|
|-
| 44
| VREF
| Power
| 3.3V reference voltage
| C2 bypass to 3.3V
| 5V or 3.3V used for the game port logic
|-
| 45
| GP24/SYSOPT
|
|
| R1 (10k) pull-down to GND
| Set the configuration base I/O address of 0x2E (R2 would be a pullup to 3.3V with a different configuration address)
|-
| 47
| GP26/MIDI_OUT
|
|
| Trace open?
|
|-
| 49
| GP61/LED2
|
|
| Trace open?
|
|-
| 51
| GP30/FAN_TACH2
|
|
| Trace open?
|
|-
| 53
| VCC
| Power
| 3.3V supply voltage
| C1 bypass to 3.3V
|
|-
| 55
| P33/FAN1
|
|
| Trace open?
|
|-
| 57
| KCLK
|
|
| Trace open?
|
|-
| 59
| MCLK
|
|
| Trace open?
|
|-
| 60
| VSS
| Power
| Ground
| GND
|
|-
| 61
| IRRX2/GP34
|
|
| Trace open?
|
|-
| 65
| VCC
| Power
| 3.3V supply voltage
| C9 bypass to 3.3V
|
|-
| 76
| VSS
| Power
| Ground
| GND (C10)
|
|-
| 84
| RXD1
| Input
|
| U3 8
U2 18
|
|-
| 85
| TXD1
| Output
|
| U3 6
U2 17
|
|-
| 86
| nDSR1
| Input
| Data set ready
| U3 ?
| Optional flow control
|-
| 87
| nRTS1
| Output
| Request to send
| U3 ?
| Optional flow control
|-
| 93
| VCC
| Power
|
| C21 bypass to 3.3V
|
|-
| 95
| RXD2
| Input
|
| Trace open?
|
|-
| 96
| TXD2
| Output
|
| Trace hidden under IC?
|
|-
| 97
| nDSR2
| Input
| Data set ready
| Trace open?
| Optional flow control
|-
| 98
| nRTS2
| Output
| Request to send
| Trace hidden under IC?
| Optional flow control
|-
| 101
| HVSS
| Power
|
| GND
|
|-
| 102
| HVCC
| Power
|
| C24 bypass to 3.3V
|
|-
| 103
| SDA
| I/O
|
| J9 14
|
|-
| 104
| SCLK
| I/O
|
| J9 13
|
|-
| 105
| A0/RESET#
|
|
| R10 (10k) pull-up to 3.3V
|
|-
| 111
| HVCC
| Power
|
| C32 bypass to 3.3V
|
|-
| 112
| HVSS
| Power
|
| GND
|
|-
| 121
| HVCC
| Power
|
| C33 bypass to 3.3V
|
|-
| 122
| HVCC
| Power
|
| C34 bypass to 3.3V
|
|-
| 125
| HVSS
| Power
|
| GND
|
|-
| 126
| HVSS
| Power
|
| GND
|
|-
| 127
| HVSS
| Power
|
| GND
|
|-
| 128
| HVSS
| Power
|
| GND
|
|}
=== J9 LPC header===
NOTE: version 1.3+ motherboards are missing the LFRAME signal which will need to be generated by an external CPLD [https://www.reddit.com/r/originalxbox/comments/7uo3lq/got_an_xbox_for_free_dvd_tray_wont_stop_ejecting/dtmqmn3/]
NOTE: version 1.5 motherboards are missing pins 2 (GND) and 9 (VCC3), and pins 12 (GND) and 15 (VCC3) haven't been confirmed to work correctly{{citation needed}}
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 1
| LCLK
| Output
| PCI clock
| U1 29
|
|-
| 2
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 3
| LFRAME#
| Output
| Frame signal
| U1 24
| Indicates start of a new cycle and termination of broken cycle.
|-
| 4
| ---
| ---
| ---
| ---
| Voided to ensure correct ribbon cable alignment.
|-
| 5
| LRST#
| Output
| PCI reset
| U1 26
| Used as LPC interface reset.
|-
| 6
| VCC5
| Power
| 5V power supply
| (see other parts)
| C12(e), C13(S), C15(S), U3 11
|-
| 7
| LAD3
| I/O
| LPC address/data bus
| U1 23
| Multiplexed command, address and data bus.
|-
| 8
| LAD2
| I/O
| LPC address/data bus
| U1 22
| Multiplexed command, address and data bus.
|-
| 9
| VCC3
| Power
| 3.3V power supply
| (see other parts)
|
|-
| 10
| LAD1
| I/O
| LPC address/data bus
| U1 21
| Multiplexed command, address and data bus.
|-
| 11
| LAD0
| I/O
| LPC address/data bus
| U1 20
| Multiplexed command, address and data bus.
|-
| 12
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 13
| SCL
| I/O
| SMBus clock signal
| U1 104
|
|-
| 14
| SDA
| I/O
| SMBus data signal
| U1 103
|
|-
| 15
| VCC3
| Power
| 3.3V power supply
| (see other parts)
| Intended to be used for external IO board
|-
| 16
| L_SER_IRQ
| Input
| Serial interrupt requests
| U1 30
| Provides a serial interrupt request line for mouse/keyboard implementations of the IO board.
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [https://imgur.com/a/ROMYa Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
0639fb82c7aca94f60095f06d509d7143a41cdf3
6368
6367
2018-02-13T07:43:07Z
Ernegien
2491
/* Schematic */
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
[http://codeasm.com/xbox/images/dvt4/SL734874.JPG Picture of the board]{{FIXME|reason=Contact codeasm, he said he'll search for the non-watermarked pic and put it under a good license}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
| 0
| U2
| unpopulated DIP24 MCU(?)
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U3 MAX223EAI [https://datasheets.maximintegrated.com/en/ds/MAX220-MAX249.pdf] ===
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 1
| T3OUT
|
|
|
|
|-
| 2
| T1OUT
|
|
|
|
|-
| 3
| T2OUT
|
|
|
|
|-
| 4
| R2IN
|
|
|
|
|-
| 5
| R2OUT
|
|
|
|
|-
| 6
| T2IN
|
|
|
|
|-
| 7
| T1IN
|
|
|
|
|-
| 8
| R1OUT
|
|
|
|
|-
| 9
| R1IN
|
|
|
|
|-
| 10
| GND
|
|
|
|
|-
| 11
| VCC
| Power
| 5V supply voltage
| J9 6
|
|-
| 12
| C1+
|
|
|
|
|-
| 13
| V+
|
|
|
|
|-
| 14
| C1-
|
|
|
|
|-
| 15
| T4OUT
|
|
|
|
|-
| 16
| R3IN
|
|
|
|
|-
| 17
| R3OUT
|
|
|
|
|-
| 18
| SHDN
|
|
|
|
|-
| 19
| EN
|
|
|
|
|-
| 20
| R4IN
|
|
|
|
|-
| 21
| R4OUT
|
|
|
|
|-
| 22
| T4IN
|
|
|
|
|-
| 23
| T3IN
|
|
|
|
|-
| 24
| R5OUT
|
|
|
|
|-
| 25
| R5IN
|
|
|
|
|-
| 26
| V-
|
|
|
|
|-
| 27
| C2-
|
|
|
|
|-
| 28
| C2+
|
|
|
|
|}
=== U1 SMsC LPC ic ===
Still lots to fill out here, but all connections required for kernel debugging via null-modem cable tied to TX/RX/GND have been accounted for.
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 6
| CLKI32
| Input
| 32.768kHz trickle clock input
| GND (C17)
| Disabled via GND
|-
| 7
| VSS
| Power
| Ground
| GND (C17)
|
|-
| 18
| VTR
| Power
| 3.3V standby voltage
| C17 bypass to 3.3V
| Connected to VCC because no wakeup functionality is required
|-
| 19
| CLOCKI
| Input
| 14.318MHz clock input
| Y2 3
|
|-
| 20
| LAD0
| I/O
| LPC address/data bus
| J9 11
| Multiplexed command, address and data bus.
|-
| 21
| LAD1
| I/O
| LPC address/data bus
| J9 10
| Multiplexed command, address and data bus.
|-
| 22
| LAD2
| I/O
| LPC address/data bus
| J9 8
| Multiplexed command, address and data bus.
|-
| 23
| LAD3
| I/O
| LPC address/data bus
| J9 7
| Multiplexed command, address and data bus.
|-
| 24
| LFRAME#
| Input
| Frame signal
| J9 3
| Indicates start of a new cycle and termination of broken cycle.
|-
| 26
| PCI_RESET#
| Input
| PCI reset
| J9 5
| Used as LPC interface reset.
|-
| 27
| LPCPD#
| Input
| Power down signal
| R7 (10k) pull-up to 3.3V
| Indicates that it should prepare for power to be shut down on the LPC interface. Tied high relying on PCI_RESET to do its job.
|-
| 29
| PCI_CLK
| Input
| PCI clock
| J9 1
|
|-
| 30
| SER_IRQ
| Output
| Serial interrupt requests
| J9 16
| Provides a serial interrupt request line for mouse/keyboard implementations of the IO board.
|-
| 31
| VSS
| Power
| Ground
| GND
|
|-
| 32
| GP10/J1B1
|
|
| Trace open?
|
|-
| 33
| GP11/J1B2
|
|
| Trace open?
|
|-
| 34
| GP12/J2B1
|
|
| Trace open?
|
|-
| 37
| GP15/J1Y
|
|
| Trace open?
|
|-
| 38
| GP16/J2X
|
|
| Trace open?
|
|-
| 39
| GP17/J2Y
|
|
| Trace open?
|
|-
| 40
| AVSS
| Power
| Analog ground
| GND
|
|-
| 42
| GP21/P16/nDS1
|
|
| Trace open?
|
|-
| 44
| VREF
| Power
| 3.3V reference voltage
| C2 bypass to 3.3V
| 5V or 3.3V used for the game port logic
|-
| 45
| GP24/SYSOPT
|
|
| R1 (10k) pull-down to GND
| Set the configuration base I/O address of 0x2E (R2 would be a pullup to 3.3V with a different configuration address)
|-
| 47
| GP26/MIDI_OUT
|
|
| Trace open?
|
|-
| 49
| GP61/LED2
|
|
| Trace open?
|
|-
| 51
| GP30/FAN_TACH2
|
|
| Trace open?
|
|-
| 53
| VCC
| Power
| 3.3V supply voltage
| C1 bypass to 3.3V
|
|-
| 55
| P33/FAN1
|
|
| Trace open?
|
|-
| 57
| KCLK
|
|
| Trace open?
|
|-
| 59
| MCLK
|
|
| Trace open?
|
|-
| 60
| VSS
| Power
| Ground
| GND
|
|-
| 61
| IRRX2/GP34
|
|
| Trace open?
|
|-
| 65
| VCC
| Power
| 3.3V supply voltage
| C9 bypass to 3.3V
|
|-
| 76
| VSS
| Power
| Ground
| GND (C10)
|
|-
| 84
| RXD1
| Input
|
| U3 8
U2 18
|
|-
| 85
| TXD1
| Output
|
| U3 6
U2 17
|
|-
| 86
| nDSR1
| Input
| Data set ready
| U3 ?
| Optional flow control
|-
| 87
| nRTS1
| Output
| Request to send
| U3 ?
| Optional flow control
|-
| 93
| VCC
| Power
|
| C21 bypass to 3.3V
|
|-
| 95
| RXD2
| Input
|
| Trace open?
|
|-
| 96
| TXD2
| Output
|
| Trace hidden under IC?
|
|-
| 97
| nDSR2
| Input
| Data set ready
| Trace open?
| Optional flow control
|-
| 98
| nRTS2
| Output
| Request to send
| Trace hidden under IC?
| Optional flow control
|-
| 101
| HVSS
| Power
|
| GND
|
|-
| 102
| HVCC
| Power
|
| C24 bypass to 3.3V
|
|-
| 103
| SDA
| I/O
|
| J9 14
|
|-
| 104
| SCLK
| I/O
|
| J9 13
|
|-
| 105
| A0/RESET#
|
|
| R10 (10k) pull-up to 3.3V
|
|-
| 111
| HVCC
| Power
|
| C32 bypass to 3.3V
|
|-
| 112
| HVSS
| Power
|
| GND
|
|-
| 121
| HVCC
| Power
|
| C33 bypass to 3.3V
|
|-
| 122
| HVCC
| Power
|
| C34 bypass to 3.3V
|
|-
| 125
| HVSS
| Power
|
| GND
|
|-
| 126
| HVSS
| Power
|
| GND
|
|-
| 127
| HVSS
| Power
|
| GND
|
|-
| 128
| HVSS
| Power
|
| GND
|
|}
=== J9 LPC header===
NOTE: version 1.3+ motherboards are missing the LFRAME signal which will need to be generated by an external CPLD [https://www.reddit.com/r/originalxbox/comments/7uo3lq/got_an_xbox_for_free_dvd_tray_wont_stop_ejecting/dtmqmn3/]
NOTE: version 1.5 motherboards are missing pins 2 (GND) and 9 (VCC3), and pins 12 (GND) and 15 (VCC3) haven't been confirmed to work correctly{{citation needed}}
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 1
| LCLK
| Output
| PCI clock
| U1 29
|
|-
| 2
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 3
| LFRAME#
| Output
| Frame signal
| U1 24
| Indicates start of a new cycle and termination of broken cycle.
|-
| 4
| ---
| ---
| ---
| ---
| Voided to ensure correct ribbon cable alignment.
|-
| 5
| LRST#
| Output
| PCI reset
| U1 26
| Used as LPC interface reset.
|-
| 6
| VCC5
| Power
| 5V power supply
| (see other parts)
| C12(e), C13(S), C15(S), U3 11
|-
| 7
| LAD3
| I/O
| LPC address/data bus
| U1 23
| Multiplexed command, address and data bus.
|-
| 8
| LAD2
| I/O
| LPC address/data bus
| U1 22
| Multiplexed command, address and data bus.
|-
| 9
| VCC3
| Power
| 3.3V power supply
| (see other parts)
|
|-
| 10
| LAD1
| I/O
| LPC address/data bus
| U1 21
| Multiplexed command, address and data bus.
|-
| 11
| LAD0
| I/O
| LPC address/data bus
| U1 20
| Multiplexed command, address and data bus.
|-
| 12
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 13
| SCL
| I/O
| SMBus clock signal
| U1 104
|
|-
| 14
| SDA
| I/O
| SMBus data signal
| U1 103
|
|-
| 15
| VCC3
| Power
| 3.3V power supply
| (see other parts)
| Intended to be used for external IO board
|-
| 16
| L_SER_IRQ
| Input
| Serial interrupt requests
| U1 30
| Provides a serial interrupt request line for mouse/keyboard implementations of the IO board.
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [https://imgur.com/a/ROMYa Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
dd9219c4873c5d31215c3d97f0ded9228316b0df
USB
0
3789
6369
5650
2018-02-25T12:05:55Z
Codeasm
2480
Unkown if comercialy released. usb webcam
wikitext
text/x-wiki
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
* [[Videochat - Xbox webcam]http://www.eurogamer.net/articles/ss_videochat_x]
ef94463177785310ef5d59ba785dae236995dd07
6370
6369
2018-03-01T19:54:25Z
Codeasm
2480
Added Videochat links
wikitext
text/x-wiki
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
* [Videochat - Xbox webcam http://www.eurogamer.net/articles/ss_videochat_x]
* [Videochat trailer on Xbox-Ism TGS 2004 https://www.youtube.com/watch?v=__6hxTzc8YY]
8f8534728e70a385a26a32d8b8ff00f3c55ec835
6371
6370
2018-03-02T12:50:02Z
Codeasm
2480
Added more detail about the videochat program and its hardware. also hope the links are fixed now.
wikitext
text/x-wiki
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ Xbox Live Video Chat in Japan]
Dvd mediaset number: X10-98754
Xbox cam: X10-71835
[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
66f2af47df85a02e5a2fdefb5dc969e410e1e766
6372
6371
2018-03-02T12:50:24Z
Codeasm
2480
/* Videochat - Xbox Cam */
wikitext
text/x-wiki
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ Xbox Live Video Chat in Japan]
* Dvd mediaset number: X10-98754
* Xbox cam: X10-71835
[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
1c3a9389c2ab1a0b798bccd452640a18bbb5c972
6373
6372
2018-03-02T12:51:54Z
Codeasm
2480
/* Videochat - Xbox Cam */
wikitext
text/x-wiki
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ The Inspiration Room - Xbox Live Video Chat in Japan]
* Dvd mediaset number: X10-98754
* Xbox cam: X10-71835
=== Sources ===
*[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
*[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
*[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
8053a14de3a0976e650dd5cf8edb5db71b2a89f9
Exploits
0
3751
6374
6205
2018-03-04T04:08:51Z
DaveX
2487
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Untested
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
9c8cbb385807861072822a59283dcd3c3972f049
EEPROM
0
3742
6375
6194
2018-03-04T06:59:52Z
Fisherman166
2497
Add read checksum calculation for eeprom reads.
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
const uint32_t num_dwords = section_data_length >> 2;
uint64_t checksum = 0;
uint32_t carry_count = 0;
for(uint32_t loop_count = num_dwords; loop_count > 0; loop_count--) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
add2abb03838eae15e23a345a78987cae227bc74
Talk:LPC Debug Port
1
3910
6376
6302
2018-03-05T13:22:42Z
PatrickvL
2473
added schematic link
wikitext
text/x-wiki
== Photos ==
Photos of the debug port across every revision (top and bottom) would be useful to show how the PCB traces changed over time. A photo showing the location of the port in relation to other components would be nice, too. Perhaps also photos of rebuilt ports and the pads/vias that must be connected. —[[User:Furon|Furon]] ([[User talk:Furon|talk]])
Schematic with discussion : https://www.reddit.com/r/originalxbox/comments/81gluq/found_my_old_lpc_diagram_yesterday/
9fd095138b9d55d3cda6a496f876ae26e35b9ecd
LPC Debug Port
0
3909
6377
6345
2018-03-17T05:44:22Z
KaosEngineer
2482
V1.6 5V always on when AC plugged in. Older revisions this supply voltage was turned on / off with console.
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal.
* '''LCLK''' (2) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
ebb3b14eccc9842aca39d57d55c56c8eb53ce26e
6385
6377
2018-04-11T20:06:04Z
KaosEngineer
2482
LCLK (2) wrong pin changed to (1)
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal.
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
116b4bc8a41ee069900e70df07a4c90962e33f6b
6386
6385
2018-04-11T20:08:40Z
KaosEngineer
2482
pin 9 on 1.6 difference noted ( n/c to 3.3Vdc supply voltage)
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on. (On 1.6 hardware, disconnected reconnect to pin 15 to restore supply voltage.)
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal.
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
d588ede5e88bd2bf60385b198ec218a20d0b766a
6387
6386
2018-04-11T20:09:29Z
KaosEngineer
2482
removed parens to match other lines showing 1.6 hardware difference
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on. On 1.6 hardware, disconnected reconnect to pin 15 to restore supply voltage.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal.
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
dc377fb37e82f6ab5dc521e229564f32bc277b97
Main Page/Header
0
3688
6378
5464
2018-03-24T08:45:29Z
JayFoxRox
2
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
This is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
<hr>
'''Interested? Contact us!'''
This wiki is the place for all remaining Xbox projects to come together.
Please come chat with us in [irc://chat.freenode.net/xqemu #xqemu on Freenode IRC] ([http://webchat.freenode.net?channels=%23xqemu Webchat]), [https://gitter.im/Cxbx-Reloaded/Lobby Cxbx-Reloaded on gitter.im] or the [https://discord.gg/BZTwPNb Discord server about Original Xbox emulation].
You'll also get the details for wiki account creation there.
</div>
</div>
a5599af1f4b243822fcd40a49121f1244b9b58d1
6380
6378
2018-03-24T12:02:54Z
JayFoxRox
2
Make header slightly less confusing
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
This is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
<hr>
'''Want to help? Contact us!'''
This wiki is the place for all remaining Xbox projects to come together.
Please come chat with us in [irc://chat.freenode.net/xqemu #xqemu on Freenode IRC] ([http://webchat.freenode.net?channels=%23xqemu Webchat]), [https://gitter.im/Cxbx-Reloaded/Lobby Cxbx-Reloaded on gitter.im] or the [https://discord.gg/BZTwPNb Discord server about Original Xbox emulation].
You'll also get the details for wiki account creation there.
</div>
</div>
6275e1626604e2ce40556b9e5bae6fb52b1d1575
6381
6380
2018-03-27T10:37:50Z
JayFoxRox
2
the discord has repeatedly made poor administrative decisions in the past. removed, at least temporarily.
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
This is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
<hr>
'''Want to help? Contact us!'''
This wiki is the place for all remaining Xbox projects to come together.
Please come chat with us in [irc://chat.freenode.net/xqemu #xqemu on Freenode IRC] ([http://webchat.freenode.net?channels=%23xqemu Webchat]) or [https://gitter.im/Cxbx-Reloaded/Lobby Cxbx-Reloaded on gitter.im].
You'll also get the details for wiki account creation there.
</div>
</div>
04fbe371b9cc5ffcdc48605206d491f47fdc7087
6382
6381
2018-03-28T03:39:01Z
Mborgerson
2478
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
This is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
<hr>
'''Want to help? Contact us!'''
This wiki is the place for all remaining Xbox projects to come together.
Please come chat with us in [irc://chat.freenode.net/xqemu #xqemu on Freenode IRC] ([http://webchat.freenode.net?channels=%23xqemu Webchat]), [https://discord.gg/WxJPPyz Discord], or [https://gitter.im/Cxbx-Reloaded/Lobby Cxbx-Reloaded on gitter.im].
You'll also get the details for wiki account creation there.
</div>
</div>
92fdc513828945bef94c520560c80b837b7ccaaa
Emulators
0
3703
6379
6273
2018-03-24T08:51:52Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|At the time of writing Cxbx-Reloaded is almost purely HLE. LLE GPU emulation is planned, but currently not implemented.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Windows
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
88c217b1c1c096422112947986fcfc09c0dae6ef
XBDM commands by version
0
3721
6383
5321
2018-03-30T17:49:51Z
Ernegien
2491
wikitext
text/x-wiki
The following table shows the commands available in each version of the [[Xbox Debug Monitor]].
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|- style="font-size: x-small"
!
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | adminpw
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | altaddr
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | authuser
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | boxid
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | break
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | bye
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | capcontrol
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
|-
| style="font-family: monospace; text-align: left" | capctrl
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | continue
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | crashdump
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | d3dopcode
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dbgname
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dbgoptions
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | debugger
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | debugmode
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dedicate
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | deftitle
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | delete
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dirlist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dmversion
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | drivefreespace
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | drivelist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dvdblk
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dvdperf
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | fileeof
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | flash
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | fmtfat
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | funccall
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getd3dstate
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getextcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getfile
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getfileattributes
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getgamma
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getmem
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getmem2
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getpalette
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getpid
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getsum
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getsurf
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getuserpriv
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getutildrvinfo
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | go
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | gpucount
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | halt
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | irtsweep
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | isbreak
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | isdebugger
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | isstopped
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | kd
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | keyxchg
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | lockmode
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | lop
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | magicboot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | memtrack
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | mkdir
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | mmglobal
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modlong
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modsections
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modules
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | nostopon
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | notify
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | notifyat
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pbsnap
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pclist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pdbinfo
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pssnap
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | querypc
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | reboot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | rename
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | resume
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | screenshot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | sendfile
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | servname
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setconfig
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setfileattributes
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setsystime
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setuserpriv
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | signcontent
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | stop
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | stopon
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | suspend
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | sysfileupd
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | systime
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | threadinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | threads
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | title
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | user
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | userlist
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | vssnap
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | walkmem
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | writefile
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | xbeinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | xtlinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
c8fb5469d8505bd9c02a952539968764bb38fdb6
6384
6383
2018-03-30T18:17:52Z
Ernegien
2491
wikitext
text/x-wiki
The following table shows the commands available in each version of the [[Xbox Debug Monitor]].
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | adminpw
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | altaddr
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | authuser
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | boxid
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | break
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | bye
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | capcontrol
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
|-
| style="font-family: monospace; text-align: left" | capctrl
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | continue
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | crashdump
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | d3dopcode
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dbgname
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dbgoptions
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | debugger
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | debugmode
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dedicate
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | deftitle
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | delete
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dirlist
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dmversion
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | drivefreespace
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | drivelist
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dvdblk
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | dvdperf
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | fileeof
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | flash
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | fmtfat
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | funccall
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getd3dstate
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getextcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getfile
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getfileattributes
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getgamma
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getmem
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getmem2
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getpalette
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getpid
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getsum
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getsurf
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getuserpriv
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | getutildrvinfo
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | go
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | gpucount
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | halt
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | irtsweep
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | isbreak
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | isdebugger
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | isstopped
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | kd
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | keyxchg
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | lockmode
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | lop
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | magicboot
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | memtrack
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | mkdir
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | mmglobal
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modlong
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modsections
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | modules
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | nostopon
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | notify
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | notifyat
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pbsnap
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pclist
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pdbinfo
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | pssnap
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | querypc
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | reboot
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | rename
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | resume
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | screenshot
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | sendfile
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | servname
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setconfig
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setcontext
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setfileattributes
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setsystime
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | setuserpriv
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | signcontent
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | stop
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | stopon
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | suspend
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | sysfileupd
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | systime
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | threadinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | threads
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | title
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | user
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | userlist
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | vssnap
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | walkmem
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | writefile
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | xbeinfo
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|-
| style="font-family: monospace; text-align: left" | xtlinfo
| style="background: #F2CECE" | ✗
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
| style="background: #CEF2E0" | ✓
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
43366ea0110b00aa36fd143716f851ba480f5f79
User:ChrisderWahre
2
3947
6388
2018-04-21T15:01:01Z
ChrisderWahre
2498
Created page with "My user page x)"
wikitext
text/x-wiki
My user page x)
3996b201dce91ec8f9e736d7b5bffff766468b12
6389
6388
2018-04-21T18:55:30Z
ChrisderWahre
2498
wikitext
text/x-wiki
== ChrisderWahre ==
Hey, i am a Java, C# and Python Developer from Germany, and i love the original XBox.
0ac8cd18aba5af95fb5a37608c30e6fb45f70176
6390
6389
2018-04-21T20:26:36Z
ChrisderWahre
2498
/* ChrisderWahre */
wikitext
text/x-wiki
== ChrisderWahre ==
Hey, i am a Java, C# and Python Developer from Germany, and i love the original XBox.
Contact me here:
Twitter: @ChrisderWahre
Twitch: ChrisderWahre
Dicord: ChrisderWahre#9694
0afe44cd8c4f080915d9eaf3a1af9437450178ac
Talk:Main Page
1
3744
6391
6204
2018-04-21T20:34:57Z
ChrisderWahre
2498
/* Translation to german */ new section
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
74f1e1a179671c6d2a62ddc94ade7b042c53a7b2
6392
6391
2018-04-22T12:27:01Z
JayFoxRox
2
/* Translation to german */
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
2bc277a6234a3f862ff00ce6418a432693bd7b0b
6394
6392
2018-04-28T01:20:22Z
Mborgerson
2478
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users [MB: agree])
86b89c347bfc6ac53003e98dc947149089e3bd0d
6395
6394
2018-04-28T01:22:14Z
Mborgerson
2478
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
: +1 [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 18:22, 27 April 2018 (PDT)
aafde7cc4dda8e4cc62dcf696d6ddc36c5e317b9
User:JayFoxRox
2
3948
6393
2018-04-22T13:07:46Z
JayFoxRox
2
Created page with "For contact details, see http://jannikvogel.de/"
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
29cffee1c8e0705a204e0e726d308ae4afe0229a
Hardware Revisions
0
3669
6396
6282
2018-04-28T18:04:22Z
DarkGabbz
2486
Added Xbox 1.3 Hardware changes
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0)
* Philips (Xbox 1.2)
* Samsung (Xbox 1.3)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
a5cd37f553b1db685073d19bb947986731bc103e
6397
6396
2018-04-28T18:06:06Z
DarkGabbz
2486
/* DVD Drive */
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
b2e94acddc99c5d6b9f34feebe21e7d28097f578
6398
6397
2018-04-28T18:07:20Z
DarkGabbz
2486
/* Serial Number */
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001-10/2002 || 1.0 || Hungary
|-
| 11/2002-04/2003 || 1.1 || Hungary, Mexico
|-
| 05/2003-03/2004 || 1.2 || China
|-
| 04/2004 Onward || 1.6 || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
8cafa47f7e7941386611adc936f3ad04b11d34f3
Hardware Revisions
0
3669
6399
6398
2018-04-28T18:15:38Z
DarkGabbz
2486
/* Manufacturing Details */
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
* Xbox 1.5
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
dbdb7524d802994332ddb8d9dae5a50493219b4b
6407
6399
2018-05-14T21:04:15Z
DarkGabbz
2486
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Switched to Focus Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
ff69c97a16db18d3fee173cf862f31475b4fb8f1
6408
6407
2018-05-14T21:05:24Z
DarkGabbz
2486
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
** New MCPX revision 1.1
* Xbox 1.2
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Switched to Focus Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
cbde451f53d08e91685fac3fd5ea3c519573752d
6409
6408
2018-05-14T21:06:07Z
DarkGabbz
2486
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Switched to Focus Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
ff69c97a16db18d3fee173cf862f31475b4fb8f1
6410
6409
2018-05-14T21:06:18Z
DarkGabbz
2486
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.2 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
a4f95ef0626915c3fb30d3eb6cec589e40696456
6422
6410
2018-05-26T22:45:27Z
DarkGabbz
2486
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G ?
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
87243df8258c751de8cf08f8ffcfb1442466124f
User:DarkGabbz
2
3949
6400
2018-04-28T18:52:05Z
DarkGabbz
2486
Created page with "This is a page."
wikitext
text/x-wiki
This is a page.
c65a8c44ad64bd588239c546f006bcd93e10142f
6401
6400
2018-04-30T20:19:04Z
DarkGabbz
2486
wikitext
text/x-wiki
Xbox dude from germany nothing more nothing less.
5be26bdc270b79bd1b348b9cd557ef500912eff7
LPC Debug Port
0
3909
6402
6387
2018-04-30T21:36:56Z
DarkGabbz
2486
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | - || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on. On 1.6 hardware, disconnected reconnect to pin 15 to restore supply voltage.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal. On 1.3-1.5 hardware, disconnected.
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
61878523be7bc8a732fa05d48b68883479d19427
6420
6402
2018-05-25T16:45:13Z
Furon
2477
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | SERIRQ (v1.0) || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on. On 1.6 hardware, disconnected reconnect to pin 15 to restore supply voltage.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal. On 1.3-1.5 hardware, disconnected.
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
78d610c5f00d0b08081a1124828d678ee0875bcc
Network
0
3692
6403
5919
2018-05-03T19:33:17Z
Codeasm
2480
Added official Xbox wireless adapter MN-740 details
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventualy an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
=== Wireless adapter ===
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox install disk (wich would update the dashboard if nececairy).
==== hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
==== Firmware ====
The shipped firmware does not support WPA or WPA2.
An "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings requirs connecting to the LAN port using a PC (or webbrowser capable application).
The runs closed source "ThreadX JADE/Green Hills Version G4.0.4.0" RTOS
and the firmware holds a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf: Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx: Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
06bbac0c3b63d11dae83a5746ba1e6595729f2ba
6404
6403
2018-05-03T19:35:13Z
Codeasm
2480
/* Firmware */ Spelling and wording mistake, me grammar much?
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventualy an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
=== Wireless adapter ===
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox install disk (wich would update the dashboard if nececairy).
==== hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
==== Firmware ====
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf: Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx: Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
91075788a4b3a69ac054024833aab46e073d2c38
6405
6404
2018-05-03T19:39:55Z
Codeasm
2480
/* References and links */ fcc entry for Xbox MN-740 Wireless Adapter
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventualy an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
=== Wireless adapter ===
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox install disk (wich would update the dashboard if nececairy).
==== hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
==== Firmware ====
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf: Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx: Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
80c20d1e068b076b81b5f6193b244bf0bf1bf552
6406
6405
2018-05-04T02:02:33Z
JayFoxRox
2
Fix links
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventualy an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
=== Wireless adapter ===
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox install disk (wich would update the dashboard if nececairy).
==== hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
==== Firmware ====
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
624b2eab46e46a5150f4f5834e81d4fc36a3993a
Main Page
0
1
6411
6340
2018-05-21T10:33:29Z
DarkGabbz
2486
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[Network|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
e3deb4df04ec00d750ef131a3266e4015fd63a34
6412
6411
2018-05-22T21:35:13Z
DarkGabbz
2486
wikitext
text/x-wiki
{{:Main Page/Header}}
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
806e4febbed0e30158506aefd0b6a823730b1909
6435
6412
2018-06-21T17:35:31Z
JayFoxRox
2
Remove TOC from frontpage
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
7187001c5a5d5662f370c95aa9f07a3d45554f84
Category:Fileformats
14
3950
6413
2018-05-24T19:23:35Z
DarkGabbz
2486
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Xbe
0
3706
6414
5935
2018-05-24T19:27:43Z
DarkGabbz
2486
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Xbox Alpha executable format==
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
a4f88c959f0370ac328c0127d5d9963cdadc114e
Xtf
0
3831
6415
6222
2018-05-24T19:28:33Z
DarkGabbz
2486
wikitext
text/x-wiki
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] for use in the Xbox [[Dashboard]] as well as for promotional materials.
The XTF versions of these fonts contain 7365 glyphs each.
=== Xbox.xtf ===
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
The mesh data is stored as triangle list. 3 indices per triangle.
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/JayFoxRox/xbox-tools/tree/master/xtf-converter A tool to convert XTF fonts to SVG fonts]
[[Category:Fileformats]]
11ac458aaac8db7707af6eae7c93a7f518c5fc07
Xpr
0
3951
6416
2018-05-24T19:30:31Z
DarkGabbz
2486
Created page with "[[Category:Fileformats]]"
wikitext
text/x-wiki
[[Category:Fileformats]]
2d487b4213e3a6d142917f647f6d0fc4f0c66d70
6418
6416
2018-05-24T19:32:08Z
DarkGabbz
2486
wikitext
text/x-wiki
[[Category:Fileformats]]
This is a dummy page
c5db37b9920d4fd581c00f5874618c6ceb39c78f
Xbx
0
3952
6417
2018-05-24T19:31:23Z
DarkGabbz
2486
Created page with "[[Category:Fileformats]]"
wikitext
text/x-wiki
[[Category:Fileformats]]
2d487b4213e3a6d142917f647f6d0fc4f0c66d70
6419
6417
2018-05-24T19:32:19Z
DarkGabbz
2486
wikitext
text/x-wiki
[[Category:Fileformats]]
This is a dummy page
c5db37b9920d4fd581c00f5874618c6ceb39c78f
System Management Controller
0
3748
6421
6355
2018-05-26T14:03:59Z
DarkGabbz
2486
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
It is also the hardware which is connected to the Power and Eject buttons.
The PIC is running at 20 MHz with its own ROM, RAM and I/O lines.
The PIC is always running, even if the Xbox is turned off. When the power cable is unplugged, it gets its energy from a capacitor for some hours.
It is connected via I²C and located on address 0x10.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
* P11
* P2L{{citation needed}}
* D01 (Seen in a debug kit)
* D05 (seen in a earlier model chihiro)
d557f04c0c6ebf29b20235216354f6a5b4b6c85f
AV Cables
0
3817
6423
5910
2018-06-02T08:20:52Z
ColonelPanic
2500
/* Pinout */ Fixed tables per fixme request. Added interpretation of tables.
wikitext
text/x-wiki
Microsoft released a handful of AV packs for the Xbox. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
The following table gives the pins in the way they are arranged on the female end of the '''XBOX AVIP''' cables. The male end is reversed and on the console.
{| class="wikitable"
!Description
|Audio Right
|Audio Right GND
|SPDIF Digital Audio
|V-Sync (VGA Mode)
|Mode GND
|Mode GND
|Mode GND
|GND
|Variable
|9 GND
|Variable
|11 GND
|-
!Pin
!1
!2
!3
!4
!5
!6
!7
!8
!9
!10
!11
!12
|-
!Pin
!13
!14
!15
!16
!17
!18
!19
!20
!21
!22
!23
!24
|-
!Description
|Vcc
|Audio Left
|Audio Left GND
|H Sync (VGA Mode)
|Mode Select 1
|Mode Select 2
|Mode Select 3
|(+12V)
|22 GND
|Variable
|24 GND
|Variable
|}
== Supported signals / AV cables ==
Below is a table which lists all known officially AV cables released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! 19 || 18 || 17 || SMC Constant || Region || Official Microsoft product name
! Signal || 24 || 22 || 11 || 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || PAL || [https://web.archive.org/web/20040216131316/http://www.xbox.com:80/en-gb/hardware/scartcable.htm Advanced SCART Cable]
| SCART (15 kHz RGB) Stereo || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || NTSC || [https://web.archive.org/web/20040210040422/http://www.xbox.com:80/en-US/hardware/highdefinitionavpack.htm High Definition AV Pack]
| Component SPDIF || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || - || ''Not officially available / supported''
| VGA (31 kHz RGB) Stereo || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || NTSC / PAL || [https://web.archive.org/web/20040319001330/http://www.xbox.com:80/en-us/hardware/rfadapter.htm RF Adapter]
| RF Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || NTSC || [https://web.archive.org/web/20040319001247/http://www.xbox.com:80/en-us/hardware/advancedavpack.htm Advanced AV Pack]
| S-Video Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || - || ''Not officially available / supported''
| Unknown Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || PAL || [https://web.archive.org/web/20040216130745/http://www.xbox.com:80/en-gb/hardware/avcable.htm Standard AV Cable]
| Composite Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || - || ''No cable connected''
| - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation needed|reason=Are these still connected to Vcc maybe?}}
The region only identifies which territory the cable was originally available / intended for. The kernel still might support other video-standards (NTSC / PAL / SECAM) using the same cable.
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm List of signals and pinout]
bfa26f781870f2fa28f61f44032fea36483bfb2b
6424
6423
2018-06-02T12:49:05Z
ColonelPanic
2500
Removed Male and Female Designations. Plus more cleanup.
wikitext
text/x-wiki
Microsoft has released a handful of '''Audio Video Cables''' for the [[Xbox]], which they refer to internally as '''AV Packs'''. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
The following table gives the pinout in the way it is are arranged on the '''XBOX AVIP''' cables, or '''AV Packs'''. The other end is reversed and on the console.
{| class="wikitable"
!Description
|Audio Right
|Audio Right GND
|SPDIF Digital Audio
|V-Sync (VGA Mode)
|Mode GND
|Mode GND
|Mode GND
|GND
|Variable
|9 GND
|Variable
|11 GND
|-
!Pin
!1
!2
!3
!4
!5
!6
!7
!8
!9
!10
!11
!12
|-
!Pin
!13
!14
!15
!16
!17
!18
!19
!20
!21
!22
!23
!24
|-
!Description
|Vcc
|Audio Left
|Audio Left GND
|H Sync (VGA Mode)
|Mode Select 1
|Mode Select 2
|Mode Select 3
|(+12V)
|22 GND
|Variable
|24 GND
|Variable
|}
== Supported signals / AV cables ==
Below is a table which lists all known officially '''AV cables''' released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! 19 || 18 || 17 || SMC Constant || Region || Official Microsoft product name
! Signal || 24 || 22 || 11 || 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || PAL || [https://web.archive.org/web/20040216131316/http://www.xbox.com:80/en-gb/hardware/scartcable.htm Advanced SCART Cable]
| SCART (15 kHz RGB) Stereo || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || NTSC || [https://web.archive.org/web/20040210040422/http://www.xbox.com:80/en-US/hardware/highdefinitionavpack.htm High Definition AV Pack]
| Component SPDIF || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || - || ''Not officially available / supported''
| VGA (31 kHz RGB) Stereo || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || NTSC / PAL || [https://web.archive.org/web/20040319001330/http://www.xbox.com:80/en-us/hardware/rfadapter.htm RF Adapter]
| RF Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || NTSC || [https://web.archive.org/web/20040319001247/http://www.xbox.com:80/en-us/hardware/advancedavpack.htm Advanced AV Pack]
| S-Video Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || - || ''Not officially available / supported''
| Unknown Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || PAL || [https://web.archive.org/web/20040216130745/http://www.xbox.com:80/en-gb/hardware/avcable.htm Standard AV Cable]
| Composite Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || - || ''No cable connected''
| - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation needed|reason=Are these still connected to Vcc maybe?}}
The region only identifies which territory the cable was originally available / intended for. The kernel still might support other video-standards (NTSC / PAL / SECAM) using the same cable.
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm GamesX List of signals and pinout]
* [https://assemblergames.com/attachments/xboxavippinouttr0-png.13081/ ASSEMBLERgames XBOX AV pinout]
* [http://ucon64.sourceforge.net/ucon64misc/conn.html uCON64 Connectors]
e21fedd9e1f338204e1367129a3d3e85cb70ddaf
6441
6424
2018-06-21T18:52:55Z
JayFoxRox
2
/* Supported signals / AV cables */
wikitext
text/x-wiki
Microsoft has released a handful of '''Audio Video Cables''' for the [[Xbox]], which they refer to internally as '''AV Packs'''. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
The following table gives the pinout in the way it is are arranged on the '''XBOX AVIP''' cables, or '''AV Packs'''. The other end is reversed and on the console.
{| class="wikitable"
!Description
|Audio Right
|Audio Right GND
|SPDIF Digital Audio
|V-Sync (VGA Mode)
|Mode GND
|Mode GND
|Mode GND
|GND
|Variable
|9 GND
|Variable
|11 GND
|-
!Pin
!1
!2
!3
!4
!5
!6
!7
!8
!9
!10
!11
!12
|-
!Pin
!13
!14
!15
!16
!17
!18
!19
!20
!21
!22
!23
!24
|-
!Description
|Vcc
|Audio Left
|Audio Left GND
|H Sync (VGA Mode)
|Mode Select 1
|Mode Select 2
|Mode Select 3
|(+12V)
|22 GND
|Variable
|24 GND
|Variable
|}
== Supported signals / AV cables ==
Below is a table which lists all known officially '''AV cables''' released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! Pin 19 || Pin 18 || Pin 17 || SMC Constant || Region || Official Microsoft product name
! Signal || Pin 24 || Pin 22 || Pin 11 || Pin 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || PAL || [https://web.archive.org/web/20040216131316/http://www.xbox.com:80/en-gb/hardware/scartcable.htm Advanced SCART Cable]
| SCART (15 kHz RGB) Stereo || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || NTSC || [https://web.archive.org/web/20040210040422/http://www.xbox.com:80/en-US/hardware/highdefinitionavpack.htm High Definition AV Pack]
| Component SPDIF || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || - || ''Not officially available / supported''
| VGA (31 kHz RGB) Stereo || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || NTSC / PAL || [https://web.archive.org/web/20040319001330/http://www.xbox.com:80/en-us/hardware/rfadapter.htm RF Adapter]
| RF Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || NTSC || [https://web.archive.org/web/20040319001247/http://www.xbox.com:80/en-us/hardware/advancedavpack.htm Advanced AV Pack]
| S-Video Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || - || ''Not officially available / supported''
| Unknown Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || PAL || [https://web.archive.org/web/20040216130745/http://www.xbox.com:80/en-gb/hardware/avcable.htm Standard AV Cable]
| Composite Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || - || ''No cable connected''
| - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation needed|reason=Are these still connected to Vcc maybe?}}
The region only identifies which territory the cable was originally available / intended for. The kernel still might support other video-standards (NTSC / PAL / SECAM) using the same cable.
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm GamesX List of signals and pinout]
* [https://assemblergames.com/attachments/xboxavippinouttr0-png.13081/ ASSEMBLERgames XBOX AV pinout]
* [http://ucon64.sourceforge.net/ucon64misc/conn.html uCON64 Connectors]
9e0d0646a8dc93c05c85d3a6313cec54e3d350a0
Category:Games
14
3719
6425
5293
2018-06-02T22:26:06Z
ColonelPanic
2500
Added some external resources
wikitext
text/x-wiki
This page only contains games that the XboxDevWiki currently has entries for.<br/>You may also be interested in the following resources.
*[https://en.wikipedia.org/wiki/List_of_Xbox_games Wikipedia's List of XBOX Games]
*[https://en.wikipedia.org/wiki/List_of_Xbox_games_with_alternate_display_modes Wikipedia's List of XBOX Games With Alternate Display Modes]
*[https://en.wikipedia.org/wiki/List_of_Xbox_network_games Wikipedia's List of XBOX Network Games]
c1ce0dbe1431681926cd8161bb00e8657baa6c30
6426
6425
2018-06-02T22:30:47Z
ColonelPanic
2500
One More for Chihiro
wikitext
text/x-wiki
This page only contains games that the XboxDevWiki currently has entries for.<br/>You may also be interested in the following resources.
*[https://en.wikipedia.org/wiki/List_of_Xbox_games Wikipedia's List of XBOX Games]
*[https://en.wikipedia.org/wiki/List_of_Xbox_games_with_alternate_display_modes Wikipedia's List of XBOX Games With Alternate Display Modes]
*[https://en.wikipedia.org/wiki/List_of_Xbox_network_games Wikipedia's List of XBOX Network Games]
*[https://en.wikipedia.org/wiki/List_of_Sega_arcade_video_games#Chihiro Wikipedia's List of Sega Arcade Video Games (Chihiro)]
8a7c8fcc22f8106398ec95b7080d96005fec6582
File:SBC.jpg
6
3953
6427
2018-06-20T13:31:59Z
Jackchentwkh
2501
SteelBattalion Controller Layout
wikitext
text/x-wiki
SteelBattalion Controller Layout
554778044710e67e099945b07c126122cf761cc2
6432
6427
2018-06-21T16:54:28Z
JayFoxRox
2
wikitext
text/x-wiki
Steel Battalion Controller Layout
a6ee4eb2cda6dbf4bf71746fdd73ac08d8703beb
6433
6432
2018-06-21T17:00:58Z
JayFoxRox
2
JayFoxRox uploaded a new version of [[File:SBC.jpg]]
wikitext
text/x-wiki
Steel Battalion Controller Layout
a6ee4eb2cda6dbf4bf71746fdd73ac08d8703beb
Xbox Input Devices
0
11
6428
6182
2018-06-20T13:33:33Z
Jackchentwkh
2501
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
Controller Layout
[[File:SBC.jpg]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03
|FIXME: WTF?! Mask might be bad?
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
d343fdffb6b4e2584cb09e06c9e609d621ccc0e6
6429
6428
2018-06-21T15:00:25Z
JayFoxRox
2
Switched to thumbnail for controller layout, improved FIXME for potentially bad mask
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
==== Controller to Xbox ====
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
==== Xbox to Controller ====
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
326ec4d7ee2b9fdbb9927ad3804bdc84f722230a
Talk:Xbox Input Devices
1
3954
6430
2018-06-21T15:05:12Z
JayFoxRox
2
Created page with "== Split controllers into seperate articles == This article is getting pretty long. It probably makes sense to have a seperate article for each (potentially grouping or redir..."
wikitext
text/x-wiki
== Split controllers into seperate articles ==
This article is getting pretty long. It probably makes sense to have a seperate article for each (potentially grouping or redirecting some).
This change is largely motivated by the more unique ones like the Steel Battalion Controller, where we can show images and explain more about the internals if necessary.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 21 June 2018 (PDT)
2eb7b85d5cb54afb2e0408e8929c12a58b53cf4c
File talk:SBC.jpg
7
3955
6431
2018-06-21T15:10:14Z
JayFoxRox
2
Minor complaints
wikitext
text/x-wiki
== Minor complaints ==
Cool image, just some minor complaints which can potentially be fixed in the future:
* Image not cropped / centered
* Comment should say where this file originated (I assume a manual scan?)
* Bottom of image is cut-off
* Small vertical seam near center
* Different font for "Override", why?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:10, 21 June 2018 (PDT)
64f7c566f7f78530d553fc6a8c230d1607b034b1
6434
6431
2018-06-21T17:06:20Z
JayFoxRox
2
/* Minor complaints */
wikitext
text/x-wiki
== Minor complaints ==
Cool image, just some minor complaints which can potentially be fixed in the future:
* <s>Image not cropped / centered</s>
* <s>Comment should say where this file originated (I assume a manual scan?)</s>
* <s>Bottom of image is cut-off</s>
* <s>Small vertical seam near center</s>
* <s>Different font for "Override", why?</s>
Upgraded.
The font is probably due to a bug in the original manual. I have a different version of the manual where this text says "OVER DRIVE". The font in the fixed manual where it says "OVERRIDE" is also weird. So they probably just drew over the original with whatever font they had.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:10, 21 June 2018 (PDT)
17fbc33f3c89835e47e139c2b0bdd8788b45466c
Talk:Main Page
1
3744
6436
6395
2018-06-21T18:12:16Z
JayFoxRox
2
/* MediaWiki upgrade and plugins */ new section
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
: +1 [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 18:22, 27 April 2018 (PDT)
== MediaWiki upgrade and plugins ==
It would be nice if the MediaWiki was upgraded to 1.31
In addition, I'd like to see these extensions:
* https://www.mediawiki.org/wiki/Extension:SyntaxHighlight so we finally get good code display. This wiki is getting more and more code.
* https://www.mediawiki.org/wiki/Extension:Math to display formulas nicely.
* https://www.mediawiki.org/wiki/Extension:ImageMap to create block diagrams, although we might need a more feature rich extension in the future.
* https://www.mediawiki.org/wiki/Extension:EasyTimeline might be useful for Xbox production timeline etc.
* https://www.mediawiki.org/wiki/Extension:RevisionSlider Make it easier to compare revisions.
Note that some of these extensions should have been included in the mediawiki version we use. I'm not sure how our mediawiki was installed or if we might dependencies.
And possibly these (not sure):
* https://www.mediawiki.org/wiki/Extension:TemplateStyles to handle style changes for special pages such as the main-page, and making it easier to add good looking content / giving users more freedom. (This might be a security risk and could potentially be handled with templates instead)
* https://www.mediawiki.org/wiki/Extension:TemplateData possibly to make it easier to re-use wiki content elsewhere in ecosystem. (I did not review this extension properly yet, and I'm not sure if we'd ever use it)
* https://www.mediawiki.org/wiki/Extension:StructuredDiscussions to make it easy to discuss stuff. I think the poor discussion/talk pages on wikis are horrible. (This is still in beta but had no development for 3 years. It's what mediawiki uses for their own discussions though; we'd also have to convert existing discussion pages - potentially manually)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
dc0f0aab9f08c4c85e077d5b3c6ce4ac2278bfbf
6437
6436
2018-06-21T18:12:59Z
JayFoxRox
2
/* MediaWiki housekeeping */ new section
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
: +1 [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 18:22, 27 April 2018 (PDT)
== MediaWiki upgrade and plugins ==
It would be nice if the MediaWiki was upgraded to 1.31
In addition, I'd like to see these extensions:
* https://www.mediawiki.org/wiki/Extension:SyntaxHighlight so we finally get good code display. This wiki is getting more and more code.
* https://www.mediawiki.org/wiki/Extension:Math to display formulas nicely.
* https://www.mediawiki.org/wiki/Extension:ImageMap to create block diagrams, although we might need a more feature rich extension in the future.
* https://www.mediawiki.org/wiki/Extension:EasyTimeline might be useful for Xbox production timeline etc.
* https://www.mediawiki.org/wiki/Extension:RevisionSlider Make it easier to compare revisions.
Note that some of these extensions should have been included in the mediawiki version we use. I'm not sure how our mediawiki was installed or if we might dependencies.
And possibly these (not sure):
* https://www.mediawiki.org/wiki/Extension:TemplateStyles to handle style changes for special pages such as the main-page, and making it easier to add good looking content / giving users more freedom. (This might be a security risk and could potentially be handled with templates instead)
* https://www.mediawiki.org/wiki/Extension:TemplateData possibly to make it easier to re-use wiki content elsewhere in ecosystem. (I did not review this extension properly yet, and I'm not sure if we'd ever use it)
* https://www.mediawiki.org/wiki/Extension:StructuredDiscussions to make it easy to discuss stuff. I think the poor discussion/talk pages on wikis are horrible. (This is still in beta but had no development for 3 years. It's what mediawiki uses for their own discussions though; we'd also have to convert existing discussion pages - potentially manually)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== MediaWiki housekeeping ==
Our statistics have been severly broken for a long time: http://xboxdevwiki.net/Special:Statistics
This might fix it, so it could be worth a shot: https://www.mediawiki.org/wiki/Manual:InitSiteStats.php
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
aa70980c6bc6e764d7d85a89c1cdfef2e2db24f8
6438
6437
2018-06-21T18:13:59Z
JayFoxRox
2
/* Logo */
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
Can someone look at this again?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:13, 21 June 2018 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
: +1 [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 18:22, 27 April 2018 (PDT)
== MediaWiki upgrade and plugins ==
It would be nice if the MediaWiki was upgraded to 1.31
In addition, I'd like to see these extensions:
* https://www.mediawiki.org/wiki/Extension:SyntaxHighlight so we finally get good code display. This wiki is getting more and more code.
* https://www.mediawiki.org/wiki/Extension:Math to display formulas nicely.
* https://www.mediawiki.org/wiki/Extension:ImageMap to create block diagrams, although we might need a more feature rich extension in the future.
* https://www.mediawiki.org/wiki/Extension:EasyTimeline might be useful for Xbox production timeline etc.
* https://www.mediawiki.org/wiki/Extension:RevisionSlider Make it easier to compare revisions.
Note that some of these extensions should have been included in the mediawiki version we use. I'm not sure how our mediawiki was installed or if we might dependencies.
And possibly these (not sure):
* https://www.mediawiki.org/wiki/Extension:TemplateStyles to handle style changes for special pages such as the main-page, and making it easier to add good looking content / giving users more freedom. (This might be a security risk and could potentially be handled with templates instead)
* https://www.mediawiki.org/wiki/Extension:TemplateData possibly to make it easier to re-use wiki content elsewhere in ecosystem. (I did not review this extension properly yet, and I'm not sure if we'd ever use it)
* https://www.mediawiki.org/wiki/Extension:StructuredDiscussions to make it easy to discuss stuff. I think the poor discussion/talk pages on wikis are horrible. (This is still in beta but had no development for 3 years. It's what mediawiki uses for their own discussions though; we'd also have to convert existing discussion pages - potentially manually)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== MediaWiki housekeeping ==
Our statistics have been severly broken for a long time: http://xboxdevwiki.net/Special:Statistics
This might fix it, so it could be worth a shot: https://www.mediawiki.org/wiki/Manual:InitSiteStats.php
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
5fd75539edd8dad027bd8bc4f3bad595b65ca647
6440
6438
2018-06-21T18:51:09Z
JayFoxRox
2
/* MediaWiki upgrade and plugins */
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
Can someone look at this again?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:13, 21 June 2018 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
: +1 [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 18:22, 27 April 2018 (PDT)
== MediaWiki upgrade and plugins ==
It would be nice if the MediaWiki was upgraded to 1.31
In addition, I'd like to see these extensions:
* https://www.mediawiki.org/wiki/Extension:SyntaxHighlight so we finally get good code display. This wiki is getting more and more code.
* https://www.mediawiki.org/wiki/Extension:Math to display formulas nicely.
* https://www.mediawiki.org/wiki/Extension:ImageMap to create block diagrams, although we might need a more feature rich extension in the future.
* https://www.mediawiki.org/wiki/Extension:EasyTimeline might be useful for Xbox production timeline etc.
* https://www.mediawiki.org/wiki/Extension:RevisionSlider Make it easier to compare revisions.
Note that some of these extensions should have been included in the mediawiki version we use. I'm not sure how our mediawiki was installed or if we might miss dependencies.
And possibly these (not sure):
* https://www.mediawiki.org/wiki/Extension:TemplateStyles to handle style changes for special pages such as the main-page, and making it easier to add good looking content / giving users more freedom. (This might be a security risk and could potentially be handled with templates instead)
* https://www.mediawiki.org/wiki/Extension:TemplateData possibly to make it easier to re-use wiki content elsewhere in ecosystem. (I did not review this extension properly yet, and I'm not sure if we'd ever use it)
* https://www.mediawiki.org/wiki/Extension:StructuredDiscussions to make it easy to discuss stuff. I think the poor discussion/talk pages on wikis are horrible. (This is still in beta but had no development for 3 years. It's what mediawiki uses for their own discussions though; we'd also have to convert existing discussion pages - potentially manually)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== MediaWiki housekeeping ==
Our statistics have been severly broken for a long time: http://xboxdevwiki.net/Special:Statistics
This might fix it, so it could be worth a shot: https://www.mediawiki.org/wiki/Manual:InitSiteStats.php
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
e4633cc502092fef5e87f85777251ec374631f5c
Main Page/Header
0
3688
6439
6382
2018-06-21T18:47:21Z
JayFoxRox
2
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
This is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
<hr>
'''Want to help? Contact us!'''
This wiki is the place for all remaining Xbox projects to come together.
Please come chat with us in [https://discord.gg/WxJPPyz XboxDev on Discord], [irc://chat.freenode.net/xqemu #xqemu on Freenode IRC] ([http://webchat.freenode.net?channels=%23xqemu Webchat]) or [https://gitter.im/Cxbx-Reloaded/Lobby Cxbx-Reloaded on gitter.im].
You'll also get the details for wiki account creation there.
</div>
</div>
8413c63c97e5214985b0c408c69692e2070aa1bc
6448
6439
2018-06-26T17:39:19Z
JayFoxRox
2
XboxDev hyppeeeee
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
XboxDevWiki is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
Also check out the [https://github.com/xboxdev XboxDev GitHub organization] where we provide tools and code related to Xbox research and development.
<hr>
'''Want to help? Contact us!'''
This wiki is the place for all remaining Xbox projects to come together.
Please come chat with us in [https://discord.gg/WxJPPyz XboxDev on Discord], [irc://chat.freenode.net/xqemu #xqemu on Freenode IRC] ([http://webchat.freenode.net?channels=%23xqemu Webchat]) or [https://gitter.im/Cxbx-Reloaded/Lobby Cxbx-Reloaded on gitter.im].
You'll also get the details for wiki account creation there.
</div>
</div>
a0f8972681396c03685bb1a6eeee0f7f4dcc069b
Emulators
0
3703
6442
6379
2018-06-22T23:49:51Z
JayFoxRox
2
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, it is significantly slower than in XQEMU.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Windows
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
db902b26bc271859bd5c611a864263c751f1e9e9
6443
6442
2018-06-22T23:58:57Z
JayFoxRox
2
Add OpenXBOX and Tortoise
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, it is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Windows
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
58eed96b1058c5a45f9b670f61a4f4bff877b0d4
File:Input-a.png
6
3877
6444
6113
2018-06-23T23:54:26Z
JayFoxRox
2
JayFoxRox uploaded a new version of [[File:Input-a.png]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-b.png
6
3878
6445
6114
2018-06-23T23:54:58Z
JayFoxRox
2
JayFoxRox uploaded a new version of [[File:Input-b.png]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-x.png
6
3879
6446
6115
2018-06-23T23:55:20Z
JayFoxRox
2
JayFoxRox uploaded a new version of [[File:Input-x.png]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Input-y.png
6
3880
6447
6116
2018-06-23T23:55:44Z
JayFoxRox
2
JayFoxRox uploaded a new version of [[File:Input-y.png]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
XQEMU
0
3695
6449
5888
2018-06-26T18:23:15Z
JayFoxRox
2
wikitext
text/x-wiki
xqemu is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes[https://github.com/espes/xqemu/commit/d823f5802e7c4c84163aea8b4d924044951c705e].
The official homepage can be found at [http://xqemu.com xqemu.com]
== Compatiblity list ==
The following list was almost entirely created by [https://www.youtube.com/user/pcmaker2 pcmaker (also known as John Godgames)] around 2015.
'''There is also a [https://docs.google.com/spreadsheets/d/1sVtQ9SNPathKAMCqfYtvJQP0bs0UeLzP9otPHvZDMwE/edit#gid=709879345 new compatibility list from 2018] (also by pcmaker)'''
Meaning of the status fields:
{| class="wikitable"
!Status
!Meaning
|-
|Nothing
|Not showing anything due to error
|-
|Intro
|Shows something as Intro / Menu
|-
|Ingame
|Ingame (Graphical bugs)
|-
|Playable*
|Partially playable or expected to be fully playable but not tested completly yet
|-
|Playable
|Partially playable / Fully playable
|}
{{:XQEMU/Compatibility List}}
== XQEMU-JFR ==
XQEMU-JFR is a now defunct fork of XQEMU by JayFoxRox.
Most of the changes have since been integrated back into the official version of XQEMU.
The archived version can be found at https://github.com/JayFoxRox/xqemu-jfr
ba99a9424349cb7cff0c836f6f9840a9b18234a9
Talk:Main Page
1
3744
6450
6440
2018-06-26T21:29:34Z
JayFoxRox
2
/* E-Mails don't work */ new section
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
Can someone look at this again?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:13, 21 June 2018 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
: +1 [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 18:22, 27 April 2018 (PDT)
== MediaWiki upgrade and plugins ==
It would be nice if the MediaWiki was upgraded to 1.31
In addition, I'd like to see these extensions:
* https://www.mediawiki.org/wiki/Extension:SyntaxHighlight so we finally get good code display. This wiki is getting more and more code.
* https://www.mediawiki.org/wiki/Extension:Math to display formulas nicely.
* https://www.mediawiki.org/wiki/Extension:ImageMap to create block diagrams, although we might need a more feature rich extension in the future.
* https://www.mediawiki.org/wiki/Extension:EasyTimeline might be useful for Xbox production timeline etc.
* https://www.mediawiki.org/wiki/Extension:RevisionSlider Make it easier to compare revisions.
Note that some of these extensions should have been included in the mediawiki version we use. I'm not sure how our mediawiki was installed or if we might miss dependencies.
And possibly these (not sure):
* https://www.mediawiki.org/wiki/Extension:TemplateStyles to handle style changes for special pages such as the main-page, and making it easier to add good looking content / giving users more freedom. (This might be a security risk and could potentially be handled with templates instead)
* https://www.mediawiki.org/wiki/Extension:TemplateData possibly to make it easier to re-use wiki content elsewhere in ecosystem. (I did not review this extension properly yet, and I'm not sure if we'd ever use it)
* https://www.mediawiki.org/wiki/Extension:StructuredDiscussions to make it easy to discuss stuff. I think the poor discussion/talk pages on wikis are horrible. (This is still in beta but had no development for 3 years. It's what mediawiki uses for their own discussions though; we'd also have to convert existing discussion pages - potentially manually)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== MediaWiki housekeeping ==
Our statistics have been severly broken for a long time: http://xboxdevwiki.net/Special:Statistics
This might fix it, so it could be worth a shot: https://www.mediawiki.org/wiki/Manual:InitSiteStats.php
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== E-Mails don't work ==
LukeUsher reported trying to request a forgot-password, but got no emails either.
Speculation was MX/SPF records.
While looking for admin options on mediawiki, I noticed "Your email address is not yet confirmed. No email will be sent for any of the following features.
'''Confirm your email address'''" in http://xboxdevwiki.net/Special:Preferences ; so I pressed it and all I got was:
"Mailer returned: Unknown error in PHP's mail() function."
So it looks like mails are broken.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 14:29, 26 June 2018 (PDT)
08e49f4837ed0e5a3be7422a4efcd424c3971237
6451
6450
2018-06-26T21:30:04Z
JayFoxRox
2
/* E-Mails don't work */
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
Can someone look at this again?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:13, 21 June 2018 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
: +1 [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 18:22, 27 April 2018 (PDT)
== MediaWiki upgrade and plugins ==
It would be nice if the MediaWiki was upgraded to 1.31
In addition, I'd like to see these extensions:
* https://www.mediawiki.org/wiki/Extension:SyntaxHighlight so we finally get good code display. This wiki is getting more and more code.
* https://www.mediawiki.org/wiki/Extension:Math to display formulas nicely.
* https://www.mediawiki.org/wiki/Extension:ImageMap to create block diagrams, although we might need a more feature rich extension in the future.
* https://www.mediawiki.org/wiki/Extension:EasyTimeline might be useful for Xbox production timeline etc.
* https://www.mediawiki.org/wiki/Extension:RevisionSlider Make it easier to compare revisions.
Note that some of these extensions should have been included in the mediawiki version we use. I'm not sure how our mediawiki was installed or if we might miss dependencies.
And possibly these (not sure):
* https://www.mediawiki.org/wiki/Extension:TemplateStyles to handle style changes for special pages such as the main-page, and making it easier to add good looking content / giving users more freedom. (This might be a security risk and could potentially be handled with templates instead)
* https://www.mediawiki.org/wiki/Extension:TemplateData possibly to make it easier to re-use wiki content elsewhere in ecosystem. (I did not review this extension properly yet, and I'm not sure if we'd ever use it)
* https://www.mediawiki.org/wiki/Extension:StructuredDiscussions to make it easy to discuss stuff. I think the poor discussion/talk pages on wikis are horrible. (This is still in beta but had no development for 3 years. It's what mediawiki uses for their own discussions though; we'd also have to convert existing discussion pages - potentially manually)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== MediaWiki housekeeping ==
Our statistics have been severly broken for a long time: http://xboxdevwiki.net/Special:Statistics
This might fix it, so it could be worth a shot: https://www.mediawiki.org/wiki/Manual:InitSiteStats.php
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== E-Mails don't work ==
LukeUsher reported trying to request a forgot-password, but got no emails either.
Speculation was MX/SPF records.
While looking for admin options on mediawiki, I noticed:
Your email address is not yet confirmed. No email will be sent for any of the following features. '''Confirm your email address'''
in http://xboxdevwiki.net/Special:Preferences ; so I pressed it and all I got was:
"Mailer returned: Unknown error in PHP's mail() function."
So it looks like mails are broken.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 14:29, 26 June 2018 (PDT)
45d7f228372eea9f4d318c0851c6c74f0239d264
6452
6451
2018-06-26T21:32:07Z
JayFoxRox
2
/* Add extension to merge users */ new section
wikitext
text/x-wiki
== Cleanup ==
The main page could stand to be cleaned up now that we have many pages in the wiki. Also some pictures would be nice.
[[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Re cleanup I was going to do something like the navigation at https://www.3dbrew.org/wiki/Main_Page - but I only ever finished the box on top.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
== Logo ==
Also we need a wiki logo. See [https://commons.wikimedia.org/wiki/User:Evan-Amos/VOGM/Xbox here] for some great high-quality pictures. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed.
[https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Xbox-console.jpg/800px-Xbox-console.jpg I vote this one (Click here)].
Maybe we can add a text to it later or replace it with one which suggests we are interested in the internals, but so far, I don't like the others
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 01:34, 26 May 2017 (PDT)
Can someone look at this again?
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:13, 21 June 2018 (PDT)
== Contribution Policy ==
I also think we should create a contribution policy page. One thought on the matter is this: Instead of linking to content elsewhere, we should try to bring as much content into the wiki as possible. This is so we don't lose valuable content as things tend to become unavailable over time (that is, dead links). It also makes for a better experience when browsing the wiki and provides a place for visitors to improve the info. [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 17:10, 25 May 2017 (PDT)
Agreed: the {{input-*}} templates are being used.. differently. we use `A+B`; `A,B`; `AB`; `A B`; `A then B`; ...
all of them are supposed to mean: "press B after pressing A"
IMO: `A + B` is always pressing "A and B at same time"; for sequences we should always use something like `A, B + Y, X` (= press "A", then "B and Y at same time", then press "X")
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 12:24, 5 September 2017 (PDT)
== Translation to german ==
Hey i would like to translate some pages into german, can anyone explain how i can translate them? :)
Greetings.
----
: I'm not sure if there is any benefit in this.
: As the articles mostly focus on technical documentation, there'd be a lot of english terms anyway (regardless of main-language).
: I'd assume any reader who is able to make sense of this information already speaks english good enough.
: Also, even internationally, we are a rather small community.
: So introducing the small subset of germans with technical skills but without english language skills wouldn't add any new readers or writers.
: We'd also run into further administration issues:
: We currently don't even patrol page changes, because we don't have enough time / people to do it.
: With 2 languages there's also the risk of articles going out-of-sync.
: (There is also the minor issue that I don't know how mediawiki handles translations, but this is the least of our problems)
: If you want to attract new people (beginners or people who still lack skills in english), I'd suggest writing posts on another medium instead.
: For example, a blog post which puts stuff in layman terms (in whatever language you feel like), but might cross-reference XboxDevWiki as a source.
: I think google or some other translation services have features which allow translation of websites as some kind of interactive overlay.
: So it's auto-translated but you can improve the translation.
: I'd prefer these methods over overcomplicating XboxDevWiki with niche features which target a very small fraction (maybe none?) of the community, but add a maintenance burden.
: --[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 05:27, 22 April 2018 (PDT) (This is my personal opinion, I don't speak on behalf of the other wiki admins / users)
: +1 [[User:Mborgerson|Mborgerson]] ([[User talk:Mborgerson|talk]]) 18:22, 27 April 2018 (PDT)
== MediaWiki upgrade and plugins ==
It would be nice if the MediaWiki was upgraded to 1.31
In addition, I'd like to see these extensions:
* https://www.mediawiki.org/wiki/Extension:SyntaxHighlight so we finally get good code display. This wiki is getting more and more code.
* https://www.mediawiki.org/wiki/Extension:Math to display formulas nicely.
* https://www.mediawiki.org/wiki/Extension:ImageMap to create block diagrams, although we might need a more feature rich extension in the future.
* https://www.mediawiki.org/wiki/Extension:EasyTimeline might be useful for Xbox production timeline etc.
* https://www.mediawiki.org/wiki/Extension:RevisionSlider Make it easier to compare revisions.
Note that some of these extensions should have been included in the mediawiki version we use. I'm not sure how our mediawiki was installed or if we might miss dependencies.
And possibly these (not sure):
* https://www.mediawiki.org/wiki/Extension:TemplateStyles to handle style changes for special pages such as the main-page, and making it easier to add good looking content / giving users more freedom. (This might be a security risk and could potentially be handled with templates instead)
* https://www.mediawiki.org/wiki/Extension:TemplateData possibly to make it easier to re-use wiki content elsewhere in ecosystem. (I did not review this extension properly yet, and I'm not sure if we'd ever use it)
* https://www.mediawiki.org/wiki/Extension:StructuredDiscussions to make it easy to discuss stuff. I think the poor discussion/talk pages on wikis are horrible. (This is still in beta but had no development for 3 years. It's what mediawiki uses for their own discussions though; we'd also have to convert existing discussion pages - potentially manually)
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== MediaWiki housekeeping ==
Our statistics have been severly broken for a long time: http://xboxdevwiki.net/Special:Statistics
This might fix it, so it could be worth a shot: https://www.mediawiki.org/wiki/Manual:InitSiteStats.php
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 11:12, 21 June 2018 (PDT)
== E-Mails don't work ==
LukeUsher reported trying to request a forgot-password, but got no emails either.
Speculation was MX/SPF records.
While looking for admin options on mediawiki, I noticed:
Your email address is not yet confirmed. No email will be sent for any of the following features. '''Confirm your email address'''
in http://xboxdevwiki.net/Special:Preferences ; so I pressed it and all I got was:
"Mailer returned: Unknown error in PHP's mail() function."
So it looks like mails are broken.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 14:29, 26 June 2018 (PDT)
== Add extension to merge users ==
If someone creates a second account (password forgotten or something), we should have the option to merge their account with their old one.
We need an extension for this: https://www.mediawiki.org/wiki/Extension:UserMerge
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 14:32, 26 June 2018 (PDT)
b1fdeb4a8a7e3579e8345d00c4cde66beed1daba
Tony Hawk's Pro Skater 2x
0
13
6453
5302
2018-06-26T22:56:23Z
JayFoxRox
2
Improved formatting and added shader information dumped by LukeUsher
wikitext
text/x-wiki
{{Game}}
== Shaders ==
These shaders have been disassembled.
Any comment was added manually and does not come from the game files.
=== blackskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dph r3.x, v0, c0
dph r3.y, v0, c1
dph r3.z, v0, c2
dph r4.x, v0, c3
dph r4.y, v0, c4
dph r4.z, v0, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph oPos.x, r6, c21
dph oPos.y, r6, c22
dph oPos.z, r6, c23
dph oPos.w, r6, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== cloth.xvu ===
<pre>
xvs.1.1
mov r2.w, c48.x
mul r3.w, r2.w, c80.z
mad r4.xyz, c80.x, v0.xyz, r3.w
add r5.x, c32.z, -v1.x
dph r6.x, v0, c0
+exp r1.y, r4
dph r6.y, v0, c1
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.x, r1.xyz, c36
dph r6.z, v0, c2
+exp r1.y, r4.y
dph r8.x, v0, c3
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.y, r1.xyz, c36
dph r8.y, v0, c4
+exp r1.y, r4.z
dph r8.z, v0, c5
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.z, r1.xyz, c36
mul r9.xyz, r6.xyz, v1.x
mad r10.xyz, r8.xyz, r5.x, r9.xyz
mul r11.w, v3.y, c80.y
mul r0.w, r11.w, c92.w
mad r2.xyz, r7.xyz, r0.w, r10.xyz
mad r3.xyz, -c92.xyz, v3.z, r2.xyz
dp3 r4.x, v2, c0
dp3 r4.y, v2, c1
dp3 r4.z, v2, c2
dp3 r6.x, v2, c3
dp3 r6.y, v2, c4
dp3 r6.z, v2, c5
mul r7.xyz, r4.xyz, v1.x
mad r8.xyz, r6.xyz, r5.x, r7.xyz
dph oPos.x, r3, c21
dph oPos.y, r3, c22
dph oPos.z, r3, c23
dph oPos.w, r3, c24
dp3 r8.w, r8.xyz, r8.xyz
dph oT0.x, v9, c9
mov r9, c58
+rsq r1.w, r8.w
dph oT0.y, v9, c10
mul r10.xyz, r8.xyz, r1.w
dp3 r11.x, r10, -c56
dp3 r11.y, r10, -c57
dph oFog.x, r3, c24
max r0.xy, r11.xy, c32.x
mad r2, r0.x, c59, r9
mad r3, r0.y, c60, r2
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mul oD0, r3, c90
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== geom.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0.xyz, c91.xyz
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mov oT0.xy, v9
mul oT1.xy, v9, c91.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== grass.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0, c91
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mul oT0.xy, v9, c32.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorlight.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD0.xyz, r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.w, r4, c12
dph r7.y, r4, c10
dph r7.x, r4, c9
+rcp r1.w, r5.w
dph oT1.x, r4, c13
max r6.w, r1.w, -r1.w
mul oT0.xy, r7.xy, r6.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorshadow.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD1.xyz, -r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.x, r4, c9
dph r5.y, r4, c10
dph oT1.x, r4, c11
mul oT0.xy, r5.xy, c33
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
dp3 r11.w, r6.xyz, r6.xyz
dph oPos.y, r10, c22
dph oPos.x, r10, c21
+rsq r1.w, r11.w
dph oPos.z, r10, c23
mul r0.xyz, r6.xyz, r1.w
dp3 r2.x, r0.xyz, c92
dph oPos.w, r10, c24
mad oD0.xyz, r2.x, c32.y, c32.y
dph r3.x, r10, c6
dph r3.y, r10, c7
dph r3.z, r10, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r4.w, r3, c12
dph r6.y, r3, c10
dph r6.x, r3, c9
+rcp r1.w, r4.w
dph oT1.x, r3, c13
max r5.w, r1.w, -r1.w
mul oT0.xy, r6.xy, r5.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== skin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
dp3 r11.w, r6.xyz, r6.xyz
dph oPos.y, r10, c22
dph oPos.x, r10, c21
+rsq r1.w, r11.w
dph oPos.z, r10, c23
mul r0.xyz, r6.xyz, r1.w
dph oPos.w, r10, c24
dph oFog.x, r10, c24
mov r2, c58
dp3 r3.x, r0, -c56
dp3 r3.y, r0, -c57
dph oT0.x, v9, c9
max r4.xy, r3.xy, c32.x
mad r5, r4.x, c59, r2
mad r6, r4.y, c60, r5
dph oT0.y, v9, c10
mul oD0, r6, c90
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== wiggle.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
mov r3.xy, c48.x
+mov oT0.xy, v9
dp3 r4.x, r2, c72
dp3 r4.y, r2, c73
mad r5.xy, r3.xy, c74.xy, r4.xy
dp3 r6.x, v2, c0
mov r7.z, c32.x
+exp r1.y, r5
exp r8.y, r5.y
mul r1.x, r1.y, r1.y
mul r8.x, r8.y, r8.y
+mov oD0, c32.z
mul r1.z, r1.x, r1.y
mul r8.z, r8.x, r8.y
dp3 r7.x, r1.xyz, c36
dp3 r7.y, r8.xyz, c36
dp3 r6.y, v2, c1
dp3 r6.z, v2, c2
dp3 r9.x, r7.xyz, c74.zw
mul r10.xyz, r6, v3.x
mad r11.xyz, r10, r9.x, r2
dph oPos.x, r11, c21
dph oPos.y, r11, c22
dph oPos.z, r11, c23
dph oPos.w, r11, c24
dph oFog.x, r11, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
Rendering happens in this order:
# World
# Skater
#* Shader: cloth.xvu
# HUD
# Shadows
## Skater
##* Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
##* Shader: blackskin.xvu
1f35ac7bc38503247a83460ef8bb8285191e7a2b
6454
6453
2018-06-27T12:10:28Z
JayFoxRox
2
Document skin.xvu a little
wikitext
text/x-wiki
{{Game}}
== Shaders ==
These shaders have been disassembled.
Any comment was added manually and does not come from the game files.
=== blackskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dph r3.x, v0, c0
dph r3.y, v0, c1
dph r3.z, v0, c2
dph r4.x, v0, c3
dph r4.y, v0, c4
dph r4.z, v0, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph oPos.x, r6, c21
dph oPos.y, r6, c22
dph oPos.z, r6, c23
dph oPos.w, r6, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== cloth.xvu ===
<pre>
xvs.1.1
mov r2.w, c48.x
mul r3.w, r2.w, c80.z
mad r4.xyz, c80.x, v0.xyz, r3.w
add r5.x, c32.z, -v1.x
dph r6.x, v0, c0
+exp r1.y, r4
dph r6.y, v0, c1
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.x, r1.xyz, c36
dph r6.z, v0, c2
+exp r1.y, r4.y
dph r8.x, v0, c3
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.y, r1.xyz, c36
dph r8.y, v0, c4
+exp r1.y, r4.z
dph r8.z, v0, c5
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.z, r1.xyz, c36
mul r9.xyz, r6.xyz, v1.x
mad r10.xyz, r8.xyz, r5.x, r9.xyz
mul r11.w, v3.y, c80.y
mul r0.w, r11.w, c92.w
mad r2.xyz, r7.xyz, r0.w, r10.xyz
mad r3.xyz, -c92.xyz, v3.z, r2.xyz
dp3 r4.x, v2, c0
dp3 r4.y, v2, c1
dp3 r4.z, v2, c2
dp3 r6.x, v2, c3
dp3 r6.y, v2, c4
dp3 r6.z, v2, c5
mul r7.xyz, r4.xyz, v1.x
mad r8.xyz, r6.xyz, r5.x, r7.xyz
dph oPos.x, r3, c21
dph oPos.y, r3, c22
dph oPos.z, r3, c23
dph oPos.w, r3, c24
dp3 r8.w, r8.xyz, r8.xyz
dph oT0.x, v9, c9
mov r9, c58
+rsq r1.w, r8.w
dph oT0.y, v9, c10
mul r10.xyz, r8.xyz, r1.w
dp3 r11.x, r10, -c56
dp3 r11.y, r10, -c57
dph oFog.x, r3, c24
max r0.xy, r11.xy, c32.x
mad r2, r0.x, c59, r9
mad r3, r0.y, c60, r2
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mul oD0, r3, c90
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== geom.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0.xyz, c91.xyz
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mov oT0.xy, v9
mul oT1.xy, v9, c91.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== grass.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0, c91
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mul oT0.xy, v9, c32.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorlight.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD0.xyz, r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.w, r4, c12
dph r7.y, r4, c10
dph r7.x, r4, c9
+rcp r1.w, r5.w
dph oT1.x, r4, c13
max r6.w, r1.w, -r1.w
mul oT0.xy, r7.xy, r6.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorshadow.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD1.xyz, -r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.x, r4, c9
dph r5.y, r4, c10
dph oT1.x, r4, c11
mul oT0.xy, r5.xy, c33
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
dp3 r11.w, r6.xyz, r6.xyz
dph oPos.y, r10, c22
dph oPos.x, r10, c21
+rsq r1.w, r11.w
dph oPos.z, r10, c23
mul r0.xyz, r6.xyz, r1.w
dp3 r2.x, r0.xyz, c92
dph oPos.w, r10, c24
mad oD0.xyz, r2.x, c32.y, c32.y
dph r3.x, r10, c6
dph r3.y, r10, c7
dph r3.z, r10, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r4.w, r3, c12
dph r6.y, r3, c10
dph r6.x, r3, c9
+rcp r1.w, r4.w
dph oT1.x, r3, c13
max r5.w, r1.w, -r1.w
mul oT0.xy, r6.xy, r5.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== skin.xvu ===
'''Vertex attributes'''
* v0.xyzw = Position
* v1.x = vertex weight
* v2.xyz = Normal
* v9.xyz = Texture1 coordinates
'''Constants'''
* -c57.xyz = ?
* -c56.xyz = ?
* c-38.xyz = viewport? (D3D boilerplate)
* c-37.xyz = viewport? (D3D boilerplate)
* c0.xyzw - c3.xyzw = matrix bone[0] ?
* c3.xyzw - c5.xyzw = matrix bone[1] ?
* c9.xyzw = Texture U matrix
* c10.xyzw = Texture V matrix
* c21.xyzw - c24.xyzw = projection-matrix ?
* c32.x = CONSTANT() ?
* c32.z = CONSTANT(1.0)
* c58.xyzw = ?
* c59.xyzw = ?
* c60.xyzw = ?
* c90.xyzw = factor for diffuse color
'''Code'''
<pre>
xvs.1.1
# Get (1.0 - vertex weight)
add r2.x, c32.z, -v1.x
# Transform bone[0] normal ?
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
# Transform bone[1] normal ?
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
# r6.xyz = mix(r4.xyz, r3.xyz, v1.x)
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
# Transform bone[0] vertex
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
# Transform bone[1] vertex
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
dp3 r11.w, r6.xyz, r6.xyz
# Calculate output position
dph oPos.y, r10, c22
dph oPos.x, r10, c21
+rsq r1.w, r11.w
dph oPos.z, r10, c23
mul r0.xyz, r6.xyz, r1.w
dph oPos.w, r10, c24
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r10, c24
mov r2, c58
dp3 r3.x, r0, -c56
dp3 r3.y, r0, -c57
# Forward texture U
dph oT0.x, v9, c9
max r4.xy, r3.xy, c32.x
mad r5, r4.x, c59, r2
mad r6, r4.y, c60, r5
# Forward texture V
dph oT0.y, v9, c10
# Forward diffuse color
mul oD0, r6, c90
# Viewport or something? (D3D boilerplate)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== wiggle.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
mov r3.xy, c48.x
+mov oT0.xy, v9
dp3 r4.x, r2, c72
dp3 r4.y, r2, c73
mad r5.xy, r3.xy, c74.xy, r4.xy
dp3 r6.x, v2, c0
mov r7.z, c32.x
+exp r1.y, r5
exp r8.y, r5.y
mul r1.x, r1.y, r1.y
mul r8.x, r8.y, r8.y
+mov oD0, c32.z
mul r1.z, r1.x, r1.y
mul r8.z, r8.x, r8.y
dp3 r7.x, r1.xyz, c36
dp3 r7.y, r8.xyz, c36
dp3 r6.y, v2, c1
dp3 r6.z, v2, c2
dp3 r9.x, r7.xyz, c74.zw
mul r10.xyz, r6, v3.x
mad r11.xyz, r10, r9.x, r2
dph oPos.x, r11, c21
dph oPos.y, r11, c22
dph oPos.z, r11, c23
dph oPos.w, r11, c24
dph oFog.x, r11, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
Rendering happens in this order:
# World
# Skater
#* Shader: cloth.xvu
# HUD
# Shadows
## Skater
##* Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
##* Shader: blackskin.xvu
8a8d979523ed8abc0b3711cba87d47378e2f81cc
6455
6454
2018-06-27T12:21:00Z
JayFoxRox
2
More updates to skin.xvu
wikitext
text/x-wiki
{{Game}}
== Shaders ==
These shaders have been disassembled.
Any comment was added manually and does not come from the game files.
=== blackskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dph r3.x, v0, c0
dph r3.y, v0, c1
dph r3.z, v0, c2
dph r4.x, v0, c3
dph r4.y, v0, c4
dph r4.z, v0, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph oPos.x, r6, c21
dph oPos.y, r6, c22
dph oPos.z, r6, c23
dph oPos.w, r6, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== cloth.xvu ===
<pre>
xvs.1.1
mov r2.w, c48.x
mul r3.w, r2.w, c80.z
mad r4.xyz, c80.x, v0.xyz, r3.w
add r5.x, c32.z, -v1.x
dph r6.x, v0, c0
+exp r1.y, r4
dph r6.y, v0, c1
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.x, r1.xyz, c36
dph r6.z, v0, c2
+exp r1.y, r4.y
dph r8.x, v0, c3
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.y, r1.xyz, c36
dph r8.y, v0, c4
+exp r1.y, r4.z
dph r8.z, v0, c5
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.z, r1.xyz, c36
mul r9.xyz, r6.xyz, v1.x
mad r10.xyz, r8.xyz, r5.x, r9.xyz
mul r11.w, v3.y, c80.y
mul r0.w, r11.w, c92.w
mad r2.xyz, r7.xyz, r0.w, r10.xyz
mad r3.xyz, -c92.xyz, v3.z, r2.xyz
dp3 r4.x, v2, c0
dp3 r4.y, v2, c1
dp3 r4.z, v2, c2
dp3 r6.x, v2, c3
dp3 r6.y, v2, c4
dp3 r6.z, v2, c5
mul r7.xyz, r4.xyz, v1.x
mad r8.xyz, r6.xyz, r5.x, r7.xyz
dph oPos.x, r3, c21
dph oPos.y, r3, c22
dph oPos.z, r3, c23
dph oPos.w, r3, c24
dp3 r8.w, r8.xyz, r8.xyz
dph oT0.x, v9, c9
mov r9, c58
+rsq r1.w, r8.w
dph oT0.y, v9, c10
mul r10.xyz, r8.xyz, r1.w
dp3 r11.x, r10, -c56
dp3 r11.y, r10, -c57
dph oFog.x, r3, c24
max r0.xy, r11.xy, c32.x
mad r2, r0.x, c59, r9
mad r3, r0.y, c60, r2
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mul oD0, r3, c90
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== geom.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0.xyz, c91.xyz
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mov oT0.xy, v9
mul oT1.xy, v9, c91.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== grass.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0, c91
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mul oT0.xy, v9, c32.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorlight.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD0.xyz, r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.w, r4, c12
dph r7.y, r4, c10
dph r7.x, r4, c9
+rcp r1.w, r5.w
dph oT1.x, r4, c13
max r6.w, r1.w, -r1.w
mul oT0.xy, r7.xy, r6.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorshadow.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD1.xyz, -r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.x, r4, c9
dph r5.y, r4, c10
dph oT1.x, r4, c11
mul oT0.xy, r5.xy, c33
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
dp3 r11.w, r6.xyz, r6.xyz
dph oPos.y, r10, c22
dph oPos.x, r10, c21
+rsq r1.w, r11.w
dph oPos.z, r10, c23
mul r0.xyz, r6.xyz, r1.w
dp3 r2.x, r0.xyz, c92
dph oPos.w, r10, c24
mad oD0.xyz, r2.x, c32.y, c32.y
dph r3.x, r10, c6
dph r3.y, r10, c7
dph r3.z, r10, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r4.w, r3, c12
dph r6.y, r3, c10
dph r6.x, r3, c9
+rcp r1.w, r4.w
dph oT1.x, r3, c13
max r5.w, r1.w, -r1.w
mul oT0.xy, r6.xy, r5.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== skin.xvu ===
'''Vertex attributes'''
* v0.xyzw = Position
* v1.x = vertex weight
* v2.xyz = Normal
* v9.xyz = Texture1 coordinates
'''Constants'''
* c-38.xyz = viewport? (D3D boilerplate)
* c-37.xyz = viewport? (D3D boilerplate)
* c0.xyzw - c3.xyzw = matrix bone[0] ?
* c3.xyzw - c5.xyzw = matrix bone[1] ?
* c9.xyzw = Texture U matrix
* c10.xyzw = Texture V matrix
* c21.xyzw - c24.xyzw = projection-matrix ?
* c32.x = CONSTANT() ?
* c32.z = CONSTANT(1.0)
* c56.xyz - c57.xyz = some normal matrix
* c58.xyzw = ?
* c59.xyzw = ?
* c60.xyzw = ?
* c90.xyzw = light diffuse color ?
'''Code'''
<pre>
xvs.1.1
# Get (1.0 - vertex weight)
add r2.x, c32.z, -v1.x
# Transform bone[0] normal ?
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
# Transform bone[1] normal ?
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
# Blend normals: r6.xyz = mix(r4.xyz, r3.xyz, v1.x)
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
# Transform bone[0] vertex
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
# Transform bone[1] vertex
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
# Blend vertices: r10.xyz = mix(r8.xyz, r7.xyz, v1.x)
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
# Calculation squared normal length
dp3 r11.w, r6.xyz, r6.xyz
# Calculate output position (xy)
dph oPos.y, r10, c22
dph oPos.x, r10, c21
# Turn squared normal length into length: r1.w = 1.0 / length(normal)
+rsq r1.w, r11.w
# Calculate output position (z)
dph oPos.z, r10, c23
# Multiply normal by it's inverse length: r0.xyz = normalize(normal)
mul r0.xyz, r6.xyz, r1.w
# Calculate output position (w)
dph oPos.w, r10, c24
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r10, c24
# Dead code?
mov r2, c58
# Something with normal.xy
dp3 r3.x, r0, -c56
dp3 r3.y, r0, -c57
# Forward texture U
dph oT0.x, v9, c9
# Something to do with lighting
max r4.xy, r3.xy, c32.x
mad r5, r4.x, c59, r2
mad r6, r4.y, c60, r5
# Forward texture V
dph oT0.y, v9, c10
# Calculate diffuse color
mul oD0, r6, c90
# Viewport or something? (D3D boilerplate)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== wiggle.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
mov r3.xy, c48.x
+mov oT0.xy, v9
dp3 r4.x, r2, c72
dp3 r4.y, r2, c73
mad r5.xy, r3.xy, c74.xy, r4.xy
dp3 r6.x, v2, c0
mov r7.z, c32.x
+exp r1.y, r5
exp r8.y, r5.y
mul r1.x, r1.y, r1.y
mul r8.x, r8.y, r8.y
+mov oD0, c32.z
mul r1.z, r1.x, r1.y
mul r8.z, r8.x, r8.y
dp3 r7.x, r1.xyz, c36
dp3 r7.y, r8.xyz, c36
dp3 r6.y, v2, c1
dp3 r6.z, v2, c2
dp3 r9.x, r7.xyz, c74.zw
mul r10.xyz, r6, v3.x
mad r11.xyz, r10, r9.x, r2
dph oPos.x, r11, c21
dph oPos.y, r11, c22
dph oPos.z, r11, c23
dph oPos.w, r11, c24
dph oFog.x, r11, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
Rendering happens in this order:
# World
# Skater
#* Shader: cloth.xvu
# HUD
# Shadows
## Skater
##* Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
##* Shader: blackskin.xvu
f8863635f992e7b62858592e05b8c6450e3df962
6456
6455
2018-06-27T12:36:27Z
JayFoxRox
2
Annotation for grass.xvu
wikitext
text/x-wiki
{{Game}}
== Shaders ==
These shaders have been disassembled.
Any comment was added manually and does not come from the game files.
=== blackskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dph r3.x, v0, c0
dph r3.y, v0, c1
dph r3.z, v0, c2
dph r4.x, v0, c3
dph r4.y, v0, c4
dph r4.z, v0, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph oPos.x, r6, c21
dph oPos.y, r6, c22
dph oPos.z, r6, c23
dph oPos.w, r6, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== cloth.xvu ===
<pre>
xvs.1.1
mov r2.w, c48.x
mul r3.w, r2.w, c80.z
mad r4.xyz, c80.x, v0.xyz, r3.w
add r5.x, c32.z, -v1.x
dph r6.x, v0, c0
+exp r1.y, r4
dph r6.y, v0, c1
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.x, r1.xyz, c36
dph r6.z, v0, c2
+exp r1.y, r4.y
dph r8.x, v0, c3
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.y, r1.xyz, c36
dph r8.y, v0, c4
+exp r1.y, r4.z
dph r8.z, v0, c5
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.z, r1.xyz, c36
mul r9.xyz, r6.xyz, v1.x
mad r10.xyz, r8.xyz, r5.x, r9.xyz
mul r11.w, v3.y, c80.y
mul r0.w, r11.w, c92.w
mad r2.xyz, r7.xyz, r0.w, r10.xyz
mad r3.xyz, -c92.xyz, v3.z, r2.xyz
dp3 r4.x, v2, c0
dp3 r4.y, v2, c1
dp3 r4.z, v2, c2
dp3 r6.x, v2, c3
dp3 r6.y, v2, c4
dp3 r6.z, v2, c5
mul r7.xyz, r4.xyz, v1.x
mad r8.xyz, r6.xyz, r5.x, r7.xyz
dph oPos.x, r3, c21
dph oPos.y, r3, c22
dph oPos.z, r3, c23
dph oPos.w, r3, c24
dp3 r8.w, r8.xyz, r8.xyz
dph oT0.x, v9, c9
mov r9, c58
+rsq r1.w, r8.w
dph oT0.y, v9, c10
mul r10.xyz, r8.xyz, r1.w
dp3 r11.x, r10, -c56
dp3 r11.y, r10, -c57
dph oFog.x, r3, c24
max r0.xy, r11.xy, c32.x
mad r2, r0.x, c59, r9
mad r3, r0.y, c60, r2
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mul oD0, r3, c90
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== geom.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0.xyz, c91.xyz
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mov oT0.xy, v9
mul oT1.xy, v9, c91.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== grass.xvu ===
'''Vertex attributes'''
* v0.xyzw = Position
* v3.xyzw = Diffuse color
* v9.xy = Texture1 coordinates
'''Constants'''
* c-38.xyz = viewport? (D3D boilerplate)
* c-37.xyz = viewport? (D3D boilerplate)
* c21.xyzw - c24.xyzw = world-view-projection-matrix ?
* c32.w = texture scale
* c91.xyz = object position
'''Code'''
<pre>
xvs.1.1
# Add object position to vertex position
add r0.xyz, v0, c91
# Forward diffuse color
mov oD0, v3
# Calculate output position
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r0, c24
# Scale texture
mul oT0.xy, v9, c32.w
# Viewport or something? (D3D boilerplate)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorlight.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD0.xyz, r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.w, r4, c12
dph r7.y, r4, c10
dph r7.x, r4, c9
+rcp r1.w, r5.w
dph oT1.x, r4, c13
max r6.w, r1.w, -r1.w
mul oT0.xy, r7.xy, r6.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorshadow.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD1.xyz, -r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.x, r4, c9
dph r5.y, r4, c10
dph oT1.x, r4, c11
mul oT0.xy, r5.xy, c33
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
dp3 r11.w, r6.xyz, r6.xyz
dph oPos.y, r10, c22
dph oPos.x, r10, c21
+rsq r1.w, r11.w
dph oPos.z, r10, c23
mul r0.xyz, r6.xyz, r1.w
dp3 r2.x, r0.xyz, c92
dph oPos.w, r10, c24
mad oD0.xyz, r2.x, c32.y, c32.y
dph r3.x, r10, c6
dph r3.y, r10, c7
dph r3.z, r10, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r4.w, r3, c12
dph r6.y, r3, c10
dph r6.x, r3, c9
+rcp r1.w, r4.w
dph oT1.x, r3, c13
max r5.w, r1.w, -r1.w
mul oT0.xy, r6.xy, r5.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== skin.xvu ===
'''Vertex attributes'''
* v0.xyzw = Position
* v1.x = vertex weight
* v2.xyz = Normal
* v9.xyz = Texture1 coordinates
'''Constants'''
* c-38.xyz = viewport? (D3D boilerplate)
* c-37.xyz = viewport? (D3D boilerplate)
* c0.xyzw - c3.xyzw = matrix bone[0] ?
* c3.xyzw - c5.xyzw = matrix bone[1] ?
* c9.xyzw = Texture U matrix
* c10.xyzw = Texture V matrix
* c21.xyzw - c24.xyzw = projection-matrix ?
* c32.x = CONSTANT() ?
* c32.z = CONSTANT(1.0)
* c56.xyz - c57.xyz = some normal matrix
* c58.xyzw = ?
* c59.xyzw = ?
* c60.xyzw = ?
* c90.xyzw = light diffuse color ?
'''Code'''
<pre>
xvs.1.1
# Get (1.0 - vertex weight)
add r2.x, c32.z, -v1.x
# Transform bone[0] normal ?
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
# Transform bone[1] normal ?
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
# Blend normals: r6.xyz = mix(r4.xyz, r3.xyz, v1.x)
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
# Transform bone[0] vertex
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
# Transform bone[1] vertex
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
# Blend vertices: r10.xyz = mix(r8.xyz, r7.xyz, v1.x)
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
# Calculation squared normal length
dp3 r11.w, r6.xyz, r6.xyz
# Calculate output position (xy)
dph oPos.y, r10, c22
dph oPos.x, r10, c21
# Turn squared normal length into length: r1.w = 1.0 / length(normal)
+rsq r1.w, r11.w
# Calculate output position (z)
dph oPos.z, r10, c23
# Multiply normal by it's inverse length: r0.xyz = normalize(normal)
mul r0.xyz, r6.xyz, r1.w
# Calculate output position (w)
dph oPos.w, r10, c24
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r10, c24
# Dead code?
mov r2, c58
# Something with normal.xy
dp3 r3.x, r0, -c56
dp3 r3.y, r0, -c57
# Forward texture U
dph oT0.x, v9, c9
# Something to do with lighting
max r4.xy, r3.xy, c32.x
mad r5, r4.x, c59, r2
mad r6, r4.y, c60, r5
# Forward texture V
dph oT0.y, v9, c10
# Calculate diffuse color
mul oD0, r6, c90
# Viewport or something? (D3D boilerplate)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== wiggle.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
mov r3.xy, c48.x
+mov oT0.xy, v9
dp3 r4.x, r2, c72
dp3 r4.y, r2, c73
mad r5.xy, r3.xy, c74.xy, r4.xy
dp3 r6.x, v2, c0
mov r7.z, c32.x
+exp r1.y, r5
exp r8.y, r5.y
mul r1.x, r1.y, r1.y
mul r8.x, r8.y, r8.y
+mov oD0, c32.z
mul r1.z, r1.x, r1.y
mul r8.z, r8.x, r8.y
dp3 r7.x, r1.xyz, c36
dp3 r7.y, r8.xyz, c36
dp3 r6.y, v2, c1
dp3 r6.z, v2, c2
dp3 r9.x, r7.xyz, c74.zw
mul r10.xyz, r6, v3.x
mad r11.xyz, r10, r9.x, r2
dph oPos.x, r11, c21
dph oPos.y, r11, c22
dph oPos.z, r11, c23
dph oPos.w, r11, c24
dph oFog.x, r11, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
Rendering happens in this order:
# World
# Skater
#* Shader: cloth.xvu
# HUD
# Shadows
## Skater
##* Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
##* Shader: blackskin.xvu
9dfa4c071776050439ce0859232b36355530c1c6
6457
6456
2018-06-27T12:41:14Z
JayFoxRox
2
Fix bugs in grass.xvu
wikitext
text/x-wiki
{{Game}}
== Shaders ==
These shaders have been disassembled.
Any comment was added manually and does not come from the game files.
=== blackskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dph r3.x, v0, c0
dph r3.y, v0, c1
dph r3.z, v0, c2
dph r4.x, v0, c3
dph r4.y, v0, c4
dph r4.z, v0, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph oPos.x, r6, c21
dph oPos.y, r6, c22
dph oPos.z, r6, c23
dph oPos.w, r6, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== cloth.xvu ===
<pre>
xvs.1.1
mov r2.w, c48.x
mul r3.w, r2.w, c80.z
mad r4.xyz, c80.x, v0.xyz, r3.w
add r5.x, c32.z, -v1.x
dph r6.x, v0, c0
+exp r1.y, r4
dph r6.y, v0, c1
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.x, r1.xyz, c36
dph r6.z, v0, c2
+exp r1.y, r4.y
dph r8.x, v0, c3
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.y, r1.xyz, c36
dph r8.y, v0, c4
+exp r1.y, r4.z
dph r8.z, v0, c5
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.z, r1.xyz, c36
mul r9.xyz, r6.xyz, v1.x
mad r10.xyz, r8.xyz, r5.x, r9.xyz
mul r11.w, v3.y, c80.y
mul r0.w, r11.w, c92.w
mad r2.xyz, r7.xyz, r0.w, r10.xyz
mad r3.xyz, -c92.xyz, v3.z, r2.xyz
dp3 r4.x, v2, c0
dp3 r4.y, v2, c1
dp3 r4.z, v2, c2
dp3 r6.x, v2, c3
dp3 r6.y, v2, c4
dp3 r6.z, v2, c5
mul r7.xyz, r4.xyz, v1.x
mad r8.xyz, r6.xyz, r5.x, r7.xyz
dph oPos.x, r3, c21
dph oPos.y, r3, c22
dph oPos.z, r3, c23
dph oPos.w, r3, c24
dp3 r8.w, r8.xyz, r8.xyz
dph oT0.x, v9, c9
mov r9, c58
+rsq r1.w, r8.w
dph oT0.y, v9, c10
mul r10.xyz, r8.xyz, r1.w
dp3 r11.x, r10, -c56
dp3 r11.y, r10, -c57
dph oFog.x, r3, c24
max r0.xy, r11.xy, c32.x
mad r2, r0.x, c59, r9
mad r3, r0.y, c60, r2
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mul oD0, r3, c90
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== geom.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0.xyz, c91.xyz
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mov oT0.xy, v9
mul oT1.xy, v9, c91.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== grass.xvu ===
'''Vertex attributes'''
* v0.xyz = Position
* v3.xyzw = Diffuse color
* v9.xy = Texture1 coordinates
'''Constants'''
* c-38.xyz = viewport? (D3D boilerplate)
* c-37.xyz = viewport? (D3D boilerplate)
* c21.xyzw - c24.xyzw = world-view-projection-matrix ?
* c32.w = Texture1 scale
* c91.xyz = Object position
'''Code'''
<pre>
xvs.1.1
# Add object position to vertex position
add r0.xyz, v0, c91
# Forward diffuse color
mov oD0, v3
# Calculate output position
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r0, c24
# Scale texture
mul oT0.xy, v9, c32.w
# Viewport or something? (D3D boilerplate)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorlight.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD0.xyz, r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.w, r4, c12
dph r7.y, r4, c10
dph r7.x, r4, c9
+rcp r1.w, r5.w
dph oT1.x, r4, c13
max r6.w, r1.w, -r1.w
mul oT0.xy, r7.xy, r6.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorshadow.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD1.xyz, -r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.x, r4, c9
dph r5.y, r4, c10
dph oT1.x, r4, c11
mul oT0.xy, r5.xy, c33
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
dp3 r11.w, r6.xyz, r6.xyz
dph oPos.y, r10, c22
dph oPos.x, r10, c21
+rsq r1.w, r11.w
dph oPos.z, r10, c23
mul r0.xyz, r6.xyz, r1.w
dp3 r2.x, r0.xyz, c92
dph oPos.w, r10, c24
mad oD0.xyz, r2.x, c32.y, c32.y
dph r3.x, r10, c6
dph r3.y, r10, c7
dph r3.z, r10, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r4.w, r3, c12
dph r6.y, r3, c10
dph r6.x, r3, c9
+rcp r1.w, r4.w
dph oT1.x, r3, c13
max r5.w, r1.w, -r1.w
mul oT0.xy, r6.xy, r5.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== skin.xvu ===
'''Vertex attributes'''
* v0.xyzw = Position
* v1.x = vertex weight
* v2.xyz = Normal
* v9.xyz = Texture1 coordinates
'''Constants'''
* c-38.xyz = viewport? (D3D boilerplate)
* c-37.xyz = viewport? (D3D boilerplate)
* c0.xyzw - c3.xyzw = matrix bone[0] ?
* c3.xyzw - c5.xyzw = matrix bone[1] ?
* c9.xyzw = Texture U matrix
* c10.xyzw = Texture V matrix
* c21.xyzw - c24.xyzw = projection-matrix ?
* c32.x = CONSTANT() ?
* c32.z = CONSTANT(1.0)
* c56.xyz - c57.xyz = some normal matrix
* c58.xyzw = ?
* c59.xyzw = ?
* c60.xyzw = ?
* c90.xyzw = light diffuse color ?
'''Code'''
<pre>
xvs.1.1
# Get (1.0 - vertex weight)
add r2.x, c32.z, -v1.x
# Transform bone[0] normal ?
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
# Transform bone[1] normal ?
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
# Blend normals: r6.xyz = mix(r4.xyz, r3.xyz, v1.x)
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
# Transform bone[0] vertex
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
# Transform bone[1] vertex
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
# Blend vertices: r10.xyz = mix(r8.xyz, r7.xyz, v1.x)
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
# Calculation squared normal length
dp3 r11.w, r6.xyz, r6.xyz
# Calculate output position (xy)
dph oPos.y, r10, c22
dph oPos.x, r10, c21
# Turn squared normal length into length: r1.w = 1.0 / length(normal)
+rsq r1.w, r11.w
# Calculate output position (z)
dph oPos.z, r10, c23
# Multiply normal by it's inverse length: r0.xyz = normalize(normal)
mul r0.xyz, r6.xyz, r1.w
# Calculate output position (w)
dph oPos.w, r10, c24
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r10, c24
# Dead code?
mov r2, c58
# Something with normal.xy
dp3 r3.x, r0, -c56
dp3 r3.y, r0, -c57
# Forward texture U
dph oT0.x, v9, c9
# Something to do with lighting
max r4.xy, r3.xy, c32.x
mad r5, r4.x, c59, r2
mad r6, r4.y, c60, r5
# Forward texture V
dph oT0.y, v9, c10
# Calculate diffuse color
mul oD0, r6, c90
# Viewport or something? (D3D boilerplate)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== wiggle.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
mov r3.xy, c48.x
+mov oT0.xy, v9
dp3 r4.x, r2, c72
dp3 r4.y, r2, c73
mad r5.xy, r3.xy, c74.xy, r4.xy
dp3 r6.x, v2, c0
mov r7.z, c32.x
+exp r1.y, r5
exp r8.y, r5.y
mul r1.x, r1.y, r1.y
mul r8.x, r8.y, r8.y
+mov oD0, c32.z
mul r1.z, r1.x, r1.y
mul r8.z, r8.x, r8.y
dp3 r7.x, r1.xyz, c36
dp3 r7.y, r8.xyz, c36
dp3 r6.y, v2, c1
dp3 r6.z, v2, c2
dp3 r9.x, r7.xyz, c74.zw
mul r10.xyz, r6, v3.x
mad r11.xyz, r10, r9.x, r2
dph oPos.x, r11, c21
dph oPos.y, r11, c22
dph oPos.z, r11, c23
dph oPos.w, r11, c24
dph oFog.x, r11, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
Rendering happens in this order:
# World
# Skater
#* Shader: cloth.xvu
# HUD
# Shadows
## Skater
##* Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
##* Shader: blackskin.xvu
e521697312fab88a10973e75f102b2abc793610c
6483
6457
2018-08-17T23:34:05Z
JayFoxRox
2
Add rough comments, based on skin.xvu knowledge
wikitext
text/x-wiki
{{Game}}
== Shaders ==
These shaders have been disassembled.
Any comment was added manually and does not come from the game files.
=== blackskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dph r3.x, v0, c0
dph r3.y, v0, c1
dph r3.z, v0, c2
dph r4.x, v0, c3
dph r4.y, v0, c4
dph r4.z, v0, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph oPos.x, r6, c21
dph oPos.y, r6, c22
dph oPos.z, r6, c23
dph oPos.w, r6, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== cloth.xvu ===
<pre>
xvs.1.1
# Unknown
mov r2.w, c48.x
mul r3.w, r2.w, c80.z
mad r4.xyz, c80.x, v0.xyz, r3.w
# Get (1.0 - vertex weight)
add r5.x, c32.z, -v1.x
# Transform bone[0] vertex.x
dph r6.x, v0, c0
# Unknown
+exp r1.y, r4
# Transform bone[0] vertex.y
dph r6.y, v0, c1
# Unknown
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.x, r1.xyz, c36
# Transform bone[0] vertex.z
dph r6.z, v0, c2
# Unknown
+exp r1.y, r4.y
# Transform bone[1] vertex.x
dph r8.x, v0, c3
# Unknown
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.y, r1.xyz, c36
# Transform bone[1] vertex.y
dph r8.y, v0, c4
# Unknown
+exp r1.y, r4.z
# Transform bone[1] vertex.z
dph r8.z, v0, c5
# Unknown
mul r1.x, r1.y, r1.y
mul r1.z, r1.x, r1.y
dp3 r7.z, r1.xyz, c36
# Blend vertices: r10.xyz = mix(r8.xyz, r6.xyz, v1.x)
mul r9.xyz, r6.xyz, v1.x
mad r10.xyz, r8.xyz, r5.x, r9.xyz
# Unknown
mul r11.w, v3.y, c80.y
mul r0.w, r11.w, c92.w
mad r2.xyz, r7.xyz, r0.w, r10.xyz
mad r3.xyz, -c92.xyz, v3.z, r2.xyz
# Transform bone[0] normal ?
dp3 r4.x, v2, c0
dp3 r4.y, v2, c1
dp3 r4.z, v2, c2
# Transform bone[1] normal ?
dp3 r6.x, v2, c3
dp3 r6.y, v2, c4
dp3 r6.z, v2, c5
# Blend vertices: r8.xyz = mix(r6.xyz, r4.xyz, v1.x)
mul r7.xyz, r4.xyz, v1.x
mad r8.xyz, r6.xyz, r5.x, r7.xyz
# Calculate output position
dph oPos.x, r3, c21
dph oPos.y, r3, c22
dph oPos.z, r3, c23
dph oPos.w, r3, c24
# Calculation squared normal length
dp3 r8.w, r8.xyz, r8.xyz
# Forward texture U
dph oT0.x, v9, c9
# Unknown
mov r9, c58
# Turn squared normal length into length: r1.w = 1.0 / length(normal)
+rsq r1.w, r8.w
# Forward texture V
dph oT0.y, v9, c10
# Unknown
mul r10.xyz, r8.xyz, r1.w
dp3 r11.x, r10, -c56
dp3 r11.y, r10, -c57
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r3, c24
# Something to do with lighting
max r0.xy, r11.xy, c32.x
mad r2, r0.x, c59, r9
mad r3, r0.y, c60, r2
# Viewport or something? (D3D boilerplate part 1)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
# Calculate diffuse color
mul oD0, r3, c90
# Viewport or something? (D3D boilerplate part 2)
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== geom.xvu ===
<pre>
xvs.1.1
add r0.xyz, v0.xyz, c91.xyz
mov oD0, v3
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
dph oFog.x, r0, c24
mov oT0.xy, v9
mul oT1.xy, v9, c91.w
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== grass.xvu ===
'''Vertex attributes'''
* v0.xyz = Position
* v3.xyzw = Diffuse color
* v9.xy = Texture1 coordinates
'''Constants'''
* c-38.xyz = viewport? (D3D boilerplate)
* c-37.xyz = viewport? (D3D boilerplate)
* c21.xyzw - c24.xyzw = world-view-projection-matrix ?
* c32.w = Texture1 scale
* c91.xyz = Object position
'''Code'''
<pre>
xvs.1.1
# Add object position to vertex position
add r0.xyz, v0, c91
# Forward diffuse color
mov oD0, v3
# Calculate output position
dph oPos.x, r0, c21
dph oPos.y, r0, c22
dph oPos.z, r0, c23
dph oPos.w, r0, c24
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r0, c24
# Scale texture
mul oT0.xy, v9, c32.w
# Viewport or something? (D3D boilerplate)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorlight.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD0.xyz, r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.w, r4, c12
dph r7.y, r4, c10
dph r7.x, r4, c9
+rcp r1.w, r5.w
dph oT1.x, r4, c13
max r6.w, r1.w, -r1.w
mul oT0.xy, r7.xy, r6.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorshadow.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
dp3 r3.x, v2, c92
dph oPos.x, r2, c21
dph oPos.y, r2, c22
dph oPos.z, r2, c23
dph oPos.w, r2, c24
mad oD1.xyz, -r3.x, c32.y, c32.y
dph r4.x, r2, c6
dph r4.y, r2, c7
dph r4.z, r2, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r5.x, r4, c9
dph r5.y, r4, c10
dph oT1.x, r4, c11
mul oT0.xy, r5.xy, c33
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== projectorskin.xvu ===
<pre>
xvs.1.1
add r2.x, c32.z, -v1.x
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
dp3 r11.w, r6.xyz, r6.xyz
dph oPos.y, r10, c22
dph oPos.x, r10, c21
+rsq r1.w, r11.w
dph oPos.z, r10, c23
mul r0.xyz, r6.xyz, r1.w
dp3 r2.x, r0.xyz, c92
dph oPos.w, r10, c24
mad oD0.xyz, r2.x, c32.y, c32.y
dph r3.x, r10, c6
dph r3.y, r10, c7
dph r3.z, r10, c8
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
dph r4.w, r3, c12
dph r6.y, r3, c10
dph r6.x, r3, c9
+rcp r1.w, r4.w
dph oT1.x, r3, c13
max r5.w, r1.w, -r1.w
mul oT0.xy, r6.xy, r5.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== skin.xvu ===
'''Vertex attributes'''
* v0.xyzw = Position
* v1.x = vertex weight
* v2.xyz = Normal
* v9.xyz = Texture1 coordinates
'''Constants'''
* c-38.xyz = viewport? (D3D boilerplate)
* c-37.xyz = viewport? (D3D boilerplate)
* c0.xyzw - c3.xyzw = matrix bone[0] ?
* c3.xyzw - c5.xyzw = matrix bone[1] ?
* c9.xyzw = Texture U matrix
* c10.xyzw = Texture V matrix
* c21.xyzw - c24.xyzw = projection-matrix ?
* c32.x = CONSTANT() ?
* c32.z = CONSTANT(1.0)
* c56.xyz - c57.xyz = some normal matrix
* c58.xyzw = ?
* c59.xyzw = ?
* c60.xyzw = ?
* c90.xyzw = light diffuse color ?
'''Code'''
<pre>
xvs.1.1
# Get (1.0 - vertex weight)
add r2.x, c32.z, -v1.x
# Transform bone[0] normal ?
dp3 r3.x, v2, c0
dp3 r3.y, v2, c1
dp3 r3.z, v2, c2
# Transform bone[1] normal ?
dp3 r4.x, v2, c3
dp3 r4.y, v2, c4
dp3 r4.z, v2, c5
# Blend normals: r6.xyz = mix(r4.xyz, r3.xyz, v1.x)
mul r5.xyz, r3.xyz, v1.x
mad r6.xyz, r4.xyz, r2.x, r5.xyz
# Transform bone[0] vertex
dph r7.x, v0, c0
dph r7.y, v0, c1
dph r7.z, v0, c2
# Transform bone[1] vertex
dph r8.x, v0, c3
dph r8.y, v0, c4
dph r8.z, v0, c5
# Blend vertices: r10.xyz = mix(r8.xyz, r7.xyz, v1.x)
mul r9.xyz, r7.xyz, v1.x
mad r10.xyz, r8.xyz, r2.x, r9.xyz
# Calculation squared normal length
dp3 r11.w, r6.xyz, r6.xyz
# Calculate output position (xy)
dph oPos.y, r10, c22
dph oPos.x, r10, c21
# Turn squared normal length into length: r1.w = 1.0 / length(normal)
+rsq r1.w, r11.w
# Calculate output position (z)
dph oPos.z, r10, c23
# Multiply normal by it's inverse length: r0.xyz = normalize(normal)
mul r0.xyz, r6.xyz, r1.w
# Calculate output position (w)
dph oPos.w, r10, c24
# Generate fog depth (same as oPos.w - somehow not optimized?)
dph oFog.x, r10, c24
# Dead code?
mov r2, c58
# Something with normal.xy
dp3 r3.x, r0, -c56
dp3 r3.y, r0, -c57
# Forward texture U
dph oT0.x, v9, c9
# Something to do with lighting
max r4.xy, r3.xy, c32.x
mad r5, r4.x, c59, r2
mad r6, r4.y, c60, r5
# Forward texture V
dph oT0.y, v9, c10
# Calculate diffuse color
mul oD0, r6, c90
# Viewport or something? (D3D boilerplate)
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
=== wiggle.xvu ===
<pre>
xvs.1.1
dph r2.x, v0, c0
dph r2.y, v0, c1
dph r2.z, v0, c2
mov r3.xy, c48.x
+mov oT0.xy, v9
dp3 r4.x, r2, c72
dp3 r4.y, r2, c73
mad r5.xy, r3.xy, c74.xy, r4.xy
dp3 r6.x, v2, c0
mov r7.z, c32.x
+exp r1.y, r5
exp r8.y, r5.y
mul r1.x, r1.y, r1.y
mul r8.x, r8.y, r8.y
+mov oD0, c32.z
mul r1.z, r1.x, r1.y
mul r8.z, r8.x, r8.y
dp3 r7.x, r1.xyz, c36
dp3 r7.y, r8.xyz, c36
dp3 r6.y, v2, c1
dp3 r6.z, v2, c2
dp3 r9.x, r7.xyz, c74.zw
mul r10.xyz, r6, v3.x
mad r11.xyz, r10, r9.x, r2
dph oPos.x, r11, c21
dph oPos.y, r11, c22
dph oPos.z, r11, c23
dph oPos.w, r11, c24
dph oFog.x, r11, c24
mul oPos.xyz, r12, c-38
+rcc r1.x, r12.w
mad oPos.xyz, r12, r1.x, c-37
</pre>
== Demo ==
There was a demo released for ??? on ???.
=== Rendering in the Demo ===
This is a rundown of how the scene is being rendered in the THPS2X Demo version
Rendering happens in this order:
# World
# Skater
#* Shader: cloth.xvu
# HUD
# Shadows
## Skater
##* Skater shadows are rendered into a 256x256 texture after the entire scene has been rendered
##* Shader: blackskin.xvu
0b639ba771fa3c4c183668a4e63d69848ac5bbbd
Xbox Input Devices
0
11
6458
6429
2018-07-03T19:12:26Z
JayFoxRox
2
/* Protocol */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x1000 for input
** 0x2000 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 9
* wValue: 0x2000
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x1000
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported.
* ACK if supported.
* NAK if supported but no changes since last ACK.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
debe776229aa08e4b65e6ae49a03a28e3e72b800
6459
6458
2018-07-03T23:28:32Z
JayFoxRox
2
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported.
* ACK if supported.
* NAK if supported but no changes since last ACK.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
076a84b05479d2e690f79bf6e792a9a5f9a53096
6460
6459
2018-07-04T02:24:33Z
JayFoxRox
2
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported.
* ACK if supported.
* NAK if supported but no changes since last ACK.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
15f894d8e80c49044dde6fec249a836ce976ca0a
6462
6460
2018-07-04T22:39:34Z
JayFoxRox
2
/* GET_REPORT */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
4e70f540d209f6ab064e0c31c74ba20b66ae21ae
6463
6462
2018-07-04T22:40:40Z
JayFoxRox
2
/* Interrupt transfers */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
eef4b18b792728ec6a95bef70ec77fd3e4ee7398
6464
6463
2018-07-04T23:48:59Z
JayFoxRox
2
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
c4c3a629c14cb541d221fdeaaf599da86723df2e
6465
6464
2018-07-04T23:51:21Z
JayFoxRox
2
/* GET_DESCRIPTOR */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Green
|USB D-
|-
|2
|White
|USB D+
|-
|3
|Black
|GND
|-
|4
|Red
|VCC
|-
|5
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
115450aba0da99cc1b94645b78ee9d480300f09c
Development Kits
0
3822
6461
5945
2018-07-04T20:07:02Z
Codeasm
2480
Added details that people suggested based on undisclosed sources
wikitext
text/x-wiki
There are a few hardware diferences and software diferences between development kits, but generaly the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are diferences internaly from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the developement kits and debugkits.
Some rare boards are found with diferent MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unkown port) its been rumoured that the blocked USB port (unblocked on DVT3) on the back of Developement kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel.
The alpha hardware allowed kernel debuging to be done over one of the rs232 ports and standard WinDBG software can make these messages and control work.
This allows of carefull debugging of the running kernel and diagnose occuring faults or errors. At early boot of the recovery software an network ip adress is attempted to setup probbaly for another way of diagnosing and remote control using the availeble software like later xdk software.
The Alpha is build with the following parts or software:
=== Alpha I ===
* Intel VC820, running a prerelease Bios
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforce 2 GTS 64MB
* An xircom PCPGI2(OPTI 82C861) 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
* Hard drive is a WD205AA (20.5 Gb) or fujitsu MPF3204AT (20.4 Gb)
* ATNG 250w or a 300w powersupply
These where then programmed by use of a recovery disk that "recovered" the system.
The case is a customized globalwin ycc-802. (color silver and an added jewel)
=== Apha II ===
The Alpha II was a upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN
* Nvidia Geforce3 NV20 (64MB ram) with a Preretail firmware (180-p0050-0000-a09)
An supplied Recovery made the nececairy firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha/
Same hardware as a Alpha I/II, but you dont seem to need the preretail firmwares or bioses.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out suboard isnt nececairy, as VGA seems to work fine. color or diferent kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while on purpose incorrectly installed or configured the computer.
These results may vary with official parts, configs, bios or firmware. Or due to diferences in hardware.
these are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primairy channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen connected (VGA or S-video)
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas or only for the particular motherboard that was under test.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).DVT3 seems to have the back USB port to be uncovered and a slightly more glossy or shinier jewel on the top of the case. According to some sources, the DVT3 cannot be updated to further kernels/dashboards than 3911, the lowest/oldest being 3823.1(Borman said this?){{citation needed}}
All functions a debug with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
f50558dd171ccb5947e25c3ceeeceee2ff82f28a
File:Haxar-a20m.jpg
6
3956
6466
2018-07-06T20:41:08Z
Haxar
2485
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
6468
6466
2018-07-07T01:25:47Z
Haxar
2485
Haxar uploaded a new version of [[File:Haxar-a20m.jpg]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Exploits
0
3751
6467
6374
2018-07-06T20:47:31Z
Haxar
2485
/* A20M# hack */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer found a savedgame exloit and shared it on Discord and later with Rocky5 for his softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Untested
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
3f4ca1c4960775ccf6d3e3cf72ffb63a5aa5e811
6471
6467
2018-07-12T22:59:57Z
DarkGabbz
2486
some grammar fixing
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Untested
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
c508e6b5838331101a75a518536ce6dbeee4af33
6491
6471
2018-08-29T21:48:51Z
JayFoxRox
2
Attack tested: I've mapped GP DSP scratch mem and DMA'd to X-mem; read it back using CPU: Memory repeats
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Only crashes so far, mostly untested
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Untested
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
5053f0439b1d629211ef184a1dab0438252e6069
6492
6491
2018-08-31T02:42:19Z
JayFoxRox
2
More reports from yesterday
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
5833394c048ae618024adba0f08b785241f7a311
6493
6492
2018-08-31T12:48:43Z
JayFoxRox
2
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device (theory is dead if this does not work; one last hope: hope for signal runtimes and use CPU)
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept, I'll probably try to use the CPU fallback, but I don't expect anything. No interest in doing NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only, someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept phase, needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
9fd7dd5c272e5fa0c436f721f7cc97db7cdd2245
6494
6493
2018-08-31T14:49:04Z
JayFoxRox
2
Update state of my proposals
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
83eaf2480c66d06561e83e55bcc7e979a90a6cf1
Flash ROM
0
3762
6469
6001
2018-07-11T17:45:24Z
JayFoxRox
2
Add wikipedia links for flash memory and LPC
wikitext
text/x-wiki
The Flash is a 256 kiB or 1 MiB [[Wikipedia:Flash_memory|non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip]] and connected to the [[MCPX]] via the [[Wikipedia:Low Pin Count|<abbr title="Low Pin Count">LPC</abbr>]] bus.
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MiB; 0xFFFC0000, if the ROM is 256 kiB) into the but the Xbox kernel.
For the content of the Microsoft flash images see [[BIOS]].
4179697eadbe72a77f277ef2c8609ab94225af98
Dashboard
0
3772
6470
6203
2018-07-11T18:01:01Z
JayFoxRox
2
/* Steps to activate Soundtrack Easter Egg: */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press {{input-y}}, {{input-x}} while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press "INFO" button on the DVD Playback Kit remote.
Only visible with DVD Playback Kit and Remote:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press {{input-y}}, {{input-x}} on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield{{FIXME|reason=replace lengthy explanation with a video of this}}.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, press {{input-y}} {{ input-x}} on the main screen not from any sub-menu, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
[[Hard Drive Files]]
91c9919af69361f76d6b49879a94c54fce4fe48e
xboxdevwiki:About
4
3957
6472
2018-07-14T21:56:30Z
JayFoxRox
2
Created page with "[https://github.com/XboxDev/XboxDev To find out more about XboxDev please read our information on GitHub]"
wikitext
text/x-wiki
[https://github.com/XboxDev/XboxDev To find out more about XboxDev please read our information on GitHub]
ef6cb22f1ffed4fb0e09c8a697f52b60f6004ff8
DSP
0
3800
6473
5804
2018-07-14T23:28:34Z
JayFoxRox
2
/* Related links */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
Sample formats:
* 0x0 = 8 bit
* 0x1 = 16 bit
* 0x2 = 24 bit in MSB
* 0x3 = 32 bit
* 0x4
* 0x5
* 0x6 = 24 bit in LSB (also endianess switched?{{citation needed}})
* 0x7
Buffers:
* 0x0 = FIFO0
* 0x1 = FIFO1
* 0x2 = FIFO2{{citation needed}}
* 0x3 = FIFO3{{citation needed}}
* 0x4
* 0x5
* 0x6
* 0x7
* 0x8
* 0x9
* 0xA
* 0xB
* 0xC
* 0xD
* 0xE = Circular
* 0xF
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of A56, open-source assembler for the similar 56000 architecture]
ae02658d5fbe7e654d090b6703b41efc9a68126f
6474
6473
2018-07-14T23:28:50Z
JayFoxRox
2
/* Related links */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
Sample formats:
* 0x0 = 8 bit
* 0x1 = 16 bit
* 0x2 = 24 bit in MSB
* 0x3 = 32 bit
* 0x4
* 0x5
* 0x6 = 24 bit in LSB (also endianess switched?{{citation needed}})
* 0x7
Buffers:
* 0x0 = FIFO0
* 0x1 = FIFO1
* 0x2 = FIFO2{{citation needed}}
* 0x3 = FIFO3{{citation needed}}
* 0x4
* 0x5
* 0x6
* 0x7
* 0x8
* 0x9
* 0xA
* 0xB
* 0xC
* 0xD
* 0xE = Circular
* 0xF
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
511cc58fce307aef654eac1b58e74be42d0b4ea2
6476
6474
2018-07-23T18:10:55Z
JayFoxRox
2
I've measured memory sizes of the Xbox DSPs using a program
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
|-
! GP
| 4096{{FIXME|reason=Unconfirmed}} x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
|-
! EP
| 4096{{FIXME|reason=Unconfirmed}} x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
|}
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
Sample formats:
* 0x0 = 8 bit
* 0x1 = 16 bit
* 0x2 = 24 bit in MSB
* 0x3 = 32 bit
* 0x4
* 0x5
* 0x6 = 24 bit in LSB (also endianess switched?{{citation needed}})
* 0x7
Buffers:
* 0x0 = FIFO0
* 0x1 = FIFO1
* 0x2 = FIFO2{{citation needed}}
* 0x3 = FIFO3{{citation needed}}
* 0x4
* 0x5
* 0x6
* 0x7
* 0x8
* 0x9
* 0xA
* 0xB
* 0xC
* 0xD
* 0xE = Circular
* 0xF
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
9d8f07346493c696003255b7f981d9cd6272f314
6477
6476
2018-07-23T18:40:33Z
JayFoxRox
2
Confirmed using a small test program which would grow and eventually stop working as it exceeds program memory
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
|}
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
Sample formats:
* 0x0 = 8 bit
* 0x1 = 16 bit
* 0x2 = 24 bit in MSB
* 0x3 = 32 bit
* 0x4
* 0x5
* 0x6 = 24 bit in LSB (also endianess switched?{{citation needed}})
* 0x7
Buffers:
* 0x0 = FIFO0
* 0x1 = FIFO1
* 0x2 = FIFO2{{citation needed}}
* 0x3 = FIFO3{{citation needed}}
* 0x4
* 0x5
* 0x6
* 0x7
* 0x8
* 0x9
* 0xA
* 0xB
* 0xC
* 0xD
* 0xE = Circular
* 0xF
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
b75940bcff3f914f1aa77b7d6efc28c8ac8e5605
6478
6477
2018-07-23T20:16:10Z
JayFoxRox
2
Added some existing knowledge from XQEMU. Take this with grain of salt.
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
|}
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Circular
** 0xF
* Sample format (Bit-offset 10; 3-bits).
** 0x0 = 8 bit
** 0x1 = 16 bit
** 0x2 = 24 bit in MSB
** 0x3 = 32 bit
** 0x4
** 0x5
** 0x6 = 24 bit in LSB (also endianess switched?{{citation needed}})
** 0x7
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || The start of the buffer.
|-
! 6
| Buffer limit || The end of the buffer. For 0x1000 bytes, this has to be 0xFFF.{{FIXME|reason=Is this independent of the base?}}
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
d11ca6bfdf743839df02bf37f5accfc09ab867d9
6479
6478
2018-07-24T01:55:13Z
JayFoxRox
2
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
|}
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Circular
** 0xF
* Sample format (Bit-offset 10; 3-bits).
** 0x0 = 8 bit
** 0x1 = 16 bit
** 0x2 = 24 bit in MSB
** 0x3 = 32 bit
** 0x4
** 0x5
** 0x6 = 24 bit in LSB
** 0x7
* Step size (Bit-offset 14; unknown size).
** 0 = Keeps reading from same source offset
** 1 = Reads every sample
** 2 = Reads every second sample
** ...
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || The start of the buffer.
|-
! 6
| Buffer limit || The end of the buffer. For 0x1000 bytes, this has to be 0xFFF.{{FIXME|reason=Is this independent of the base?}}
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
75a3552ba8ac44b43ba6fd27937168396517ed41
6480
6479
2018-07-24T15:40:00Z
JayFoxRox
2
Add note about MIXBUF
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Circular
** 0xF
* Sample format (Bit-offset 10; 3-bits).
** 0x0 = 8 bit
** 0x1 = 16 bit
** 0x2 = 24 bit in MSB
** 0x3 = 32 bit
** 0x4
** 0x5
** 0x6 = 24 bit in LSB
** 0x7
* Step size (Bit-offset 14; unknown size).
** 0 = Keeps reading from same source offset
** 1 = Reads every sample
** 2 = Reads every second sample
** ...
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || The start of the buffer.
|-
! 6
| Buffer limit || The end of the buffer. For 0x1000 bytes, this has to be 0xFFF.{{FIXME|reason=Is this independent of the base?}}
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
18d3725e9f58be4543afec084e97980170b455b4
6490
6480
2018-08-29T20:49:34Z
JayFoxRox
2
/* Command blocks */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Circular
** 0xF
* Sample format (Bit-offset 10; 3-bits).
** 0x0 = 7 bit (all values are OR'd with 0x80)
** 0x1 = 16 bit
** 0x2 = 24 bit in MSB
** 0x3 = 32 bit (2 words per value: first word receives 24 bit, the next word only 8 bit)
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB
** 0x7 = ''Transfer skipped''
* Step size (Bit-offset 14; unknown size).
** 0 = Keeps reading from same source offset
** 1 = Reads every sample
** 2 = Reads every second sample
** ...
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || The start of the buffer.
|-
! 6
| Buffer limit || The end of the buffer. For 0x1000 bytes, this has to be 0xFFF.{{FIXME|reason=Is this independent of the base?}}
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
4ad95d3a2075b3aded28d4bdbd9b0cac36065e42
System Management Controller
0
3748
6475
6421
2018-07-19T22:16:31Z
DarkGabbz
2486
wikitext
text/x-wiki
The System Management Controller (SMC) is a PIC16LC63A-04/SO microcontroller which handles a variety of tasks on the Xbox.
This includes rebooting the system, returning the connected kind of video cable, the DVD tray state, controlling the fan, LED control and sensing temperature.
It is also the hardware which is connected to the Power and Eject buttons.
The PIC is running at 20 MHz with its own ROM, RAM and I/O lines.
The PIC is always running, even if the Xbox is turned off. When the power cable is unplugged, it gets its energy from a capacitor for some hours.
It is connected via I²C and located on address 0x10.
== Revisions ==
The chip is also marked with a revision.
Known revisions include:
* P01
* P05
* P11
* P2L{{citation needed}}
* D01 (Seen in a debug kit)
* D05 (seen in a earlier model chihiro)
b0be408e2fe1a1b8a599eebb385a716fc8383fc7
Resources
0
3
6481
6232
2018-08-11T23:36:58Z
JayFoxRox
2
Added articles by Rich Geldreich about deferred rendering
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
7c314c8b45d45164dcbf8c75332dd419efd64eab
6482
6481
2018-08-11T23:38:49Z
JayFoxRox
2
/* Xbox Post-Mortems by developers */
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [https://web-beta.archive.org/web/20010827184126/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
cd6c1989f21aaa0fee4cf9b87d7c3d52492caaf5
Hard Drive
0
3707
6484
6109
2018-08-23T21:22:36Z
DaveX
2487
/* Partitionstable extended with Device Object Names */
wikitext
text/x-wiki
The original Xbox hard disk drive was 8 GB in size. Later releases, 10 GB drives; however, only the first 8 GB of the drive was used. See [[Hardware Revisions]] for more information.
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
| N/A
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition3
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition4
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition5
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
| \Device\Harddisk0\Partition2
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
| \Device\Harddisk0\Partition1
|}
::::::::::::::::::::::''side note: CD/DVD Drive "D:" <=> "\Device\CdRom0"''
::::::::::::::::::::::''and usually: added Drive "F:" <=> "\Device\Harddisk0\Partition6"''
::::::::::::::::::::::::: ''added Drive "G:" <=> "\Device\Harddisk0\Partition7"''
'''Debug/Devkit HDD:'''
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
|-
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
adcea481f0b44e71fcc8d982e4c2f1d917262d4c
User:Grovespaz
2
3958
6485
2018-08-25T12:57:43Z
Grovespaz
2503
Created page with "This is just a test page"
wikitext
text/x-wiki
This is just a test page
9720e4f71aa95c2438db129bde8aa60eb3e25eed
User:Grovespaz/Kernel/AvGetSavedDataAddress
2
3959
6486
2018-08-25T23:56:10Z
Grovespaz
2503
Initial creation based on nxdk ntoskrnl.h
wikitext
text/x-wiki
AvGetSavedDataAddress is an export in the [[Kernel|Xbox Kernel]]. It has ordinal 1.
== Description ==
No documentation exists currently
AvGetSavedDataAddress returns '''PVOID'''.
This export does not seem to occur in Windows NT Kernels and is thus probably Xbox specific.
244460fccca6b9dfe25aa6668797707e49ebc93d
6487
6486
2018-08-26T00:36:51Z
Grovespaz
2503
Initial creation based on nxdk ntoskrnl.h
wikitext
text/x-wiki
{{KernelExport|name=AvGetSavedDataAddress|ordinal=1}}
<!-- Please add documentation here -->
== Syntax ==
<nowiki>XBAPI PVOID NTAPI AvGetSavedDataAddress(void);</nowiki>
== Return Value ==
AvGetSavedDataAddress returns '''PVOID'''.
db060077f59a72a2dbcb0306e61601d664087efe
Template:KernelExport
10
3960
6488
2018-08-26T00:38:14Z
Grovespaz
2503
Created page with "{{{name}}} is an export in the [[Kernel|Xbox Kernel]]. It has ordinal {{{ordinal}}}."
wikitext
text/x-wiki
{{{name}}} is an export in the [[Kernel|Xbox Kernel]]. It has ordinal {{{ordinal}}}.
adce1ea4fc044ee57f0ac66360ed1f11769fcd3d
User:Grovespaz/Kernel/MmIsAddressValid
2
3961
6489
2018-08-26T00:48:47Z
Grovespaz
2503
Initial creation based on ntoskrnl.h
wikitext
text/x-wiki
Test
640ab2bae07bedc4c163f679a746f7ab7fb5d1fa
6497
6489
2018-09-01T07:58:44Z
Grovespaz
2503
wikitext
text/x-wiki
{{KernelExport|name=MmIsAddressValid|ordinal=174}}
Checks whether a page fault would occur for a read operation on a specified address.
The original Windows NT function is documented in the MSDN: [https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntddk/nf-ntddk-mmisaddressvalid MmIsAddressValid]
== Syntax ==
<nowiki>XBAPI BOOLEAN NTAPI MmIsAddressValid
(
IN PVOID VirtualAddress
);</nowiki>
== Parameters ==
=== VirtualAddress ===
The virtual address to be checked.
== Return Value ==
MmIsAddressValid returns '''BOOLEAN''': TRUE if a page fault would occur, FALSE if not..
e3c10f5c9340960e2067f4081ff65a45de42bb37
User:Grovespaz/Kernel/RtlFillMemory
2
3962
6495
2018-09-01T07:55:52Z
Grovespaz
2503
Created page with "{{KernelExport|name=RtlFillMemory|ordinal=284}} Fills a specified memory area with repetitions of a ULONG value == Syntax == <nowiki>XBAPI VOID NTAPI RtlFillMemoryUlong (..."
wikitext
text/x-wiki
{{KernelExport|name=RtlFillMemory|ordinal=284}}
Fills a specified memory area with repetitions of a ULONG value
== Syntax ==
<nowiki>XBAPI VOID NTAPI RtlFillMemoryUlong
(
PVOID Destination,
SIZE_T Length,
ULONG Pattern
);</nowiki>
The original Windows NT function is documented in the MSDN: [https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/wdm/nf-wdm-rtlfillmemory RtlFillMemory]
== Parameters ==
=== Destination (PVOID) ===
A pointer to the (ULONG-aligned) memory block which is to be filled
=== Length (SIZE_T) ===
The length of the memory block which is to be filled
=== Pattern (ULONG) ===
The ULONG-value with which the memory block will be filled
== Return Value ==
RtlFillMemory returns '''VOID'''.
299f4912223dbf7e88e28ff074d9c5bb33274b4d
User:Grovespaz/Kernel/XeUnloadSection
2
3963
6496
2018-09-01T07:56:27Z
Grovespaz
2503
Created page with "{{KernelExport|name=XeUnloadSection|ordinal=328}} Decrements the reference count of the section and unloads it if the reference count reaches zero. == Syntax == <nowiki>XBAP..."
wikitext
text/x-wiki
{{KernelExport|name=XeUnloadSection|ordinal=328}}
Decrements the reference count of the section and unloads it if the reference count reaches zero.
== Syntax ==
<nowiki>XBAPI NTSTATUS NTAPI XeUnloadSection
(
IN OUT PXBEIMAGE_SECTION Section
);</nowiki>
== Parameters ==
=== Section (PXBEIMAGE_SECTION) ===
Direction: IN OUT
The section to be unloaded.
== Return Value ==
XeUnloadSection returns '''NTSTATUS''': STATUS_SUCCESS or the error..
25bbd5d2c8b193c9329c227892bd5085055a303e
User:Grovespaz/Kernel/RtlUpcaseUnicodeToMultiByteN
2
3964
6498
2018-09-01T08:03:16Z
Grovespaz
2503
Created page with "{{KernelExport|name=RtlUpcaseUnicodeToMultiByteN|ordinal=315}} <!-- Please add documentation here --> The original Windows NT function is documented in the MSDN: [https://doc..."
wikitext
text/x-wiki
{{KernelExport|name=RtlUpcaseUnicodeToMultiByteN|ordinal=315}}
<!-- Please add documentation here -->
The original Windows NT function is documented in the MSDN: [https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntifs/nf-ntifs-rtlupcaseunicodetomultibyten RtlUpcaseUnicodeToMultiByteN]
== Syntax ==
<nowiki>XBAPI NTSTATUS NTAPI RtlUpcaseUnicodeToMultiByteN
(
PCHAR MultiByteString,
ULONG MaxBytesInMultiByteString,
PULONG BytesInMultiByteString,
PWSTR UnicodeString,
ULONG BytesInUnicodeString
);</nowiki>
== Parameters ==
=== MultiByteString ===
=== MaxBytesInMultiByteString ===
=== BytesInMultiByteString ===
=== UnicodeString ===
=== BytesInUnicodeString ===
== Return Value ==
RtlUpcaseUnicodeToMultiByteN returns '''NTSTATUS'''.
181d15341f6aa83cceaddbe6dddb875a4844de0a
User:Grovespaz/Kernel/XeUnloadSection
2
3963
6499
6496
2018-09-01T08:07:31Z
Grovespaz
2503
wikitext
text/x-wiki
{{KernelExport|name=XeUnloadSection|ordinal=328}}
Decrements the reference count of the section and unloads it if the reference count reaches zero.
== Syntax ==
<nowiki>XBAPI NTSTATUS NTAPI XeUnloadSection
(
IN OUT PXBEIMAGE_SECTION Section
);</nowiki>
== Parameters ==
=== Section ===
The section to be unloaded.
== Return Value ==
XeUnloadSection returns '''NTSTATUS''': STATUS_SUCCESS or the error..
d3c5f86675a0931214e06a6fd6886ee03a390f65
Exploits
0
3751
6500
6494
2018-09-01T23:34:21Z
JayFoxRox
2
List my 2 most promising findings from the past week of exploit experiments
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
a12d87474fb93e47d0a27937aa14536c0eb8d09d
6501
6500
2018-09-01T23:37:34Z
JayFoxRox
2
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-explot, audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-03-04
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
19846af6d44c275b960b9d45a94498dae557f568
6519
6501
2018-09-12T18:17:01Z
DaveX
2487
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
d08d41ac23295e5e26fc2d70ccdabeb871175fe0
6538
6519
2018-09-27T13:53:01Z
JayFoxRox
2
Added DVD Dongle "Hacking!" section from Xbox-Linux wiki
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be succssful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
855885d71c2f70a4fe31dd4e37b26468be219a72
EEPROM
0
3742
6502
6375
2018-09-02T07:33:37Z
KaosEngineer
2482
Language and value stored in the configuration EEPROM (little endian LeastSigByte at offset 0x90 is the only byte with a non-0x00 value).
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID
* English 0x01 0x00 0x00 0x00
* Japanese 0x02 0x00 0x00 0x00
* German 0x03 0x00 0x00 0x00
* French 0x04 0x00 0x00 0x00
* Spanish 0x05 0x00 0x00 0x00
* Italian 0x06 0x00 0x00 0x00
* Korean 0x07 0x00 0x00 0x00
* Chinese 0x08 0x00 0x00 0x00
* Portuguese 0x09 0x00 0x00 0x00
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
const uint32_t num_dwords = section_data_length >> 2;
uint64_t checksum = 0;
uint32_t carry_count = 0;
for(uint32_t loop_count = num_dwords; loop_count > 0; loop_count--) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
32c32de8a262d61ae88ca87004713bc7781eeb46
6503
6502
2018-09-02T07:41:15Z
KaosEngineer
2482
Reformatted values into a table instead of bullet point list.
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set) 1 byte at offset 0x90 data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Language !! EEPROM Value @ 0x90
|-
| English
| 0x01
|-
| Japanese
| 0x02
|-
| German
| 0x03
|-
| French
| 0x04
|-
| Spanish
| 0x05
|-
| Italian
| 0x06
|-
| Korean
| 0x07
|-
| Chinese
| 0x08
|-
| Portuguese
| 0x09
|}
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
const uint32_t num_dwords = section_data_length >> 2;
uint64_t checksum = 0;
uint32_t carry_count = 0;
for(uint32_t loop_count = num_dwords; loop_count > 0; loop_count--) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
b5287d7eb441ef5e8be27fba8030838549e6fe04
MCPX
0
3671
6504
5829
2018-09-02T21:33:32Z
DaveX
2487
added note about the PC speaker
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
The MCPX is also the home to the secret [[MCPX ROM]].
And it's also the home of the famous PC Speaker Signal. <br \>
One just has to solder a Speaker on (MXPC pin L21) and it can be used just like on the PC.<br \>
For some test code see [https://github.com/0DaveX/beep/ https://github.com/0DaveX/beep/]
[[File:XboxWithPcSpkr.jpg]] <br \>
[[File:SolderPoints.jpg]]
5c3dddb880f4e79c9e757abb110addb6ed0a7dad
6505
6504
2018-09-02T21:55:26Z
DaveX
2487
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
The MCPX is also the home to the secret [[MCPX ROM]].
And it's also the home of the famous PC Speaker Signal. <br \>
One just has to solder a Speaker on (MXPC pin L21) and it can be used just like on the PC.<br \>
For some test code see [https://github.com/0DaveX/beep/ https://github.com/0DaveX/beep/]
[[File:XboxWithPcSpkr.jpg]] <br \>
[[File:XboxPcSpkrSolderPoints.jpg]]
ee092e6d0891e0e947d17c30a48dc4acebfe065d
6506
6505
2018-09-03T01:23:47Z
DaveX
2487
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
The MCPX is also the home to the secret [[MCPX ROM]].
And it's also the home of the famous PC Speaker Signal. <br \>
One just has to solder a Speaker on (MCPX pin L21) and it can be used just like on the PC.<br \>
For some test code see [https://github.com/0DaveX/beep/ https://github.com/0DaveX/beep/]
[[File:XboxWithPcSpkr.jpg]] <br \>
[[File:XboxPcSpkrSolderPoints.jpg]]
cd452ee5426ccfb18a86a732380e87f4809e4962
6509
6506
2018-09-03T19:57:12Z
JayFoxRox
2
More technical
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
=== ROM ===
The MCPX is home to the secret [[MCPX ROM]].
=== Pin L21: PC Speaker ===
The MCPX has PC Speaker pin which can be controlled using [the standard PC Speaker interface https://wiki.osdev.org/PC_Speaker].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin and to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
[[File:XboxWithPcSpkr.jpg]] <br \>
[[File:XboxPcSpkrSolderPoints.jpg]]
1e622d45792d47fa155b90d7d8e78d17ef89fe4a
6529
6509
2018-09-16T21:01:47Z
DaveX
2487
/* Pin L21: PC Speaker */
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
=== ROM ===
The MCPX is home to the secret [[MCPX ROM]].
=== Pin L21: PC Speaker ===
The MCPX has PC Speaker pin which can be controlled using [the standard PC Speaker interface https://wiki.osdev.org/PC_Speaker].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin and to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
[[File:XboxWithPcSpkr.jpg|left|500px]] <br \>
[[File:XboxPcSpkrSolderPoints.jpg|left|500px]]
3de6480b1ca6c841ba8fe0bcaa83b4f3ff6698f3
6530
6529
2018-09-18T22:12:24Z
DaveX
2487
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
=== ROM ===
The MCPX is home to the secret [[MCPX ROM]].
=== Pin L21: PC Speaker ===
The MCPX has PC Speaker pin which can be controlled using [the standard PC Speaker interface https://wiki.osdev.org/PC_Speaker].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin and to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
[[File:XboxWithPcSpkr.jpg|left|500px]] <br \>
[[File:XboxPcSpkrTrace.jpg|left|500px]] <br \>
[[File:XboxPcSpkrSolderPoints.jpg|left|500px]]
e0853fb5482a637c77080aaf5d3effb3d9cd3e42
6532
6530
2018-09-18T22:28:02Z
JayFoxRox
2
Fix link again
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
=== ROM ===
The MCPX is home to the secret [[MCPX ROM]].
=== Pin L21: PC Speaker ===
The MCPX has PC Speaker pin which can be controlled using [https://wiki.osdev.org/PC_Speaker the standard PC Speaker interface].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin and to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
[[File:XboxWithPcSpkr.jpg|left|500px]] <br \>
[[File:XboxPcSpkrTrace.jpg|left|500px]] <br \>
[[File:XboxPcSpkrSolderPoints.jpg|left|500px]]
d705c28a4bd4a2e78a43caad9262148c36bdc589
6533
6532
2018-09-18T23:36:26Z
DaveX
2487
/* Pin L21: PC Speaker */
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
=== ROM ===
The MCPX is home to the secret [[MCPX ROM]].
=== Pin L21: PC Speaker ===
The MCPX has PC Speaker pin which can be controlled using [https://wiki.osdev.org/PC_Speaker the standard PC Speaker interface].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin and to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
<gallery mode="slideshow">
Image:XboxWithPcSpkr.jpg|''[[commons:Astronotus ocellatus|Astronotus ocellatus]]'' (Oscar)
Image:XboxPcSpkrTrace.jpg|''[[commons:Salmo salar|Salmo salar]]'' (Salmon Larva)
Image:XboxPcSpkrSolderPoints.jpg|''[[commons:Epinephelus lanceolatus|Epinephelus lanceolatus]]'' (Giant grouper)
</gallery>
dabc7df5c897647c424e333e4b64126b85f068a3
6534
6533
2018-09-18T23:42:10Z
DaveX
2487
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers[https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
=== ROM ===
The MCPX is home to the secret [[MCPX ROM]].
=== Pin L21: PC Speaker ===
The MCPX has PC Speaker pin which can be controlled using [https://wiki.osdev.org/PC_Speaker the standard PC Speaker interface].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin and to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
<gallery mode="slideshow">
Image:XboxWithPcSpkr.jpg|'' ''
Image:XboxPcSpkrTrace.jpg|'' ''
Image:XboxPcSpkrSolderPoints.jpg|'' ''
</gallery>
892942744274f80571f106cf29dec9adda00c63b
DVD Emulator
0
3821
6507
6356
2018-09-03T17:26:39Z
Codeasm
2480
/* Resources */ changed to working link.
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding witch files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and posibly potencial faults that could occur.
The Hardware required for this where a Developement kit (with the DVD emulation board) a sort of scsi cable and a XDK-Raptor card.{{citation needed}}
The complete kit, a Raptor PCI Scsi card and Hardisk was numbered: 940-75004 Rev.01
two or more versions of the PCI scsi card are known:
* 700-75307 Rev.01
* 700-75307 Rev 03 [https://assemblergames.com/threads/sealed-xbox-raptor-card-for-xdk-dvd-emu.41763/ Assemblergames](posibly same as rev1?)
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
For development it wasnt the fastest way to get an executable to the xbox, and for homebrew its pretty useless.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
== Resources ==
* [https://imgur.com/a/ROMYa Images (CC0 License) by Codeasm with detailed shots of the DVD emulation board and serial board]
fc71cfdcf511601929866b89bf7c6a332e9755ec
Network
0
3692
6508
6406
2018-09-03T18:59:52Z
JayFoxRox
2
/* Wireless adapter */
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventualy an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
=== Wireless adapter ===
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox setup disc (wich would update the dashboard if necessary).
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== System Link ==
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
b12986155da97ea33a873d6b156fe1150314aeee
6540
6508
2018-10-02T23:43:34Z
JayFoxRox
2
/* System Link */
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventualy an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
=== Wireless adapter ===
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox setup disc (wich would update the dashboard if necessary).
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== System Link ==
=== Secured traffic ===
Xbox network traffic is secured through [[wikipedia:IPSec|IPSec]]. The implementation appears to be similar to [https://tools.ietf.org/html/rfc3948#section-2.1|RFC 3498, Section 2.1] from 2005 which was co-authored by Microsoft.
The protocol uses UDP port 3074 which is also registered with the IANA for use in the Xbox[https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=3074].
Each Xbox uses the IP 0.0.0.1, so addressing relies on MAC-addresses{{FIXME|reason=Confirm this}}.
The specific implementation in the Xbox uses TripleDES ([https://tools.ietf.org/html/rfc1851|RFC 1851]) for encryption, and SHA1-96 as [[wikipedia:HMAC|HMAC]].
==== Key derivation ====
The following keys are involved in generating the actual network crypto-keys:
* XboxLANKey (Kernel export)
* Game specific LAN Key (XBE Certificate Header)
The algorithm to generate the final keys, is this:
<pre>
LAN-Hash_1 = HMAC(XboxLANKey, concatenate(0x00, XBE-LAN-Key))
LAN-Hash_2 = HMAC(XboxLANKey, concatenate(0x01, XBE-LAN-Key))
LAN-Hash = concatenate(LAN-Hash_1, LAN-Hash_2)
LAN-SHA = LAN-Hash_0_to_15
LAN-DES = XcDESKeyParity(LAN-Hash_16_to_39)
</pre>
[[Kernel/XcDESKeyParity|XcDESKeyParity]] is the same as the respective function in the Xbox kernel.
==== Broadcast messages ====
Because no security association exists for broadcast messages, these are handled differently.
A common use case for broadcast messages is a server announce request / response.
Broadcast messages are send to 255.255.255.255 (MAC-address: FF:FF:FF:FF:FF:FF) using SPI 0xFFFFFFFF and Sequence Number 0xFFFFFFFF.
A random IV is chosen, but nothing prevents re-using an IV.
==== Security association ====
Most messages require an SA between devices{{FIXME|reason=Look into this}}.
=== XDK API ===
{{FIXME|reason=This probably shouldn't be here? there should be dedicated articles for the XDK APIs}}
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|}
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Matchmaking servers ===
=== Game servers ===
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Xbox Live Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|-
|
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
59c95a67b5c79aed7a69274518d32825a211ff08
6546
6540
2018-10-04T19:05:32Z
JayFoxRox
2
Section moved to Xbox Live article due to significance and for possible growth
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventualy an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
=== Wireless adapter ===
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox setup disc (wich would update the dashboard if necessary).
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== System Link ==
=== Secured traffic ===
Xbox network traffic is secured through [[wikipedia:IPSec|IPSec]]. The implementation appears to be similar to [https://tools.ietf.org/html/rfc3948#section-2.1|RFC 3498, Section 2.1] from 2005 which was co-authored by Microsoft.
The protocol uses UDP port 3074 which is also registered with the IANA for use in the Xbox[https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=3074].
Each Xbox uses the IP 0.0.0.1, so addressing relies on MAC-addresses{{FIXME|reason=Confirm this}}.
The specific implementation in the Xbox uses TripleDES ([https://tools.ietf.org/html/rfc1851|RFC 1851]) for encryption, and SHA1-96 as [[wikipedia:HMAC|HMAC]].
==== Key derivation ====
The following keys are involved in generating the actual network crypto-keys:
* XboxLANKey (Kernel export)
* Game specific LAN Key (XBE Certificate Header)
The algorithm to generate the final keys, is this:
<pre>
LAN-Hash_1 = HMAC(XboxLANKey, concatenate(0x00, XBE-LAN-Key))
LAN-Hash_2 = HMAC(XboxLANKey, concatenate(0x01, XBE-LAN-Key))
LAN-Hash = concatenate(LAN-Hash_1, LAN-Hash_2)
LAN-SHA = LAN-Hash_0_to_15
LAN-DES = XcDESKeyParity(LAN-Hash_16_to_39)
</pre>
[[Kernel/XcDESKeyParity|XcDESKeyParity]] is the same as the respective function in the Xbox kernel.
==== Broadcast messages ====
Because no security association exists for broadcast messages, these are handled differently.
A common use case for broadcast messages is a server announce request / response.
Broadcast messages are send to 255.255.255.255 (MAC-address: FF:FF:FF:FF:FF:FF) using SPI 0xFFFFFFFF and Sequence Number 0xFFFFFFFF.
A random IV is chosen, but nothing prevents re-using an IV.
==== Security association ====
Most messages require an SA between devices{{FIXME|reason=Look into this}}.
=== XDK API ===
{{FIXME|reason=This probably shouldn't be here? there should be dedicated articles for the XDK APIs}}
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|}
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
e7995e4178b03e7ea19285381745fc14d8992ae7
6548
6546
2018-10-04T19:07:52Z
JayFoxRox
2
Moved to System Link article, as it is signifcant and will likely grow in the future
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventualy an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The Xbox has a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
Port 3074 UDP/TCP is reserved for Xbox communications.
== Hardware ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips. The Xbox Linux team used the binary drivers from Nvidia.
=== Wireless adapter ===
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox setup disc (wich would update the dashboard if necessary).
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== Heartbeat ==
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
a6b481c82745866cc465bde09e707779bb96890d
Halo: Combat Evolved
0
3731
6510
5375
2018-09-05T23:48:39Z
Ernegien
2491
wikitext
text/x-wiki
{{Game}}
===Debugging===
To enable debugging of the original NTSC version with xbdm (be sure to use the retail xbdm version 5455 if on a retail box due to low memory constraints) replace the single instance of <code>6A 00 FF 74 24 08 E8 35</code> with <code>33 C0 40 C2 04 00 E8 35</code> in the default.xbe which will skip a call to <code>XnTerm</code>.
28e3b9b08373f4ec51880e98c15a34d84d8b7dd5
6544
6510
2018-10-03T00:24:02Z
JayFoxRox
2
Add some of my notes regarding protocol
wikitext
text/x-wiki
{{Game}}
=== Debugging ===
To enable debugging of the original NTSC version with xbdm (be sure to use the retail xbdm version 5455 if on a retail box due to low memory constraints) replace the single instance of <code>6A 00 FF 74 24 08 E8 35</code> with <code>33 C0 40 C2 04 00 E8 35</code> in the default.xbe which will skip a call to <code>XnTerm</code>.
=== System-Link protocol ===
The messages are encapsulated in Xbox secured network traffic.
<pre>
enum GameMode {
CTF = 0,
Slayer = 1,
Oddball = 2,
King = 3,
Race = 4
};
</pre>
==== Server announce request ====
This is a broadcast message from UDP Port 5151 to port 5150.
The packet is 16 bytes long.
<pre>
b'\x01\x0c\x01\x14\x1f\x00\x01zLa(\xe9\x03\xfc\xf7\x00' # Python string
</pre>
==== Server announce response ====
This is a broadcast message from UDP Port 5150 to port 5151.
The packet is 280 bytes long.
<pre>
struct {
...
// assert(udp_payload[43:47] == bytes([0x0C,0x00,0x00,0x50]));
uint32_t unk47; // +47
uint32_t unk51; // +51
uint16_t unk55; // +55
uint32_t unk57; // +57
wchar_t server_name[62]; // +61 Only 15 symbols will be displayed
char map_path[128]; // +123
...
uint16_t game_mode; // +251
uint16_t unk253; // +253
uint16_t player_count; // +255
uint16_t unk257; // +257
uint16_t game_mode_parameter; // +259
// 1 = game in progress
// 2 = accepting players (takes priority over "game in progress")
// 4 = team game (otherwise: free for all)
// If neither 1 or 2 is provided, then the game is "(closed)"
uint16_t flags; // +261
char weird[16]; // +263 contains ASCII string "$;$Dage in a bot"
uint8_t unk279; // +279
};
</pre>
319951e51cef13203744f05484387ab52d780d6c
Soundtracks
0
3965
6511
2018-09-06T03:05:46Z
Root670
2504
Created page with "The Xbox allows for soundstracks to be stored on the harddrive and played in-game. Music is copied from audio CDs using the dashboard and converted to WMA audio files. The not..."
wikitext
text/x-wiki
The Xbox allows for soundstracks to be stored on the harddrive and played in-game. Music is copied from audio CDs using the dashboard and converted to WMA audio files. The notes gathered here are from decompiling StDB.dll from ''Xbox Soundtrack Manager''.
== Folder Structure ==
All soundtrack related data is stored in E:\TDATA\fffe0000. Songs are organized into groups of folders containing up to 6 WMA files. Zero-padded 4 decimal integers are used for the folder names, and zero-padded 8 decimal integers are used for the WMA file names. Metadata such as song title and which soundtrack a song belongs to is stored in the ST.DB file
== ST.DB ==
The ST.DB file contains information about soundtracks loaded on the Xbox. Up to 100 soundtracks with 500 songs each can be used. Each header and struct described below is padded to 512 bytes.
File Layout:
<pre>(start of file)
0000 Main Header
0200 Soundtrack Struct 1
0400 [Soundtrack Struct 2]
...
CA00 Song Group 1
CC00 [Song Group 2]
...
(end of file)
</pre>
=== Main Header ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x01 0x00 0x00 0x00
|-
| int32
| numSoundtracks
|
|-
| int32
| nextSoundtrackId
|
|-
| int32
| soundtrackIds[100]
|
|-
| int32
| nextSongId
|
|-
| char
| padding[96]
|
|}
=== Soundtrack Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x71 0x13 0x02 0x00
|-
| int32
| id
|
|-
| int32
| numSongGroups
|
|-
| int32
| songGroupIds
|
|-
| int32
| totalTimeMilliseconds
|
|-
| wchar
| name[64]
| Unicode string
|-
| char
| padding[64]
|
|}
=== Song Group Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x73 0x10 0x03 0x00
|-
| int32
| soundtrackId
|
|-
| int32
| id
|
|-
| int32
| padding
|
|-
| Song Struct
| songs[6]
|
|-
| char
| padding[64]
|
|}
=== Song Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| id
|
|-
| int32
| timeMilliseconds
|
|-
| wchar
| name[64]
| Unicode string
|-
| char
| padding[64]
|
|}
== Default Encoding Settings ==
These are the encoding settings used by the dashboard when encoding WMA files:
{| class="wikitable"
! Key
! Value
|-
| Format
| WMA Version 2
|-
| Codec Description
| Windows Media Audio V8
|-
| Encoding Tool
| Windows Media Encoding Utility 8.0.0.403
|-
| Bit Rate
| 128 kbps
|-
| Channels
| 2
|-
| Sampling Rate
| 44.1 kHz
|-
| Bit Depth
| 16 bit
|}
The track number is added to the metadata.
668039349abf9ce55b86b3487f12b836a977d5eb
6515
6511
2018-09-07T02:39:25Z
Root670
2504
/* ST.DB */ Corrected song storage in the song group struct and type of numSongGroups in the soundtrack struct.
wikitext
text/x-wiki
The Xbox allows for soundstracks to be stored on the harddrive and played in-game. Music is copied from audio CDs using the dashboard and converted to WMA audio files. The notes gathered here are from decompiling StDB.dll from ''Xbox Soundtrack Manager''.
== Folder Structure ==
All soundtrack related data is stored in E:\TDATA\fffe0000. Songs are organized into groups of folders containing up to 6 WMA files. Zero-padded 4 decimal integers are used for the folder names, and zero-padded 8 decimal integers are used for the WMA file names. Metadata such as song title and which soundtrack a song belongs to is stored in the ST.DB file
== ST.DB ==
The ST.DB file contains information about soundtracks loaded on the Xbox. Up to 100 soundtracks with 500 songs each can be used. Each header and struct described below is padded to 512 bytes.
File Layout:
<pre>(start of file)
0000 Main Header
0200 Soundtrack Struct 1
0400 [Soundtrack Struct 2]
...
CA00 Song Group 1
CC00 [Song Group 2]
...
(end of file)
</pre>
=== Main Header ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x01 0x00 0x00 0x00
|-
| int32
| numSoundtracks
|
|-
| int32
| nextSoundtrackId
|
|-
| int32
| soundtrackIds[100]
|
|-
| int32
| nextSongId
|
|-
| char
| padding[96]
|
|}
=== Soundtrack Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x71 0x13 0x02 0x00
|-
| int32
| id
|
|-
| uint32
| numSongGroups
|
|-
| int32
| songGroupIds
|
|-
| int32
| totalTimeMilliseconds
|
|-
| wchar
| name[64]
| Unicode string
|-
| char
| padding[64]
|
|}
=== Song Group Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x73 0x10 0x03 0x00
|-
| int32
| soundtrackId
|
|-
| int32
| id
|
|-
| int32
| padding
|
|-
| int32
| songId[6]
|
|-
| int32
| songTimeMilliseconds[6]
|
|-
| wchar
| songName[384]
| 6 Unicode strings, each padded to 64 characters
|-
| char
| padding[64]
|
|}
== Default Encoding Settings ==
These are the encoding settings used by the dashboard when encoding WMA files:
{| class="wikitable"
! Key
! Value
|-
| Format
| WMA Version 2
|-
| Codec Description
| Windows Media Audio V8
|-
| Encoding Tool
| Windows Media Encoding Utility 8.0.0.403
|-
| Bit Rate
| 128 kbps
|-
| Channels
| 2
|-
| Sampling Rate
| 44.1 kHz
|-
| Bit Depth
| 16 bit
|}
The track number is added to the metadata.
75c847aa72bf971ac37ad67096dcb08bc4369cae
6516
6515
2018-09-09T02:47:50Z
JayFoxRox
2
Marked unicode with FIXME regarding encoding; Marked confusing magic values with FIXME regarding endianess / type
wikitext
text/x-wiki
The Xbox allows for soundstracks to be stored on the harddrive and played in-game. Music is copied from audio CDs using the dashboard and converted to WMA audio files. The notes gathered here are from decompiling StDB.dll from ''Xbox Soundtrack Manager''.
== Folder Structure ==
All soundtrack related data is stored in E:\TDATA\fffe0000. Songs are organized into groups of folders containing up to 6 WMA files. Zero-padded 4 decimal integers are used for the folder names, and zero-padded 8 decimal integers are used for the WMA file names. Metadata such as song title and which soundtrack a song belongs to is stored in the ST.DB file
== ST.DB ==
The ST.DB file contains information about soundtracks loaded on the Xbox. Up to 100 soundtracks with 500 songs each can be used. Each header and struct described below is padded to 512 bytes.
File Layout:
<pre>(start of file)
0000 Main Header
0200 Soundtrack Struct 1
0400 [Soundtrack Struct 2]
...
CA00 Song Group 1
CC00 [Song Group 2]
...
(end of file)
</pre>
=== Main Header ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x01 0x00 0x00 0x00 {{FIXME|reason=Is this 0x00000001 or 0x01000000 when read as int32_t via CPU? Is the type int32_t or uint8_t[4]?}}
|-
| int32
| numSoundtracks
|
|-
| int32
| nextSoundtrackId
|
|-
| int32
| soundtrackIds[100]
|
|-
| int32
| nextSongId
|
|-
| char
| padding[96]
|
|}
=== Soundtrack Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x71 0x13 0x02 0x00 {{FIXME|reason=Is this 0x00021371 or 0x71130200 when read as int32_t via CPU? Is the type int32_t or uint8_t[4]?}}
|-
| int32
| id
|
|-
| uint32
| numSongGroups
|
|-
| int32
| songGroupIds
|
|-
| int32
| totalTimeMilliseconds
|
|-
| wchar
| name[64]
| Unicode{{FIXME|reason=Encoding? UCS-2?}} string
|-
| char
| padding[64]
|
|}
=== Song Group Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x73 0x10 0x03 0x00 {{FIXME|reason=Is this 0x00031073 or 0x73100300 when read as int32_t via CPU? Is the type int32_t or uint8_t[4]?}}
|-
| int32
| soundtrackId
|
|-
| int32
| id
|
|-
| int32
| padding
|
|-
| int32
| songId[6]
|
|-
| int32
| songTimeMilliseconds[6]
|
|-
| wchar
| songName[384]
| 6 Unicode{{FIXME|reason=Encoding? UCS-2?}} strings, each padded to 64 characters
|-
| char
| padding[64]
|
|}
== Default Encoding Settings ==
These are the encoding settings used by the dashboard when encoding WMA files:
{| class="wikitable"
! Key
! Value
|-
| Format
| WMA Version 2
|-
| Codec Description
| Windows Media Audio V8
|-
| Encoding Tool
| Windows Media Encoding Utility 8.0.0.403
|-
| Bit Rate
| 128 kbps
|-
| Channels
| 2
|-
| Sampling Rate
| 44.1 kHz
|-
| Bit Depth
| 16 bit
|}
The track number is added to the metadata.
0af114f9c0bdc28bc6cb6507f7450c81d908a4d4
6520
6516
2018-09-16T15:57:37Z
Root670
2504
Clarified endianness for values in main header and structs.
wikitext
text/x-wiki
The Xbox allows for soundstracks to be stored on the harddrive and played in-game. Music is copied from audio CDs using the dashboard and converted to WMA audio files. The notes gathered here are from decompiling StDB.dll from ''Xbox Soundtrack Manager''.
== Folder Structure ==
All soundtrack related data is stored in E:\TDATA\fffe0000. Songs are organized into groups of folders containing up to 6 WMA files. Zero-padded 4 decimal integers are used for the folder names, and zero-padded 8 decimal integers are used for the WMA file names. Metadata such as song title and which soundtrack a song belongs to is stored in the ST.DB file
== ST.DB ==
The ST.DB file contains information about soundtracks loaded on the Xbox. Up to 100 soundtracks with 500 songs each can be used. Each header and struct described below is padded to 512 bytes.
File Layout:
<pre>(start of file)
0000 Main Header
0200 Soundtrack Struct 1
0400 [Soundtrack Struct 2]
...
CA00 Song Group 1
CC00 [Song Group 2]
...
(end of file)
</pre>
=== Main Header ===
All values are little-endian.
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00000001
|-
| int32
| numSoundtracks
|
|-
| int32
| nextSoundtrackId
|
|-
| int32
| soundtrackIds[100]
|
|-
| int32
| nextSongId
|
|-
| char
| padding[96]
|
|}
=== Soundtrack Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00021371
|-
| int32
| id
|
|-
| uint32
| numSongGroups
|
|-
| int32
| songGroupIds
|
|-
| int32
| totalTimeMilliseconds
|
|-
| wchar
| name[64]
| Unicode{{FIXME|reason=Encoding? UCS-2?}} string
|-
| char
| padding[64]
|
|}
=== Song Group Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00031073
|-
| int32
| soundtrackId
|
|-
| int32
| id
|
|-
| int32
| padding
|
|-
| int32
| songId[6]
|
|-
| int32
| songTimeMilliseconds[6]
|
|-
| wchar
| songName[384]
| 6 Unicode{{FIXME|reason=Encoding? UCS-2?}} strings, each padded to 64 characters
|-
| char
| padding[64]
|
|}
== Default Encoding Settings ==
These are the encoding settings used by the dashboard when encoding WMA files:
{| class="wikitable"
! Key
! Value
|-
| Format
| WMA Version 2
|-
| Codec Description
| Windows Media Audio V8
|-
| Encoding Tool
| Windows Media Encoding Utility 8.0.0.403
|-
| Bit Rate
| 128 kbps
|-
| Channels
| 2
|-
| Sampling Rate
| 44.1 kHz
|-
| Bit Depth
| 16 bit
|}
The track number is added to the metadata.
0fb36a9eac1881c22316661080897288dfd081d4
6521
6520
2018-09-16T15:59:49Z
Root670
2504
/* ST.DB */ Move endianness note to beginning of ST.DB section.
wikitext
text/x-wiki
The Xbox allows for soundstracks to be stored on the harddrive and played in-game. Music is copied from audio CDs using the dashboard and converted to WMA audio files. The notes gathered here are from decompiling StDB.dll from ''Xbox Soundtrack Manager''.
== Folder Structure ==
All soundtrack related data is stored in E:\TDATA\fffe0000. Songs are organized into groups of folders containing up to 6 WMA files. Zero-padded 4 decimal integers are used for the folder names, and zero-padded 8 decimal integers are used for the WMA file names. Metadata such as song title and which soundtrack a song belongs to is stored in the ST.DB file
== ST.DB ==
The ST.DB file contains information about soundtracks loaded on the Xbox. Up to 100 soundtracks with 500 songs each can be used. Each header and struct described below is padded to 512 bytes, and all values are stored as little-endian.
'''File Layout:'''
<pre>(start of file)
0000 Main Header
0200 Soundtrack Struct 1
0400 [Soundtrack Struct 2]
...
CA00 Song Group 1
CC00 [Song Group 2]
...
(end of file)
</pre>
=== Main Header ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00000001
|-
| int32
| numSoundtracks
|
|-
| int32
| nextSoundtrackId
|
|-
| int32
| soundtrackIds[100]
|
|-
| int32
| nextSongId
|
|-
| char
| padding[96]
|
|}
=== Soundtrack Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00021371
|-
| int32
| id
|
|-
| uint32
| numSongGroups
|
|-
| int32
| songGroupIds
|
|-
| int32
| totalTimeMilliseconds
|
|-
| wchar
| name[64]
| Unicode{{FIXME|reason=Encoding? UCS-2?}} string
|-
| char
| padding[64]
|
|}
=== Song Group Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00031073
|-
| int32
| soundtrackId
|
|-
| int32
| id
|
|-
| int32
| padding
|
|-
| int32
| songId[6]
|
|-
| int32
| songTimeMilliseconds[6]
|
|-
| wchar
| songName[384]
| 6 Unicode{{FIXME|reason=Encoding? UCS-2?}} strings, each padded to 64 characters
|-
| char
| padding[64]
|
|}
== Default Encoding Settings ==
These are the encoding settings used by the dashboard when encoding WMA files:
{| class="wikitable"
! Key
! Value
|-
| Format
| WMA Version 2
|-
| Codec Description
| Windows Media Audio V8
|-
| Encoding Tool
| Windows Media Encoding Utility 8.0.0.403
|-
| Bit Rate
| 128 kbps
|-
| Channels
| 2
|-
| Sampling Rate
| 44.1 kHz
|-
| Bit Depth
| 16 bit
|}
The track number is added to the metadata.
1bae66fb7bb186c9c3cf01c7a812775dcc142947
Main Page
0
1
6512
6435
2018-09-06T03:10:41Z
Root670
2504
/* System Software */ Add link to Soundtracks page.
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Network]]
* [[Patents]]
* Find random stuff in [[Resources]]
bd91ce41b78ad5ebadf7bf393668ce912e5fa202
Dashboard
0
3772
6513
6470
2018-09-06T03:11:50Z
Root670
2504
/* See Also */ Add link to Soundtracks page.
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press {{input-y}}, {{input-x}} while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press "INFO" button on the DVD Playback Kit remote.
Only visible with DVD Playback Kit and Remote:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press {{input-y}}, {{input-x}} on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield{{FIXME|reason=replace lengthy explanation with a video of this}}.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, press {{input-y}} {{ input-x}} on the main screen not from any sub-menu, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
[[Hard Drive Files]]
[[Soundtracks]]
43b4379ffe5d76f19462eb18f099657a917dfc7e
6514
6513
2018-09-06T03:12:31Z
Root670
2504
/* See Also */ Format as list.
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press {{input-y}}, {{input-x}} while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press "INFO" button on the DVD Playback Kit remote.
Only visible with DVD Playback Kit and Remote:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press {{input-y}}, {{input-x}} on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield{{FIXME|reason=replace lengthy explanation with a video of this}}.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, press {{input-y}} {{ input-x}} on the main screen not from any sub-menu, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
* [[Hard Drive Files]]
* [[Soundtracks]]
04eaa6799ffe0a3adcd15f1dfe50d149130e9909
Shrek
0
3720
6517
5309
2018-09-10T17:06:42Z
JayFoxRox
2
Add Shrek deferred rendering information
wikitext
text/x-wiki
{{Game}}
=== Deferred Rendering ===
[[File:shrek-albedo.png|thumb|Albedo]]
[[File:shrek-normals.png|thumb|Normals]]
[[File:shrek-unk0.png|thumb|Lighting pass{{FIXME|reason=Might be something else}}]]
[[File:shrek-unk1.png|thumb|Lighting pass{{FIXME|reason=Might be something else}}]]
[[File:shrek-final.png|thumb|Final composition]]
Shrek uses [[wikipedia:Deferred Rendering]]. Rich Geldreich, a developer of the game, has written multiple articles about the topic[https://sites.google.com/site/richgel99/home].
fcb2affa67197d3392148895c6e9ae3ed5afbeae
6518
6517
2018-09-10T17:09:51Z
JayFoxRox
2
Make wikipedia link appear correctly
wikitext
text/x-wiki
{{Game}}
=== Deferred Rendering ===
[[File:shrek-albedo.png|thumb|Albedo]]
[[File:shrek-normals.png|thumb|Normals]]
[[File:shrek-unk0.png|thumb|Lighting pass{{FIXME|reason=Might be something else}}]]
[[File:shrek-unk1.png|thumb|Lighting pass{{FIXME|reason=Might be something else}}]]
[[File:shrek-final.png|thumb|Final composition]]
Shrek uses [[wikipedia:Deferred Rendering|Deferred Rendering]]. Rich Geldreich, a developer of the game, has written multiple articles about the topic[https://sites.google.com/site/richgel99/home].
c053cf4b49b8b4114277cd2b326c7fdb90441e72
File:XboxWithPcSpkr.jpg
6
3966
6522
2018-09-16T20:49:34Z
DaveX
2487
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Shrek-albedo.png
6
3967
6523
2018-09-16T20:50:10Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:XboxPcSpkrSolderPoints.jpg
6
3968
6524
2018-09-16T20:50:18Z
DaveX
2487
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Shrek-normals.png
6
3969
6525
2018-09-16T20:50:24Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Shrek-unk0.png
6
3970
6526
2018-09-16T20:50:39Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Shrek-unk1.png
6
3971
6527
2018-09-16T20:51:01Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Shrek-final.png
6
3972
6528
2018-09-16T20:51:18Z
JayFoxRox
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:XboxPcSpkrTrace.jpg
6
3973
6531
2018-09-18T22:13:16Z
DaveX
2487
Image by Andy Anderson
wikitext
text/x-wiki
Image by Andy Anderson
974ff9e9e318372f0c9ab495bf2aa4a5127b2240
6535
6531
2018-09-19T00:03:19Z
DaveX
2487
DaveX uploaded a new version of [[File:XboxPcSpkrTrace.jpg]]
wikitext
text/x-wiki
Image by Andy Anderson
974ff9e9e318372f0c9ab495bf2aa4a5127b2240
Xbox DVD Movie Playback Kit
0
3768
6536
6174
2018-09-27T13:46:44Z
JayFoxRox
2
Add rough protocol information based on lirc configurations
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used
// This appears to be some timer which counts down from ~0x9XY
// When it reaches 0x0040, it gets reset to 0x0041.
// So for very short presses you get high values, and for continously holding
// you get a repeating pattern: 0x0040, 0x0041, 0x0040, 0x0041, 0x0040, ...
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit {{FIXME|reason=Document the protocol here}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
=== Hacking ===
As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
7a72ff67186e7ef8f70c0e35543090fb96c87b30
6537
6536
2018-09-27T13:47:17Z
JayFoxRox
2
Remove hacking section (will be moved to exploit list)
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used
// This appears to be some timer which counts down from ~0x9XY
// When it reaches 0x0040, it gets reset to 0x0041.
// So for very short presses you get high values, and for continously holding
// you get a repeating pattern: 0x0040, 0x0041, 0x0040, 0x0041, 0x0040, ...
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit {{FIXME|reason=Document the protocol here}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
4d55e881074d47ea2de3b44e3dd677e29f94d7ca
6539
6537
2018-09-27T19:10:34Z
JayFoxRox
2
/* Infrared signals */
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used
// Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).
// A value close to 0x0040 is returned for continously holding a button.
// When holding, the value often goes back and forth between 0x0040 / 0x0041.
// It is unknown if the receiver / remote intentionally does this.
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit {{FIXME|reason=Document the protocol here}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/dump-dvd-kit Tool to dump DVD Dongle ROM]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
159019c53de04bfa2aae74d23cc47500e5add67a
Kernel/XcDESKeyParity
0
3974
6541
2018-10-02T23:56:38Z
JayFoxRox
2
Port from my Python code, but with added comments
wikitext
text/x-wiki
=== Pseudocode ===
<pre>
XBAPI VOID NTAPI XcDESKeyParity(IN OUT PUCHAR pbKey, IN ULONG dwKeyLength) {
// For each number between 0x0 and 0xF, this tells how many set bits there are.
const uint8_t parity_table[] = {
0x00, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x03,
0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04
};
// Count number of set bits in each byte, and flip the lowest bit if there's an even number.
// This forces each byte to have odd parity, as required by DES.
for(ULONG i = 0; i < dwKeyLength; i++) {
high_parity = parity_table[(pbKey[i] >> 4) & 0xF];
low_parity = parity_table[(pbKey[i] >> 0) & 0xF];
if ((high_parity + low_parity) % 2) == 0 {
pbKey[i] ^= 0x01;
}
}
return;
}
</pre>
95f1221231c990fc034a1964cf27fdf643ba7932
6542
6541
2018-10-02T23:58:44Z
JayFoxRox
2
wikitext
text/x-wiki
The ''XcDESKeyParity'' function turns a key into a DES key which requires odd-parity per byte.
=== Pseudocode ===
{{FIXME|reason=This should be removed from here, and instead we should just link to an actual implementation of the algorithm}}
<pre>
XBAPI VOID NTAPI XcDESKeyParity(IN OUT PUCHAR pbKey, IN ULONG dwKeyLength) {
// For each number between 0x0 and 0xF, this tells how many set bits there are.
const uint8_t parity_table[] = {
0x00, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x03,
0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04
};
// Count number of set bits in each byte, and flip the lowest bit if there's an even number.
// This forces each byte to have odd parity, as required by DES.
for(ULONG i = 0; i < dwKeyLength; i++) {
high_parity = parity_table[(pbKey[i] >> 4) & 0xF];
low_parity = parity_table[(pbKey[i] >> 0) & 0xF];
if ((high_parity + low_parity) % 2) == 0 {
pbKey[i] ^= 0x01;
}
}
return;
}
</pre>
bc5b433b65bc3065d49de720c0ec85d3694b1e9e
6543
6542
2018-10-03T00:03:27Z
JayFoxRox
2
wikitext
text/x-wiki
The ''XcDESKeyParity'' function turns a key into a DES key which requires odd-parity per byte.
{{FIXME|reason=Mention crypto vector}}
=== Links ===
* [https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/blob/f73114df61d943ba73b329a6e4bd6805254af243/src/CxbxKrnl/EmuKrnlXc.cpp#L234 XcDESKeyParity implementation in Cxbx-Reloaded]
5f3bbf2d37fdc231a8a709b8a5a7a7a2159e6966
Xbox Live
0
3693
6545
5113
2018-10-04T19:04:56Z
JayFoxRox
2
Split from Network article
wikitext
text/x-wiki
== Xbox Live ==
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Matchmaking servers ===
=== Game servers ===
=== XDK Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|}
88cff8a1a8aba5c982158e989f0e5c6de6dc296f
System Link
0
3975
6547
2018-10-04T19:07:17Z
JayFoxRox
2
Split from Network article
wikitext
text/x-wiki
=== Secured traffic ===
Xbox network traffic is secured through [[wikipedia:IPSec|IPSec]]. The implementation appears to be similar to [https://tools.ietf.org/html/rfc3948#section-2.1|RFC 3498, Section 2.1] from 2005 which was co-authored by Microsoft.
The protocol uses UDP port 3074 which is also registered with the IANA for use in the Xbox[https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=3074].
Each Xbox uses the IP 0.0.0.1, so addressing relies on MAC-addresses{{FIXME|reason=Confirm this}}.
The specific implementation in the Xbox uses TripleDES ([https://tools.ietf.org/html/rfc1851|RFC 1851]) for encryption, and SHA1-96 as [[wikipedia:HMAC|HMAC]].
==== Key derivation ====
The following keys are involved in generating the actual network crypto-keys:
* XboxLANKey (Kernel export)
* Game specific LAN Key (XBE Certificate Header)
The algorithm to generate the final keys, is this:
<pre>
LAN-Hash_1 = HMAC(XboxLANKey, concatenate(0x00, XBE-LAN-Key))
LAN-Hash_2 = HMAC(XboxLANKey, concatenate(0x01, XBE-LAN-Key))
LAN-Hash = concatenate(LAN-Hash_1, LAN-Hash_2)
LAN-SHA = LAN-Hash_0_to_15
LAN-DES = XcDESKeyParity(LAN-Hash_16_to_39)
</pre>
[[Kernel/XcDESKeyParity|XcDESKeyParity]] is the same as the respective function in the Xbox kernel.
==== Broadcast messages ====
Because no security association exists for broadcast messages, these are handled differently.
A common use case for broadcast messages is a server announce request / response.
Broadcast messages are send to 255.255.255.255 (MAC-address: FF:FF:FF:FF:FF:FF) using SPI 0xFFFFFFFF and Sequence Number 0xFFFFFFFF.
A random IV is chosen, but nothing prevents re-using an IV.
==== Security association ====
Most messages require an SA between devices{{FIXME|reason=Look into this}}.
=== XDK API ===
{{FIXME|reason=This probably shouldn't be here? there should be dedicated articles for the XDK APIs}}
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|}
6409934b7e47366b63240faca68ad7f0972b6905
Network
0
3692
6549
6548
2018-10-04T19:16:22Z
JayFoxRox
2
Move content around
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventually an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The XDK provides a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
The IANA registered port 3074 (UDP / TCP) is reserved for Xbox communications (See [[System Link]] and [[Xbox Live]]).
== Integrated network adapter ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips.
The Xbox MAC address is stored in the [[EEPROM]].
The network driver, including the protocol stack is contained in the XDK.
The kernel only contains a small number of exports to reset and get the state of the NIC.
The Xbox Linux team used the binary drivers from Nvidia{{citation-needed}}{{FIXME|reason=Wasn't the open-source forcedeth driver used?}}.
==== Heartbeat ====
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Wireless adapter ==
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox setup disc (wich would update the dashboard if necessary).
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
599da2ccc469fa0de53e55db6a0eb17f04c1fce9
6550
6549
2018-10-04T19:17:14Z
JayFoxRox
2
Used the wrong template name for citation needed
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventually an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The XDK provides a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
The IANA registered port 3074 (UDP / TCP) is reserved for Xbox communications (See [[System Link]] and [[Xbox Live]]).
== Integrated network adapter ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips.
The Xbox MAC address is stored in the [[EEPROM]].
The network driver, including the protocol stack is contained in the XDK.
The kernel only contains a small number of exports to reset and get the state of the NIC.
The Xbox Linux team used the binary drivers from Nvidia{{citation needed}}{{FIXME|reason=Wasn't the open-source forcedeth driver used?}}.
==== Heartbeat ====
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Wireless adapter ==
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox setup disc (wich would update the dashboard if necessary).
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp https://github.com/grayj/Jedi-Academy/blob/master/codemp/xbox/XBLive.cpp]
* [http://discerning.com/pdfbox/test/input/authentication.pdf http://discerning.com/pdfbox/test/input/authentication.pdf]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
cbb30163f442cfba3bfc68d4cb9964335b14bec7
Xbox Live
0
3693
6551
6545
2018-10-04T19:19:29Z
JayFoxRox
2
Remove topmost section
wikitext
text/x-wiki
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Matchmaking servers ===
=== Game servers ===
=== XDK Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|}
a739e328856d4c923f5f7ca61bd80a37a4544945
Main Page
0
1
6552
6512
2018-10-04T19:25:21Z
JayFoxRox
2
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
** [[Network]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[NVNet|Network Controller (NVNet)]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Patents]]
* Find random stuff in [[Resources]]
66745553a92b4ed84ed57c5dc5195e4915c1abf3
6553
6552
2018-10-04T19:26:09Z
JayFoxRox
2
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
** [[Network]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Other ==
* [[Patents]]
* Find random stuff in [[Resources]]
02a0e3ca8d45c4d8977f02f70f9732ca8f9be42f
System Link
0
3975
6554
6547
2018-10-05T03:28:22Z
JayFoxRox
2
Fix RFC links
wikitext
text/x-wiki
=== Secured traffic ===
Xbox network traffic is secured through [[wikipedia:IPSec|IPSec]]. The implementation appears to be similar to [https://tools.ietf.org/html/rfc3948#section-2.1 RFC 3498, Section 2.1] from 2005 which was co-authored by Microsoft.
The protocol uses UDP port 3074 which is also registered with the IANA for use in the Xbox[https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=3074].
Each Xbox uses the IP 0.0.0.1, so addressing relies on MAC-addresses{{FIXME|reason=Confirm this}}.
The specific implementation in the Xbox uses TripleDES ([https://tools.ietf.org/html/rfc1851 RFC 1851]) for encryption, and SHA1-96 as [[wikipedia:HMAC|HMAC]].
==== Key derivation ====
The following keys are involved in generating the actual network crypto-keys:
* XboxLANKey (Kernel export)
* Game specific LAN Key (XBE Certificate Header)
The algorithm to generate the final keys, is this:
<pre>
LAN-Hash_1 = HMAC(XboxLANKey, concatenate(0x00, XBE-LAN-Key))
LAN-Hash_2 = HMAC(XboxLANKey, concatenate(0x01, XBE-LAN-Key))
LAN-Hash = concatenate(LAN-Hash_1, LAN-Hash_2)
LAN-SHA = LAN-Hash_0_to_15
LAN-DES = XcDESKeyParity(LAN-Hash_16_to_39)
</pre>
[[Kernel/XcDESKeyParity|XcDESKeyParity]] is the same as the respective function in the Xbox kernel.
==== Broadcast messages ====
Because no security association exists for broadcast messages, these are handled differently.
A common use case for broadcast messages is a server announce request / response.
Broadcast messages are send to 255.255.255.255 (MAC-address: FF:FF:FF:FF:FF:FF) using SPI 0xFFFFFFFF and Sequence Number 0xFFFFFFFF.
A random IV is chosen, but nothing prevents re-using an IV.
==== Security association ====
Most messages require an SA between devices{{FIXME|reason=Look into this}}.
=== XDK API ===
{{FIXME|reason=This probably shouldn't be here? there should be dedicated articles for the XDK APIs}}
{| class="wikitable"
|+XNet* Functions
|-
! function
! description
|-
|XNetCreateKey(&xnkid, &xnkey)
|
|-
|XNetRegisterKey(&xnkid, &xnkey)
|Register the session key
|-
|XNetXnAddrToInAddr( pxnaddr, pxnkid, &pseudoIP )
|Convert the address to a winsock usable format
|-
|XNetUnregisterKey( &xbc.SessionID )
|
|-
|XNetGetTitleXnAddr( &hostAddr )
|Gets your XNADDR. Used by syslink, and lots of other people.
|-
|XNetGetEthernetLinkStatus()
|
|}
6d77976351980242eff4b552fd4b718202b4f812
Xbox Debug Monitor
0
3689
6555
5493
2018-10-06T02:04:16Z
JayFoxRox
2
There's a prefix for the number of bytes, this must be skipped and is important if you try to read beyond the end of the file
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a [[#Commands|command]] followed by <CR><LF> or <CR><NUL>.
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>[[#cmd_setsystime|setsystime]]</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>[[#cmd_keyxchg|keyxchg]]</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
In the command descriptions below, the following data types are used:
{| class="wikitable" style="margin: 0 auto"
! Type !! Description
|-
| DWORD || A 32-bit integer in hexadecimal format (e.g. <code>0x1234ABCD</code>).
|-
| QWORD || A 64-bit integer in hexadecimal format, but prefixed with 0q instead of 0x (e.g. <code>0q0123456789ABCDEF</code>).
|-
| STRING || An ASCII-encoded string, optionally surrounded by double quotes.
|}
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{{XBDM command|version=4039+|text=adminpw none|privs=manage}}
Clear the administrator password.
{{XBDM command|version=4039+|text=adminpw passwd=QWORD|privs=manage}}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{{XBDM command|text=getfile name=STRING}}
Retrieve the entire contents of the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
{{XBDM command|text=getfile name=STRING offset=DWORD size=DWORD}}
Retrieve <code>size</code> bytes starting at <code>offset</code> from the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
f30e70ef30a1170f0906544f694f6db62b16b9e8
6556
6555
2018-10-06T02:06:23Z
JayFoxRox
2
/* drivelist (List drive letters) */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a [[#Commands|command]] followed by <CR><LF> or <CR><NUL>.
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>[[#cmd_setsystime|setsystime]]</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>[[#cmd_keyxchg|keyxchg]]</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
In the command descriptions below, the following data types are used:
{| class="wikitable" style="margin: 0 auto"
! Type !! Description
|-
| DWORD || A 32-bit integer in hexadecimal format (e.g. <code>0x1234ABCD</code>).
|-
| QWORD || A 64-bit integer in hexadecimal format, but prefixed with 0q instead of 0x (e.g. <code>0q0123456789ABCDEF</code>).
|-
| STRING || An ASCII-encoded string, optionally surrounded by double quotes.
|}
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{{XBDM command|version=4039+|text=adminpw none|privs=manage}}
Clear the administrator password.
{{XBDM command|version=4039+|text=adminpw passwd=QWORD|privs=manage}}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
{{XBDM command|text=drivelist}}
Returns a string which contains the drive-letter for each accessible drive.
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{{XBDM command|text=getfile name=STRING}}
Retrieve the entire contents of the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
{{XBDM command|text=getfile name=STRING offset=DWORD size=DWORD}}
Retrieve <code>size</code> bytes starting at <code>offset</code> from the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum</span>====
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
4a9c4e24cf2f33ecaf36d247d43e7826414e268e
6558
6556
2018-10-07T13:43:58Z
JayFoxRox
2
/* getsum */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a [[#Commands|command]] followed by <CR><LF> or <CR><NUL>.
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>[[#cmd_setsystime|setsystime]]</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>[[#cmd_keyxchg|keyxchg]]</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
In the command descriptions below, the following data types are used:
{| class="wikitable" style="margin: 0 auto"
! Type !! Description
|-
| DWORD || A 32-bit integer in hexadecimal format (e.g. <code>0x1234ABCD</code>).
|-
| QWORD || A 64-bit integer in hexadecimal format, but prefixed with 0q instead of 0x (e.g. <code>0q0123456789ABCDEF</code>).
|-
| STRING || An ASCII-encoded string, optionally surrounded by double quotes.
|}
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{{XBDM command|version=4039+|text=adminpw none|privs=manage}}
Clear the administrator password.
{{XBDM command|version=4039+|text=adminpw passwd=QWORD|privs=manage}}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
{{XBDM command|text=drivelist}}
Returns a string which contains the drive-letter for each accessible drive.
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{{XBDM command|text=getfile name=STRING}}
Retrieve the entire contents of the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
{{XBDM command|text=getfile name=STRING offset=DWORD size=DWORD}}
Retrieve <code>size</code> bytes starting at <code>offset</code> from the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum (Generate memory checksums)</span>====
{{XBDM command|version=5120+|text=getsum addr=DWORD length=DWORD blocksize=DWORD}}
Generates one or more checksums from memory.
The function will return <code>length</code> divided by <code>blocksize</code> 32-bit little endian checksums for the memory starting at virtual address <code>addr</code>.
The <code>addr</code>, <code>length</code> and <code>blocksize</code> must be multiples of 8.
Picking bad values can lead to crashes.
Each checksum is equal to <code>ReverseBitOrder(CRC32(address + blockoffset, blocksize) XOR 0xFFFFFFFF)</code> for the respective block.
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot</span>====
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
7aeb1d199d9d247c9a044d307003778ec0bc1c88
6559
6558
2018-10-07T14:02:27Z
JayFoxRox
2
/* magicboot */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a [[#Commands|command]] followed by <CR><LF> or <CR><NUL>.
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>[[#cmd_setsystime|setsystime]]</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>[[#cmd_keyxchg|keyxchg]]</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
In the command descriptions below, the following data types are used:
{| class="wikitable" style="margin: 0 auto"
! Type !! Description
|-
| DWORD || A 32-bit integer in hexadecimal format (e.g. <code>0x1234ABCD</code>).
|-
| QWORD || A 64-bit integer in hexadecimal format, but prefixed with 0q instead of 0x (e.g. <code>0q0123456789ABCDEF</code>).
|-
| STRING || An ASCII-encoded string, optionally surrounded by double quotes.
|}
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{{XBDM command|version=4039+|text=adminpw none|privs=manage}}
Clear the administrator password.
{{XBDM command|version=4039+|text=adminpw passwd=QWORD|privs=manage}}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file)====
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
{{XBDM command|text=drivelist}}
Returns a string which contains the drive-letter for each accessible drive.
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{{XBDM command|text=getfile name=STRING}}
Retrieve the entire contents of the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
{{XBDM command|text=getfile name=STRING offset=DWORD size=DWORD}}
Retrieve <code>size</code> bytes starting at <code>offset</code> from the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum (Generate memory checksums)</span>====
{{XBDM command|version=5120+|text=getsum addr=DWORD length=DWORD blocksize=DWORD}}
Generates one or more checksums from memory.
The function will return <code>length</code> divided by <code>blocksize</code> 32-bit little endian checksums for the memory starting at virtual address <code>addr</code>.
The <code>addr</code>, <code>length</code> and <code>blocksize</code> must be multiples of 8.
Picking bad values can lead to crashes.
Each checksum is equal to <code>ReverseBitOrder(CRC32(address + blockoffset, blocksize) XOR 0xFFFFFFFF)</code> for the respective block.
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot (Boot into new title)</span>====
{{XBDM command|text=magicboot title=STRING debug}}
Boots into another title, specified by the path to XBE in <code>title</code>.
If the optional <code>debug</code> is provided, XBDM will remain loaded while the title is running.
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
03e774979a41fcb065dd5109cc07a1a584d6d7dc
Xbox Live Communicator
0
3829
6557
5975
2018-10-06T03:40:41Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox Live Communicator is the headset which is used for Xbox Live.
[[File:Xbox_Live_Communicator.png|thumb|200px|Headset / Xbox Live Communicator]]
== Protocol ==
=== USB Descriptor ===
<pre>
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 45
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Microphone ===
{{FIXME}}
=== Speaker ===
{{FIXME}}
==== Links ====
* [https://github.com/JayFoxRox/xbox-tools/tree/4bc808e187311010f850d7fbd9af4b76bed90727/communicator-tool Code for accessing the communicator microphone and speaker]
8524432cbe129072d8f30b414959598e81454059
XBDM commands by version
0
3721
6560
6384
2018-10-07T14:05:05Z
JayFoxRox
2
Use yes and no templates
wikitext
text/x-wiki
The following table shows the commands available in each version of the [[Xbox Debug Monitor]].
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | adminpw
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | altaddr
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | authuser
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | boxid
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | break
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | bye
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | capcontrol
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|-
| style="font-family: monospace; text-align: left" | capctrl
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | continue
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | crashdump
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | d3dopcode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dbgname
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dbgoptions
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | debugger
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | debugmode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dedicate
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | deftitle
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | delete
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dirlist
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dmversion
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | drivefreespace
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | drivelist
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dvdblk
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dvdperf
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | fileeof
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | flash
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | fmtfat
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | funccall
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getd3dstate
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getextcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getfile
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getfileattributes
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getgamma
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getmem
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getmem2
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getpalette
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getpid
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getsum
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getsurf
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getuserpriv
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getutildrvinfo
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | go
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | gpucount
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | halt
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | irtsweep
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | isbreak
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | isdebugger
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | isstopped
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | kd
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | keyxchg
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | lockmode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | lop
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | magicboot
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | memtrack
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | mkdir
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | mmglobal
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modlong
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modsections
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modules
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | nostopon
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | notify
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | notifyat
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pbsnap
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pclist
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pdbinfo
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pssnap
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | querypc
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | reboot
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | rename
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | resume
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | screenshot
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | sendfile
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | servname
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setconfig
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setfileattributes
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setsystime
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setuserpriv
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | signcontent
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | stop
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | stopon
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | suspend
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | sysfileupd
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | systime
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | threadinfo
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | threads
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | title
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | user
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | userlist
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | vssnap
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | walkmem
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | writefile
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | xbeinfo
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | xtlinfo
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
e7ac0705ea27c870e33781beced57c80e39346a4
6564
6560
2018-10-07T14:11:16Z
JayFoxRox
2
setmem was not listed
wikitext
text/x-wiki
The following table shows the commands available in each version of the [[Xbox Debug Monitor]].
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | adminpw
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | altaddr
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | authuser
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | boxid
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | break
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | bye
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | capcontrol
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|-
| style="font-family: monospace; text-align: left" | capctrl
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | continue
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | crashdump
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | d3dopcode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dbgname
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dbgoptions
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | debugger
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | debugmode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dedicate
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | deftitle
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | delete
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dirlist
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dmversion
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | drivefreespace
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | drivelist
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dvdblk
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dvdperf
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | fileeof
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | flash
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | fmtfat
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | funccall
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getd3dstate
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getextcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getfile
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getfileattributes
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getgamma
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getmem
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getmem2
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getpalette
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getpid
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getsum
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getsurf
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getuserpriv
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getutildrvinfo
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | go
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | gpucount
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | halt
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | irtsweep
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | isbreak
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | isdebugger
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | isstopped
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | kd
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | keyxchg
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | lockmode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | lop
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | magicboot
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | memtrack
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | mkdir
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | mmglobal
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modlong
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modsections
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modules
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | nostopon
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | notify
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | notifyat
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pbsnap
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pclist
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pdbinfo
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pssnap
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | querypc
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | reboot
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | rename
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | resume
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | screenshot
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | sendfile
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | servname
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setconfig
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setfileattributes
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setmem
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setsystime
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setuserpriv
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | signcontent
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | stop
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | stopon
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | suspend
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | sysfileupd
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | systime
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | threadinfo
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | threads
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | title
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | user
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | userlist
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | vssnap
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | walkmem
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | writefile
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | xbeinfo
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | xtlinfo
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
846909365981e7678ef4ce17e4f7783980b0a7a8
6565
6564
2018-10-07T14:12:25Z
JayFoxRox
2
Had set version marked for setmem
wikitext
text/x-wiki
The following table shows the commands available in each version of the [[Xbox Debug Monitor]].
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | adminpw
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | altaddr
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | authuser
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | boxid
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | break
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | bye
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | capcontrol
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|-
| style="font-family: monospace; text-align: left" | capctrl
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | continue
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | crashdump
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | d3dopcode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dbgname
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dbgoptions
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | debugger
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | debugmode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dedicate
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | deftitle
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | delete
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dirlist
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dmversion
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | drivefreespace
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | drivelist
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dvdblk
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | dvdperf
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | fileeof
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | flash
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | fmtfat
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | funccall
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getd3dstate
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getextcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getfile
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getfileattributes
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getgamma
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getmem
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getmem2
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getpalette
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getpid
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getsum
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getsurf
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getuserpriv
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | getutildrvinfo
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | go
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | gpucount
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | halt
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | irtsweep
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | isbreak
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | isdebugger
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | isstopped
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | kd
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | keyxchg
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | lockmode
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | lop
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | magicboot
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | memtrack
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | mkdir
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | mmglobal
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modlong
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modsections
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | modules
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | nostopon
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | notify
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | notifyat
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pbsnap
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pclist
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pdbinfo
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | pssnap
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | querypc
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | reboot
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | rename
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | resume
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | screenshot
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|-
| style="font-family: monospace; text-align: left" | sendfile
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | servname
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setconfig
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setcontext
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setfileattributes
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setmem
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{yes}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|{{unknown}}
|-
| style="font-family: monospace; text-align: left" | setsystime
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | setuserpriv
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | signcontent
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | stop
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | stopon
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | suspend
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | sysfileupd
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | systime
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | threadinfo
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | threads
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | title
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | user
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | userlist
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | vssnap
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | walkmem
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | writefile
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | xbeinfo
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|-
| style="font-family: monospace; text-align: left" | xtlinfo
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|- style="font-size: x-small"
!
! 3146.3
! 3521
! 3823
! 3944
! 4039
! 4134
! 4242
! 4361
! 4432
! 4531
! 4627
! 4721
! 4831
! 4928
! 5028
! 5120
! 5233
! 5344
! 5455
! 5558
! 5659
! 5788
! 5849
! 5933
|}
9af76a9dc53199d6dc28f68a752101fa974f758a
Template:No
10
3741
6561
5412
2018-10-07T14:05:47Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#FCC;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-no"|{{{1|✗}}}<noinclude>
|}
{{documentation}}
</noinclude>
8ba551b5e70468184a4b6a7526ec339401c71ede
6566
6561
2018-10-07T14:27:28Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#FDD;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-no"|{{{1|✗}}}<noinclude>
|}
{{documentation}}
</noinclude>
17198b1de0ccfa0f5cc24bb83f1e0a2168e8aca4
6567
6566
2018-10-07T14:28:15Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#F2CECE;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-no"|{{{1|✗}}}<noinclude>
|}
{{documentation}}
</noinclude>
c2bb316e76e2dff1c394a698db9649cf077714db
Template:Yes
10
3740
6562
5414
2018-10-07T14:06:09Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#DFE;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|✔}}}<noinclude>
|}
{{documentation}}
</noinclude>
b8425f8d66d9780225142dcbc92442237a90c88d
6568
6562
2018-10-07T14:28:31Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#CEF2E0;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|✔}}}<noinclude>
|}
{{documentation}}
</noinclude>
afb08732635eec486e7424f4561c997b603984b5
Template:Unknown
10
3813
6563
5890
2018-10-07T14:10:41Z
JayFoxRox
2
wikitext
text/x-wiki
<noinclude>{| class="wikitable"
|-
|</noinclude>style="background:#DDD;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-unknown"|{{{1|?}}}<noinclude>
|}
{{documentation}}
</noinclude>
d302768f810db3553dae56872f132d5f28ee5117
Hardware Revisions
0
3669
6569
6422
2018-10-11T12:29:00Z
DarkGabbz
2486
wikitext
text/x-wiki
There are different retail Xbox hardware revisions:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
any Xbox DVD drive can be used in any retail xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he succesfully flashed a Hitachi drive to boot a copied game on a unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
95194efaca5e1d509940653361776f179798423f
File:Xboxmaletousbfemale.png
6
3976
6570
2018-10-11T13:17:33Z
DarkGabbz
2486
Xbox Controller connector male to USB Connector female
wikitext
text/x-wiki
Xbox Controller connector male to USB Connector female
97ff26c3f95727ccd55512be02b34fd8156be7b4
Xbox Input Devices
0
11
6571
6465
2018-10-11T13:29:57Z
Dracc
2502
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
630e36d1260174e3683304d3a1aeb5b2bcc28a44
6572
6571
2018-10-11T14:12:54Z
DarkGabbz
2486
/* Wiring */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
[[File:Xboxmaletousbfemale.png]]
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
a27a54867b82f9ed53b94c4e425d7f3f7e7d7c94
6573
6572
2018-10-11T14:13:13Z
DarkGabbz
2486
/* Wiring */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
2fc4f0677ce3b4ab34f59f43c12d5988ce5707d7
6574
6573
2018-10-11T14:49:20Z
DarkGabbz
2486
/* USB Adapters */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
[[File:Xboxmaletousbfemale.png]]
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
e493b51b8e66b7ae72772422fd9d666c3b2099d4
6575
6574
2018-10-11T14:49:27Z
DarkGabbz
2486
/* USB Adapters */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
cb58089cd09eec5ee9ccc305ecc9ce3723c209fa
6576
6575
2018-10-11T14:52:43Z
DarkGabbz
2486
/* USB Adapters */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
----
[[File:Xboxmaletousbfemale.png|thumb|right|]]
----
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
ac568aa7bb047d6eaf96125500648ddc598d0b6e
6577
6576
2018-10-11T14:53:34Z
DarkGabbz
2486
/* USB Adapters */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram of a DIY USB Adapter]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
dfff0f6b2c124ec98b2374cf7e7c9799dfd1201e
6578
6577
2018-10-11T14:57:56Z
DarkGabbz
2486
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram of a DIY USB adapter]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
2738d19ca4e8078d16182e7fbd0c45926c27c9d0
6579
6578
2018-10-11T15:00:41Z
JayFoxRox
2
Changed label for wiring diagram [white / gray + more precise]
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
e4a9fee29d21a6d648b6381d532c7b17aadcd8c0
Boot Process
0
3683
6580
6277
2018-10-16T02:05:33Z
JayFoxRox
2
2BL address was wrong
wikitext
text/x-wiki
This article describes the boot sequence of the Xbox.
A large portion of it is patended in [https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US6907522.pdf Patent "US 6,907,522 B2"]
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
* The MCPX ROM contains a key to decrypt the 2BL.
* The 2BL is run. The MCPX ROM is hidden at this point. The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}. The 2BL contains a kernel decryption key.
* Once the kernel is decrypted and initialized, the INIT section is discarded. The kernel decryption key is overwritten with 0x00-Bytes.
* The kernel only runs signed [[XBE]] files from allowed media.
There are also a handful of assumptions:
* The CPU will start execution in the MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrpyted 2BL or Kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL (MCPX 1.0 only) ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8F000 to 0x8F0FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== TEA Decryption of the FBL (MCPX 1.1 only) ===
{{FIXME}}
== FBL (MCPX 1.1 only) ==
The Flash Boot Loader was added in MCPX 1.1, it connects the MCPX ROM and the 2BL.{{FIXME}}
It is not part of the MCPX ROM, but part of the flash.
== 2BL ==
{{FIXME|reason=Certain parts are still missing.}}
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00090000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Configure LDT bus ====
DWORD flow control is enabled in the MCPX.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
</pre>
DWORD flow control is also enabled in the NV2A core.
<pre>
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
</pre>
The LDT bus is reset.
<pre>
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
</pre>
The rest is unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Enable USB ASRC ====
The USB controller's "automatic slew rate compensation" feature is enabled for MCPX revisions D01 and later.
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
f28da6e507f2842617393c52b8d49ab19b41e34b
6581
6580
2018-10-17T14:04:48Z
JayFoxRox
2
Improve the short-version of chain of trust
wikitext
text/x-wiki
This article describes the boot sequence of the Xbox.
A large portion of it is patended in [https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US6907522.pdf Patent "US 6,907,522 B2"]
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
'''MCPX X2'''
There's no chain of trust.
It behaves similar to the MCPX X3 1.0 boot, just that the MCPX ROM is not available, so the code is loaded from untrusted flash.
There are also different X-Code opcodes and keys.
'''MCPX X3 1.0'''
* MCPX ROM:
** Runs untrusted from flash X-Codes in a limited virtual-machine.
** Contains key + decrypts the 2BL using RC4.
** In success case: Go to 2BL.
** In error case: Hides ROM and intends to triple-fault.
* 2BL:
** The MCPX ROM is hidden.
** The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}.
** Contains keys for kernel decryption and execution; decrypts kernel using RC4 and extracts using LZX.{{FIXME|reason=I believe kernel is also hashed}}
* Kernel:
** The kernel decryption key is overwritten with 0x00-Bytes.
** The 2BL is overwritten with 0xCC-Bytes.
** Once the kernel is initialized, the INIT section is discarded.
** The kernel only runs signed [[XBE]] files from allowed media.
'''MCPX X3 1.1'''
* MCPX ROM:
** Runs untrusted from flash X-Codes in a limited virtual-machine.
** Hashes the unencrypted FBL using TEA encryption.
** In success case: Go to FBL.
** In error case: Hides ROM and intends to triple-fault.
* FBL:
** Verify 2BL image.
** Derive key from key stored in MCPX + Flash, and decrypt 2BL.
** Go to 2BL.
The rest of the boot behaves like MCPX X3 1.0.
'''Assumptions for chain-of-trust'''
* The CPU will start execution in trusted MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrypted 2BL or kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL (MCPX 1.0 only) ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8F000 to 0x8F0FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== TEA Decryption of the FBL (MCPX 1.1 only) ===
{{FIXME}}
== FBL (MCPX 1.1 only) ==
The Flash Boot Loader was added in MCPX 1.1, it connects the MCPX ROM and the 2BL.{{FIXME}}
It is not part of the MCPX ROM, but part of the flash.
== 2BL ==
{{FIXME|reason=Certain parts are still missing.}}
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00090000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x000 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x800 || 0x000000E3
|-
|0x004 || 0x004000E3
|-
|0x804 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Configure LDT bus ====
DWORD flow control is enabled in the MCPX.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
</pre>
DWORD flow control is also enabled in the NV2A core.
<pre>
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
</pre>
The LDT bus is reset.
<pre>
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
</pre>
The rest is unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Enable USB ASRC ====
The USB controller's "automatic slew rate compensation" feature is enabled for MCPX revisions D01 and later.
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
24ac0de8e3ecda518cd719210108fdfa1fbf7449
6582
6581
2018-10-18T04:00:07Z
JayFoxRox
2
Order was slightly confusing
wikitext
text/x-wiki
This article describes the boot sequence of the Xbox.
A large portion of it is patended in [https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US6907522.pdf Patent "US 6,907,522 B2"]
== Overview ==
The Xbox has a 256 kiB ROM containing the startup animation and sound, as well as the Xbox kernel, which contains a stripped down version of the Windows 2000 (NT 5.0) microkernel, the HAL, filesystems, as well as HDD and DVD drivers.
When the Xbox is turned on, the software in ROM is decompressed into RAM, and the kernel initializes the hardware. Because there are no audio or video drivers in the kernel, the startup code plays the animation and sound by accessing the registers of the hardware directly. As soon as the Xbox logo is on the display, the kernel unlocks the hard disk and checks whether there is a valid game medium in the DVD drive. If not, the file xboxdash.xbe gets loaded from partition #3 (Typically the [[Dashboard]]). In either case, the Microsoft logo is shown below the Xbox logo and the executable is started. If an error occurs (no/wrong hard disk, wrong signature, ...), the boot loader shows a [[Fatal Error]] screen and halts.
=== Chain of trust ===
The Xbox uses a chain of trust during the boot process:
'''MCPX X2'''
There's no chain of trust.
It behaves similar to the MCPX X3 1.0 boot, just that the MCPX ROM is not available, so the code is loaded from untrusted flash.
There are also different X-Code opcodes and keys.
'''MCPX X3 1.0'''
* MCPX ROM:
** Runs untrusted from flash X-Codes in a limited virtual-machine.
** Contains key + decrypts the 2BL using RC4.
** In success case: Go to 2BL.
** In error case: Hides ROM and intends to triple-fault.
* 2BL:
** The MCPX ROM is hidden.
** The 2BL decryption key is (overwritten with 0x00-Bytes){{FIXME|reason=Does this actually happen?}}.
** Contains keys for kernel decryption and execution; decrypts kernel using RC4 and extracts using LZX.{{FIXME|reason=I believe kernel is also hashed}}
* Kernel:
** The kernel decryption key is overwritten with 0x00-Bytes.
** The 2BL is overwritten with 0xCC-Bytes.
** Once the kernel is initialized, the INIT section is discarded.
** The kernel only runs signed [[XBE]] files from allowed media.
'''MCPX X3 1.1'''
* MCPX ROM:
** Runs untrusted from flash X-Codes in a limited virtual-machine.
** Hashes the unencrypted FBL using TEA encryption.
** In success case: Go to FBL.
** In error case: Hides ROM and intends to triple-fault.
* FBL:
** Verify 2BL image.
** Derive key from key stored in MCPX + Flash, and decrypt 2BL.
** Go to 2BL.
The rest of the boot behaves like MCPX X3 1.0.
'''Assumptions for chain-of-trust'''
* The CPU will start execution in trusted MCPX ROM.
* The MCPX ROM can not be read or modified.
* The decrypted 2BL or kernel can not be read entirely.
* All parts of the software following the MCPX are not-attackable and signed.
See [[Exploits]] for possible options to break the chain of trust.
== MCPX ROM ==
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}
=== Xcodes ===
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:
<pre>
void xcode_interpreter() {
// values are implied as x86 is just starting up
register uint32_t pc = 0; // stored in ESI register
register uint8_t opcode = 0; // stored in AL register
register uint32_t operand_1 = 0; // stored in EBC register
register uint32_t operand_2 = 0; // stored in ECX register
register uint32_t result = 0; // stored in EDI register
register uint32_t scratch = 0; // stored in EBP register
// explicitly set startup point
pc = 0xFF000080;
while (1) {
opcode = get_memory_byte(pc);
operand_1 = get_memory_dword(pc+1);
operand_2 = get_memory_dword(pc+5);
if (opcode == 0x07) {
opcode = operand_1;
operand_1 = operand_2;
operand_2 = result;
}
if (opcode == 0x02) {
result = get_memory_dword(operand_1 & 0x0fffffff);
} else if (opcode == 0x03) {
set_memory_dword(operand_1) = operand_2;
} else if (opcode == 0x06) {
result = (result & operand_1) | operand_2;
} else if (opcode == 0x04) {
if (operand_1 == 0x80000880) {
operand_2 &= 0xfffffffd;
}
outl(operand_1, 0xcf8);
outl(operand_2, 0xcfc);
} else if (opcode == 0x05) {
outl(operand_1, 0xcf8);
result = inl(0xcfc);
} else if (opcode == 0x08) {
if (result != operand_1) {
pc += operand_2;
}
} else if (opcode == 0x09) {
pc += operand_2;
} else if (opcode == 0x10) {
scratch = (scratch & operand_1) | operand_2;
result = scratch;
} else if (opcode == 0x11) {
outb(operand_2, operand_1);
} else if (opcode == 0x12) {
result = inb(operand_1);
} else if (opcode == 0xee) {
break;
}
pc += 9;
}
}
</pre>
=== RC4 Decryption of the 2BL (MCPX 1.0 only) ===
Version 1.0 of the ROM uses RC4 to decrypt the 2BL.
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.
==== Stage 1: Key Scheduling ====
The [https://en.wikipedia.org/wiki/RC4#Key-scheduling_algorithm_.28KSA.29 RC4 Key-Scheduling Algorithm] is used to initialize the RC4 “S” array, first initializing the identity permutation (writing 1, 2, ..., 255 to 0x8F000 to 0x8F0FF), then processed in a way similar to the PRGA to mix in the key.
<pre>
uint8_t *s = (uint8_t *)0x8f000;
uint32_t i;
for (i = 0; i <= 255; i++) {
s[i] = i;
}
uint8_t *key = (uint8_t *)0xffffffa5; /* ROM offset 0x1a5. */
uint8_t j, t;
/* It is unclear why values s[0x100..0x101] are being set to 0. They are
* not modified by the code, but later these will be be used as the initial
* i, j values in the PRGA.
*/
s[0x100] = 0x00;
s[0x101] = 0x00;
for (i = 0, j = 0; i <= 255; i++) {
j = j + s[i] + key[i%16];
/* Swap s[i] and s[j] */
t = s[i];
s[i] = s[j];
s[j] = t;
}
</pre>
==== Stage 2: PRGA ====
The [https://en.wikipedia.org/wiki/RC4#Pseudo-random_generation_algorithm_.28PRGA.29 RC4 Pseudo-random generation algorithm (PRGA)] is then used to decrypt the 2BL from 0xFFFF9E00, storing the decrypted 2BL at 0x00090000. It is 24KiB in size.
<pre>
uint8_t *encrypted = (uint8_t*)0xFFFF9E00; /* 2bl */
uint8_t *decrypted = (uint8_t*)0x90000; /* Decrypted 2bl Destination */
uint32_t pos;
/* As noted above, s[0x100..0x101] were set to 0 earlier, but have not been
* modified since. The RC4 algorithm defines i and j both to be set to 0
* before PRGA begins. */
i = s[0x100];
j = s[0x101];
for (pos = 0; pos < 0x6000; pos++) {
/* Update i, j. */
i = (i + 1) & 0xff;
j += s[i];
/* Swap s[i] and s[j]. */
t = s[i];
s[i] = s[j];
s[j] = t;
/* Decrypt message and write output. */
decrypted[pos] = encrypted[pos] ^ s[ s[i] + s[j] ];
}
</pre>
==== Stage 3: Signature Verification ====
Now that the Second-Stage Bootloader has been loaded, a quick sanity-check is performed: a “magic” signature is verified. If the signature doesn’t match, control goes to the error handler. If the signature does match, the code will jump to the 2bl entry point, which is given by the first dword of the decrypted 2bl.
<pre>
mov eax, [0x95fe4]
cmp eax, MAGIC_NUMBER
jne 0xffffff94 ; If signature check failed, jump to error handler
mov eax, [0x90000]
jmp eax ; Jump to 2BL entry point
</pre>
=== TEA Decryption of the FBL (MCPX 1.1 only) ===
{{FIXME}}
== FBL (MCPX 1.1 only) ==
The Flash Boot Loader was added in MCPX 1.1, it connects the MCPX ROM and the 2BL.{{FIXME}}
It is not part of the MCPX ROM, but part of the flash.
== 2BL ==
{{FIXME|reason=Certain parts are still missing.}}
=== MTRR Setup ===
First, the cache is disabled.{{FIXME}}
Then, the MTRR (Memory Type Range Register) will be setup (using <code>wrmsr</code>) in the following way:
{| class="wikitable"
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes
|-
|0x200 || 0x00000000 || 0x00000006 ||
|-
| rowspan = "2" | 0x201 || rowspan = "2" | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''
|-
|0xF8000800 || (''For 128 MiB RAM BIOS'')
|-
|0x202 || 0x00000000 || 0xFFF80005 ||
|-
|0x203 || 0x0000000F || 0xFFF80800 ||
|-
|0x204 || 0x00000000 || 0x00000000 || rowspan="3" | Clear all unused MTRR
|-
| colspan = "3" | ...
|-
|0x20F || 0x00000000 || 0x00000000
|-
|0x2FF || 0x00000000 || 0x00000800 ||
|}
Once the MTRR have been written, the cache is enabled.{{FIXME}}
=== Register setup ===
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:
{| class="wikitable"
! Register !! Value !! Notes
|-
|ds || 0x0010 || rowspan="3" | Data segment{{citation needed}}
|-
|es || 0x0010
|-
|ss || 0x0010
|-
|esp || 0x00400000 ||
|-
|fs || 0x0000 ||
|-
|gs || 0x0000 ||
|}
=== Self-copy ===
Now the 2BL copies itself (24 kiB) from 0x00090000 to memory address 0x00400000.
=== Paging ===
Now a PDE is prepared at address 0x0000F000:
{| class="wikitable"
! Offset in PDE !! Value !! Notes
|-
|0x800 || 0x000000E3 || rowspan="7" | Identity maps the first 256MiB of RAM: 0x80000000 and 0x00000000 will each map to physical page 0 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0x000 || 0x000000E3
|-
|0x804 || 0x004000E3
|-
|0x004 || 0x004000E3
|-
| colspan="2" | ...
|-
|0x8FC || 0x0FC000E3
|-
|0x0FC || 0x0FC000E3
|-
|0x900 || 0x00000000 || rowspan="5" | Unmapping the rest of the pages
|-
|0x100 || 0x00000000
|-
| colspan="2" | ...
|-
|0xFFC || 0x00000000
|-
|0x7FC || 0x00000000
|-
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 <br><br> 0x63: Flags: <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 <br><br> 0xE3: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD0 || 0xFD0000FB || rowspan="4" | Maps 16 MiB for the GPU control registers <br><br> 0xFB: Flags: <br> * 0x80: 4 MiB page <br> * 0x40: Marked as previously written (Dirty) <br> * 0x20: Marked as previously accessed <br> * 0x10: Cache disabled <br> * 0x08: Write-Through caching <br> * 0x02: Read/Write <br> * 0x01: Present
|-
|0xFD4 || 0xFD4000FB
|-
|0xFD8 || 0xFD8000FB
|-
|0xFDC || 0xFDC000FB
|}
After setting up the PDE, the PAT is set up using <code>wrmsr</code>: {{FIXME}}
CR4 is touched {{FIXME}}
CR3 is touched {{FIXME}}
Now paging is activated by enabling the PG and WP bits in CR0.
Additionally, the same <code>or</code> instruction is used to enable the NE bit in cr0.
=== 2BL main ===
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).
The 2BL will now <code>call</code> into the relocated 2BL code somewhere near 0x00400000.
==== Disabling of the MCPX ROM ====
<pre>
out32(0xCF8, 0x80000880);
out8(0xCFC, 0x02);
</pre>
==== SMC handling ====
The [[SMC]] has a watchdog functionality which must be turned off.
This is done by querying the SMC registers 0x1C - 0x1F.
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).
==== Enable IDE and NIC ====
<pre>
out32(0xCF8, 0x8000088C);
out32(0xCFC, 0x40000000);
</pre>
==== Memory cleanup ====
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.
==== Setup RAM timing ====
Not described yet, this is complicated{{FIXME}}.
This got a lot more complicated when Microsoft started using different RAM sometime after [[Hardware Revisions#1.6|Hardware Revision 1.6]] was already out.
==== Configure LDT bus ====
DWORD flow control is enabled in the MCPX.
<pre>
out32(0xCF8, 0x80000854);
out32(0xCFC, in32(0xCFC) | 0x88000000);
</pre>
DWORD flow control is also enabled in the NV2A core.
<pre>
out32(0xCF8, 0x80000064);
out32(0xCFC, in32(0xCFC) | 0x88000000);
</pre>
The LDT bus is reset.
<pre>
out32(0xCF8, 0x8000006C);
uint32_t tmp = in32(0xCFC);
out32(0xCFC, tmp & 0xFFFFFFFE);
out32(0xCFC, tmp);
</pre>
The rest is unknown{{FIXME}}.
<pre>
out32(0xCF8, 0x80000080);
out32(0xCFC, 0x00000100);
</pre>
==== Enable USB ASRC ====
The USB controller's "automatic slew rate compensation" feature is enabled for MCPX revisions D01 and later.
<pre>
out32(0xCF8, 0x80000808);
uint8_t mcpx_revision = in8(0xCFC);
if (mcpx_revision >= 0xD1) {
out32(0xCF8, 0x800008C8);
out32(0xCFC, 0x00008F00);
}
</pre>
==== Loading the kernel ====
===== Kernel-copy =====
The Kernel is now copied into RAM.
===== Kernel decryption =====
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:
{| class="wikitable"
! Offset !! Use
|-
| 0 || EEPROM key
|-
| 16 || Certificate key
|-
| 32 || Kernel key
|}
The Kernel is then decrypted in-place using RC4.
===== Kernel decompression =====
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.
==== Running the kernel ====
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.
If it is invalid, {{FIXME}}.
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.
The entry-point is now being called. Argumnts are passed on the stack, from right to left.
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.
A pointer to the previously mentioned array of 3 keys is passed as the second argument.
== Kernel ==
=== Initialization ===
==== Stage 1 (Cold-boot only) ====
The entry point to the kernel will first parse the arguments.{{FIXME}}
At the end, the kernel will call the initialization routine for what we'll refer to as: Stage 2a.
==== Stage 2 (Cold-boot only) ====
The kernel initialization will only happen once on a cold-boot. It will not happen for reboots.
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* GDT is prepared{{FIXME}} and loaded{{FIXME}}
* cs and ds are reloaded
* fs is set{{FIXME}}
* TSS is loaded{{FIXME}}
* cr3 is moved to 3 tasks{{FIXME}}
* The CPU microcode is updated
After this comes Stage 3 initialization which will also be repeated on kernel re-initialization.
==== Stage 3 ====
This is code which is duplicated in INIT and .text sections.
* In the INIT section it directly follows the Stage 2 initialization.
* In the .text section it follows the Kernel re-initialization code mentioned below.
This code does the following:
* IDT is prepared{{FIXME}} and loaded{{FIXME}}
* {{FIXME|reason=a lot more happens here.. If you want to RE this: look into the HalReturnToFirmware code [last call is to Stage 2b]; the kernel entry point [last call is to Stage 2a]; or just search for lidt instructions}}
=== Re-initialization ===
On reboots, initialization Stage 1 and 2 are not in memory anymore (as the INIT section has been discarded), and can't be run anymore.
Instead, a seperate function replaces their functionality and then jumps directly to Stage 3 initalization.
This code is the partial kernel reinitialization, which will be ran on reboots using [[Kernel/HalReturnToFirmware]].
* ebp is set to 0x00000000
* esp is modified{{FIXME}}
* Some memory stuff in a seperate function{{FIXME}}
* The .data section from [[Flash]] is loaded and replaces the running .data
* The byte infront of KeSystemTime is set to 0x01, indicating the system comes from a reboot.
After this has completed, [[#Stage 3]] of the kernel initialization will take over.
==== Skipped initialization ====
When rebooting, certain parts are still initialized and assumed to be working:
(This list is currently in no particular order and incomplete)
* Anything already done by Stage 1 and Stage 2
* PCI device setup
* EEPROM decryption{{FIXME}}
* Check for AV-Pack{{FIXME}}
* Video mode setup (boot animation is not played again)
* Some IDE stuff{{FIXME}}
* Some SMC stuff{{FIXME}}
* Memory allocator initialization{{FIXME}}
* Kernel debugger (Super-I/O) initialization{{FIXME}} (This still seems to be in memory?!){{citation needed}}
=== Startup animation ===
== References ==
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM]
783b95460be8df8563edd79e208a52878731e6d4
CPU
0
3681
6583
6006
2018-10-18T18:39:21Z
JayFoxRox
2
/* References */
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium III running at 733MHz. The 'custom' part of this was that that the Pentium III in the Xbox was that it had only 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [http://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/28365403.pdf Mobile Intel® Celeron® Processor (0.18μ) in BGA2 and Micro-PGA2 Packages] (This datasheet is for the mobile version Coppermine with 256kB L2 cache. It does not contain the Xbox Coppermine-128 with 128kB L2 cache at 733MHz (S-Spec SL5SN). No such datasheet exists. Both differences are pin compatible.
* [https://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/24542154.pdf This specification update should contain the errata for the Xbox CPU]
* [https://www.google.com/patents/US20050282621 CPU upgrading adapter for a Microsoft XboxTM game machine] US Patent Application 20050282621 by Friendtech, filed 2003-08-21.
94e859a76c65cc92c89601e790c79ec50851e07f
6584
6583
2018-10-18T18:40:34Z
JayFoxRox
2
/* References */
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium III running at 733MHz. The 'custom' part of this was that that the Pentium III in the Xbox was that it had only 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [http://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/28365403.pdf Mobile Intel® Celeron® Processor (0.18μ) in BGA2 and Micro-PGA2 Packages] This datasheet is for the mobile version Coppermine with 256kB L2 cache. It does not contain the Xbox Coppermine-128 with 128kB L2 cache at 733MHz (S-Spec SL5SN). No such datasheet exists. Both differences are pin compatible.
* [https://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/24542154.pdf Mobile Intel® Celeron® Processor (0.18μ and 0.13μ) Specification Update] This document should contain the errata for the Xbox CPU.
* [https://www.google.com/patents/US20050282621 CPU upgrading adapter for a Microsoft XboxTM game machine] US Patent Application 20050282621 by Friendtech, filed 2003-08-21.
53c9af2b5739e32d689b6eda2820fc84129804a6
EEPROM
0
3742
6585
6503
2018-10-19T19:43:20Z
KaosEngineer
2482
Added info for video standard at offset 0x58-0x5B for not set and PAL-M
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set) 1 byte at offset 0x90 data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Language !! EEPROM Value @ 0x90
|-
| English
| 0x01
|-
| Japanese
| 0x02
|-
| German
| 0x03
|-
| French
| 0x04
|-
| Spanish
| 0x05
|-
| Italian
| 0x06
|-
| Korean
| 0x07
|-
| Chinese
| 0x08
|-
| Portuguese
| 0x09
|}
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
const uint32_t num_dwords = section_data_length >> 2;
uint64_t checksum = 0;
uint32_t carry_count = 0;
for(uint32_t loop_count = num_dwords; loop_count > 0; loop_count--) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
9c36fccf7cdbf6367506646c9bf27b61f4566c9f
6586
6585
2018-10-19T19:52:20Z
KaosEngineer
2482
0x2C-0x2F region Europe also includes Australia for value 0x04 (noted in XBMC4Xbox source code updates in XKEEPROM.h file)
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe & Australia
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set) 1 byte at offset 0x90 data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Language !! EEPROM Value @ 0x90
|-
| English
| 0x01
|-
| Japanese
| 0x02
|-
| German
| 0x03
|-
| French
| 0x04
|-
| Spanish
| 0x05
|-
| Italian
| 0x06
|-
| Korean
| 0x07
|-
| Chinese
| 0x08
|-
| Portuguese
| 0x09
|}
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
const uint32_t num_dwords = section_data_length >> 2;
uint64_t checksum = 0;
uint32_t carry_count = 0;
for(uint32_t loop_count = num_dwords; loop_count > 0; loop_count--) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
bb0db6c637b346df38de4c3b0f2e64fe367b7fe9
6587
6586
2018-10-19T19:57:58Z
KaosEngineer
2482
0x40-0x45 MAC address. Added info as they start with 00:50:F2 and another one I can't remember and data locked out on glitched FW HDD so can't look for it. :(
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe & Australia
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set) 1 byte at offset 0x90 data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Language !! EEPROM Value @ 0x90
|-
| English
| 0x01
|-
| Japanese
| 0x02
|-
| German
| 0x03
|-
| French
| 0x04
|-
| Spanish
| 0x05
|-
| Italian
| 0x06
|-
| Korean
| 0x07
|-
| Chinese
| 0x08
|-
| Portuguese
| 0x09
|}
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
const uint32_t num_dwords = section_data_length >> 2;
uint64_t checksum = 0;
uint32_t carry_count = 0;
for(uint32_t loop_count = num_dwords; loop_count > 0; loop_count--) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
4280af11b8d229bd9d27cf95434cf65f6d616810
6588
6587
2018-10-19T20:03:07Z
KaosEngineer
2482
Added A and B button values stored in the Parental Passcode at offset 0xA0-0xA3
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe & Australia
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set) 1 byte at offset 0x90 data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Language !! EEPROM Value @ 0x90
|-
| English
| 0x01
|-
| Japanese
| 0x02
|-
| German
| 0x03
|-
| French
| 0x04
|-
| Spanish
| 0x05
|-
| Italian
| 0x06
|-
| Korean
| 0x07
|-
| Chinese
| 0x08
|-
| Portuguese
| 0x09
|}
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
const uint32_t num_dwords = section_data_length >> 2;
uint64_t checksum = 0;
uint32_t carry_count = 0;
for(uint32_t loop_count = num_dwords; loop_count > 0; loop_count--) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
00e883c691586b257ad5735c7dc515e694e0549d
User:JayFoxRox
2
3948
6589
6393
2018-10-20T03:11:35Z
JayFoxRox
2
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
=== SMC Warm Reboot ===
=== PM26 ===
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
=== Triple fault ===
=== PCI-to-PCI bridge secondary bus reset ===
----
804492f4646654d5e5695047f3344739f765a8e7
6590
6589
2018-10-20T03:17:45Z
JayFoxRox
2
/* SMC Cold Reboot */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
=== PM26 ===
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
=== Triple fault ===
=== PCI-to-PCI bridge secondary bus reset ===
----
cee76e82ac7f030cf6fae04063473bb15bd6dd32
6591
6590
2018-10-20T03:17:51Z
JayFoxRox
2
/* SMC Warm Reboot */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
=== Triple fault ===
=== PCI-to-PCI bridge secondary bus reset ===
----
08e124d7407a8d7bc94d0fe35f631370bc63888b
6592
6591
2018-10-20T03:18:22Z
JayFoxRox
2
/* RST_CNT (RST_CPU + SYS_RST + FULL_RST) */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
=== PCI-to-PCI bridge secondary bus reset ===
----
4bd3d2f195b89a1a5c9c528b0542fc86b41944d1
6593
6592
2018-10-20T03:18:46Z
JayFoxRox
2
/* Triple fault */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
----
5ec8019c84a2288b5ee060f6dcaaf2e19516be24
6594
6593
2018-10-20T03:18:57Z
JayFoxRox
2
/* PCI-to-PCI bridge secondary bus reset */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
eca9413f9ba41e99762d9f91570bfe48413833e7
6595
6594
2018-10-20T03:19:12Z
JayFoxRox
2
/* PM26 */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
* CPU cycles: X > 0
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
1268b7d810a9d6feae4e53130dd4a120d94020f4
6597
6595
2018-10-21T23:16:46Z
JayFoxRox
2
/* Unfinished information */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== THPS2X Syslink crash ==
Happens if too many servers are present (this is where data is written to driver?):
<pre>
Hardware watchpoint 1: *(int*)0xD004D048
Old value = 1065353216
New value = 1500647462
0x00215adf in ?? ()
(gdb) pint $eip
Undefined command: "pint". Try "help".
(gdb) print $eip
$1 = (void (*)()) 0x215adf
</pre>
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
* CPU cycles: X > 0
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
19b1a6a91e17a1c3f96584608493adf54583971f
6598
6597
2018-10-21T23:27:56Z
JayFoxRox
2
/* THPS2X Syslink crash */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== THPS2X Syslink crash ==
Happens if too many servers are present (this is where data is written to driver?):
<pre>
Hardware watchpoint 1: *(int*)0xD004D048
Old value = 1065353216
New value = 1500647462
0x00215adf in ?? ()
(gdb) pint $eip
Undefined command: "pint". Try "help".
(gdb) print $eip
$1 = (void (*)()) 0x215adf
</pre>
And this seems to copy server to database (this in particular copied string?):
<pre>
Hardware watchpoint 1: *(int*)0xf47944
Old value = 926102321
New value = 858992984
0x00156cc3 in ?? ()
(gdb) print $eip
$2 = (void (*)()) 0x156cc3
(gdb) info reg
eax 0xd0043260 -805031328
ecx 0x1d 29
edx 0x0 0
ebx 0xf20ce0 15863008
esp 0xd004324c 0xd004324c
ebp 0xf20ce0 0xf20ce0
esi 0xd00432a0 -805031264
edi 0xf47948 16021832
eip 0x156cc3 0x156cc3
eflags 0x246 [ PF ZF IF ]
cs 0x8 8
ss 0x10 16
ds 0x10 16
es 0x10 16
fs 0x20 32
gs 0x0 0
(gdb) x/10i $eip
=> 0x156cc3: rep movsl %ds:(%esi),%es:(%edi)
0x156cc5: call 0x1b9db6
0x156cca: mov 0x29b44(%ebx),%ecx
0x156cd0: mov 0x10(%esp),%edx
0x156cd4: imul $0x78,%ecx,%ecx
0x156cd7: mov %edx,0x26ca8(%ecx,%ebx,1)
0x156cde: mov 0x14(%esp),%eax
0x156ce2: mov %eax,0x26cac(%ecx,%ebx,1)
0x156ce9: mov 0x29b44(%ebx),%eax
0x156cef: mov (%ebx),%edx
</pre>
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
* CPU cycles: X > 0
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
f3df32ce97c789e48153863f88a050973d7dcab9
Kernel
0
3678
6596
6275
2018-10-21T17:23:48Z
JayFoxRox
2
Mention that some keys are depending on running XBE (details need to be documented)
wikitext
text/x-wiki
The Xbox kernel is called xboxkrnl.exe. It is closely related to the Windows NT [[Wikipedia:Ntoskrnl.exe|ntoskrnl.exe]].
Its image base address is always 0x80010000.
== Header modifications ==
xboxkrnl.exe is a mostly standard exe file.
However, the MS-DOS header was patched to contain Xbox specific data in the reserved 20 byte block starting at offset 40:
{| class=wikitable
! Offset !! Meaning
|-
|40 || Size of uninitialized portion of the .data section
|-
|44 || Size of initialized portion of the .data section
|-
|48 || Memory address of initialized portion of the .data section (usually in [[Flash]]). <br> Used to re-initialize the data section pointed to by the next field. <br> Note that the pointer might be invalid during normal execution as the Flash might not be mapped at all times.
|-
|52 || Memory address where the .data section is stored (usually the same as in the section header + image base).
|}
== Sections ==
All sections are identity mapped (meaning file offsets and offsets in RAM match). This is because the kernel is not loaded through a traditional PE / exe loader, but just unpacked into memory.
=== .text ===
The .text section contains the kernel exports.
=== .data ===
The .data section stores initialized and uninitialized data.
A copy of the initialized portion of this section is usually stored in the [[BIOS]].
=== STICKY ===
Stores variables which must be preserved across a quick-reboot.
=== IDEXPRDT ===
A Physical Region Descriptor Table (PRDT) for the IDE bus. This section serves as a memory allocation only, it does not have to be initialized when loading the kernel{{citation needed}}.
=== INIT ===
This section is always the last one. It contains the entrypoint of the kernel.
This does all the cold-boot kernel initialization as described [[Boot_Process#Initialization|here]].
Later kernels{{FIXME|reason=Which revision? right now it appears that *ALL* kernels will discard this}} will discard this section after initialization.
INIT also contains the [[Boot Animation]], so once the kernel has finished booting it can't do a full hardware re-initialization or play the boot animation anymore.
== Kernel exports ==
{| class="wikitable"
|+Kernel exports
|-
!Name
!Ordinal
!x86 Calling Convention
!Notes
|-
|[[Kernel/AvGetSavedDataAddress]]
|1
|stdcall
|
|-
|[[Kernel/AvSendTVEncoderOption]]
|2
|stdcall
|
|-
|[[Kernel/AvSetDisplayMode]]
|3
|stdcall
|
|-
|[[Kernel/AvSetSavedDataAddress]]
|4
|stdcall
|
|-
|[[Kernel/DbgBreakPoint]]
|5
|stdcall
|
|-
|[[Kernel/DbgBreakPointWithStatus]]
|6
|stdcall
|
|-
|[[Kernel/DbgLoadImageSymbols]]
|7
|stdcall
|Devkits only!
|-
|[[Kernel/DbgPrint]]
|8
|stdcall
|
|-
|[[Kernel/HalReadSMCTrayState]]
|9
|stdcall
|
|-
|[[Kernel/DbgPrompt]]
|10
|stdcall
|
|-
|[[Kernel/DbgUnLoadImageSymbols]]
|11
|stdcall
|Devkits only!
|-
|[[Kernel/ExAcquireReadWriteLockExclusive]]
|12
|stdcall
|
|-
|[[Kernel/ExAcquireReadWriteLockShared]]
|13
|stdcall
|
|-
|[[Kernel/ExAllocatePool]]
|14
|stdcall
|
|-
|[[Kernel/ExAllocatePoolWithTag]]
|15
|stdcall
|
|-
|[[Kernel/ExEventObjectType]]
|16
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExFreePool]]
|17
|stdcall
|
|-
|[[Kernel/ExInitializeReadWriteLock]]
|18
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeInteger]]
|19
|stdcall
|
|-
|[[Kernel/ExInterlockedAddLargeStatistic]]
|20
|fastcall
|
|-
|[[Kernel/ExInterlockedCompareExchange64]]
|21
|fastcall
|
|-
|[[Kernel/ExMutantObjectType]]
|22
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExQueryPoolBlockSize]]
|23
|stdcall
|
|-
|[[Kernel/ExQueryNonVolatileSetting]]
|24
|stdcall
|
|-
|[[Kernel/ExReadWriteRefurbInfo]]
|25
|stdcall
|
|-
|[[Kernel/ExRaiseException]]
|26
|stdcall
|
|-
|[[Kernel/ExRaiseStatus]]
|27
|stdcall
|
|-
|[[Kernel/ExReleaseReadWriteLock]]
|28
|stdcall
|
|-
|[[Kernel/ExSaveNonVolatileSetting]]
|29
|stdcall
|
|-
|[[Kernel/ExSemaphoreObjectType]]
|30
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExTimerObjectType]]
|31
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ExfInterlockedInsertHeadList]]
|32
|stdcall
|
|-
|[[Kernel/ExfInterlockedInsertTailList]]
|33
|fastcall
|
|-
|[[Kernel/ExfInterlockedRemoveHeadList]]
|34
|fastcall
|
|-
|[[Kernel/FscGetCacheSize]]
|35
|stdcall
|
|-
|[[Kernel/FscInvalidateIdleBlocks]]
|36
|stdcall
|
|-
|[[Kernel/FscSetCacheSize]]
|37
|stdcall
|
|-
|[[Kernel/HalClearSoftwareInterrupt]]
|38
|fastcall
|
|-
|[[Kernel/HalDisableSystemInterrupt]]
|39
|stdcall
|
|-
|[[Kernel/HalDiskCachePartitionCount]]
|40
|
|Variable: ULONG
|-
|[[Kernel/HalDiskModelNumber]]
|41
|
|Variable: STRING
|-
|[[Kernel/HalDiskSerialNumber]]
|42
|
|Variable: STRING
|-
|[[Kernel/HalEnableSystemInterrupt]]
|43
|stdcall
|
|-
|[[Kernel/HalGetInterruptVector]]
|44
|stdcall
|
|-
|[[Kernel/HalReadSMBusValue]]
|45
|stdcall
|
|-
|[[Kernel/HalReadWritePCISpace]]
|46
|stdcall
|
|-
|[[Kernel/HalRegisterShutdownNotification]]
|47
|stdcall
|
|-
|[[Kernel/HalRequestSoftwareInterrupt]]
|48
|fastcall
|
|-
|[[Kernel/HalReturnToFirmware]]
|49
|stdcall
|
|-
|[[Kernel/HalWriteSMBusValue]]
|50
|stdcall
|
|-
|[[Kernel/InterlockedCompareExchange]]
|51
|fastcall
|
|-
|[[Kernel/InterlockedDecrement]]
|52
|fastcall
|
|-
|[[Kernel/InterlockedIncrement]]
|53
|fastcall
|
|-
|[[Kernel/InterlockedExchange]]
|54
|fastcall
|
|-
|[[Kernel/InterlockedExchangeAdd]]
|55
|fastcall
|
|-
|[[Kernel/InterlockedFlushSList]]
|56
|fastcall
|
|-
|[[Kernel/InterlockedPopEntrySList]]
|57
|fastcall
|
|-
|[[Kernel/InterlockedPushEntrySList]]
|58
|fastcall
|
|-
|[[Kernel/IoAllocateIrp]]
|59
|stdcall
|
|-
|[[Kernel/IoBuildAsynchronousFsdRequest]]
|60
|stdcall
|
|-
|[[Kernel/IoBuildDeviceIoControlRequest]]
|61
|stdcall
|
|-
|[[Kernel/IoBuildSynchronousFsdRequest]]
|62
|stdcall
|
|-
|[[Kernel/IoCheckShareAccess]]
|63
|stdcall
|
|-
|[[Kernel/IoCompletionObjectType]]
|64
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoCreateDevice]]
|65
|stdcall
|
|-
|[[Kernel/IoCreateFile]]
|66
|stdcall
|
|-
|[[Kernel/IoCreateSymbolicLink]]
|67
|stdcall
|
|-
|[[Kernel/IoDeleteDevice]]
|68
|stdcall
|
|-
|[[Kernel/IoDeleteSymbolicLink]]
|69
|stdcall
|
|-
|[[Kernel/IoDeviceObjectType]]
|70
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFileObjectType]]
|71
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/IoFreeIrp]]
|72
|stdcall
|
|-
|[[Kernel/IoInitializeIrp]]
|73
|stdcall
|
|-
|[[Kernel/IoInvalidDeviceRequest]]
|74
|stdcall
|
|-
|[[Kernel/IoQueryFileInformation]]
|75
|stdcall
|
|-
|[[Kernel/IoQueryVolumeInformation]]
|76
|stdcall
|
|-
|[[Kernel/IoQueueThreadIrp]]
|77
|stdcall
|
|-
|[[Kernel/IoRemoveShareAccess]]
|78
|stdcall
|
|-
|[[Kernel/IoSetIoCompletion]]
|79
|stdcall
|
|-
|[[Kernel/IoSetShareAccess]]
|80
|stdcall
|
|-
|[[Kernel/IoStartNextPacket]]
|81
|stdcall
|
|-
|[[Kernel/IoStartNextPacketByKey]]
|82
|stdcall
|
|-
|[[Kernel/IoStartPacket]]
|83
|stdcall
|
|-
|[[Kernel/IoSynchronousDeviceIoControlRequest]]
|84
|stdcall
|
|-
|[[Kernel/IoSynchronousFsdRequest]]
|85
|stdcall
|
|-
|[[Kernel/IofCallDriver]]
|86
|fastcall
|
|-
|[[Kernel/IofCompleteRequest]]
|87
|fastcall
|
|-
|[[Kernel/KdDebuggerEnabled]]
|88
|
|Variable: BOOLEAN
|-
|[[Kernel/KdDebuggerNotPresent]]
|89
|
|Variable: BOOLEAN
|-
|[[Kernel/IoDismountVolume]]
|90
|stdcall
|
|-
|[[Kernel/IoDismountVolumeByName]]
|91
|stdcall
|
|-
|[[Kernel/KeAlertResumeThread]]
|92
|stdcall
|
|-
|[[Kernel/KeAlertThread]]
|93
|stdcall
|
|-
|[[Kernel/KeBoostPriorityThread]]
|94
|stdcall
|
|-
|[[Kernel/KeBugCheck]]
|95
|stdcall
|
|-
|[[Kernel/KeBugCheckEx]]
|96
|stdcall
|
|-
|[[Kernel/KeCancelTimer]]
|97
|stdcall
|
|-
|[[Kernel/KeConnectInterrupt]]
|98
|stdcall
|
|-
|[[Kernel/KeDelayExecutionThread]]
|99
|stdcall
|
|-
|[[Kernel/KeDisconnectInterrupt]]
|100
|stdcall
|
|-
|[[Kernel/KeEnterCriticalRegion]]
|101
|stdcall
|
|-
|[[Kernel/MmGlobalData]]
|102
|
|Variable: MMGLOBALDATA
|-
|[[Kernel/KeGetCurrentIrql]]
|103
|stdcall
|
|-
|[[Kernel/KeGetCurrentThread]]
|104
|stdcall
|
|-
|[[Kernel/KeInitializeApc]]
|105
|stdcall
|
|-
|[[Kernel/KeInitializeDeviceQueue]]
|106
|stdcall
|
|-
|[[Kernel/KeInitializeDpc]]
|107
|stdcall
|
|-
|[[Kernel/KeInitializeEvent]]
|108
|stdcall
|
|-
|[[Kernel/KeInitializeInterrupt]]
|109
|stdcall
|
|-
|[[Kernel/KeInitializeMutant]]
|110
|stdcall
|
|-
|[[Kernel/KeInitializeQueue]]
|111
|stdcall
|
|-
|[[Kernel/KeInitializeSemaphore]]
|112
|stdcall
|
|-
|[[Kernel/KeInitializeTimerEx]]
|113
|stdcall
|
|-
|[[Kernel/KeInsertByKeyDeviceQueue]]
|114
|stdcall
|
|-
|[[Kernel/KeInsertDeviceQueue]]
|115
|stdcall
|
|-
|[[Kernel/KeInsertHeadQueue]]
|116
|stdcall
|
|-
|[[Kernel/KeInsertQueue]]
|117
|stdcall
|
|-
|[[Kernel/KeInsertQueueApc]]
|118
|stdcall
|
|-
|[[Kernel/KeInsertQueueDpc]]
|119
|stdcall
|
|-
|[[Kernel/KeInterruptTime]]
|120
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeIsExecutingDpc]]
|121
|stdcall
|
|-
|[[Kernel/KeLeaveCriticalRegion]]
|122
|stdcall
|
|-
|[[Kernel/KePulseEvent]]
|123
|stdcall
|
|-
|[[Kernel/KeQueryBasePriorityThread]]
|124
|stdcall
|
|-
|[[Kernel/KeQueryInterruptTime]]
|125
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceCounter]]
|126
|stdcall
|
|-
|[[Kernel/KeQueryPerformanceFrequency]]
|127
|stdcall
|
|-
|[[Kernel/KeQuerySystemTime]]
|128
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToDpcLevel]]
|129
|stdcall
|
|-
|[[Kernel/KeRaiseIrqlToSynchLevel]]
|130
|stdcall
|
|-
|[[Kernel/KeReleaseMutant]]
|131
|stdcall
|
|-
|[[Kernel/KeReleaseSemaphore]]
|132
|stdcall
|
|-
|[[Kernel/KeRemoveByKeyDeviceQueue]]
|133
|stdcall
|
|-
|[[Kernel/KeRemoveDeviceQueue]]
|134
|stdcall
|
|-
|[[Kernel/KeRemoveEntryDeviceQueue]]
|135
|stdcall
|
|-
|[[Kernel/KeRemoveQueue]]
|136
|stdcall
|
|-
|[[Kernel/KeRemoveQueueDpc]]
|137
|stdcall
|
|-
|[[Kernel/KeResetEvent]]
|138
|stdcall
|
|-
|[[Kernel/KeRestoreFloatingPointState]]
|139
|stdcall
|
|-
|[[Kernel/KeResumeThread]]
|140
|stdcall
|
|-
|[[Kernel/KeRundownQueue]]
|141
|stdcall
|
|-
|[[Kernel/KeSaveFloatingPointState]]
|142
|stdcall
|
|-
|[[Kernel/KeSetBasePriorityThread]]
|143
|stdcall
|
|-
|[[Kernel/KeSetDisableBoostThread]]
|144
|stdcall
|
|-
|[[Kernel/KeSetEvent]]
|145
|stdcall
|
|-
|[[Kernel/KeSetEventBoostPriority]]
|146
|stdcall
|
|-
|[[Kernel/KeSetPriorityProcess]]
|147
|stdcall
|
|-
|[[Kernel/KeSetPriorityThread]]
|148
|stdcall
|
|-
|[[Kernel/KeSetTimer]]
|149
|stdcall
|
|-
|[[Kernel/KeSetTimerEx]]
|150
|stdcall
|
|-
|[[Kernel/KeStallExecutionProcessor]]
|151
|stdcall
|
|-
|[[Kernel/KeSuspendThread]]
|152
|stdcall
|
|-
|[[Kernel/KeSynchronizeExecution]]
|153
|stdcall
|
|-
|[[Kernel/KeSystemTime]]
|154
|
|Variable: KSYSTEM_TIME
|-
|[[Kernel/KeTestAlertThread]]
|155
|stdcall
|
|-
|[[Kernel/KeTickCount]]
|156
|
|Variable: ULONG
|-
|[[Kernel/KeTimeIncrement]]
|157
|
|Variable: ULONG
|-
|[[Kernel/KeWaitForMultipleObjects]]
|158
|stdcall
|
|-
|[[Kernel/KeWaitForSingleObject]]
|159
|stdcall
|
|-
|[[Kernel/KfRaiseIrql]]
|160
|fastcall
|
|-
|[[Kernel/KfLowerIrql]]
|161
|fastcall
|
|-
|[[Kernel/KiBugCheckData]]
|162
|
|Variable: ULONG_PTR[5]
|-
|[[Kernel/KiUnlockDispatcherDatabase]]
|163
|fastcall
|
|-
|[[Kernel/LaunchDataPage]]
|164
|
|Variable: PLAUNCH_DATA_PAGE
|-
|[[Kernel/MmAllocateContiguousMemory]]
|165
|stdcall
|
|-
|[[Kernel/MmAllocateContiguousMemoryEx]]
|166
|stdcall
|
|-
|[[Kernel/MmAllocateSystemMemory]]
|167
|stdcall
|
|-
|[[Kernel/MmClaimGpuInstanceMemory]]
|168
|stdcall
|
|-
|[[Kernel/MmCreateKernelStack]]
|169
|stdcall
|
|-
|[[Kernel/MmDeleteKernelStack]]
|170
|stdcall
|
|-
|[[Kernel/MmFreeContiguousMemory]]
|171
|stdcall
|
|-
|[[Kernel/MmFreeSystemMemory]]
|172
|stdcall
|
|-
|[[Kernel/MmGetPhysicalAddress]]
|173
|stdcall
|
|-
|[[Kernel/MmIsAddressValid]]
|174
|stdcall
|
|-
|[[Kernel/MmLockUnlockBufferPages]]
|175
|stdcall
|
|-
|[[Kernel/MmLockUnlockPhysicalPage]]
|176
|stdcall
|
|-
|[[Kernel/MmMapIoSpace]]
|177
|stdcall
|
|-
|[[Kernel/MmPersistContiguousMemory]]
|178
|stdcall
|
|-
|[[Kernel/MmQueryAddressProtect]]
|179
|stdcall
|
|-
|[[Kernel/MmQueryAllocationSize]]
|180
|stdcall
|
|-
|[[Kernel/MmQueryStatistics]]
|181
|stdcall
|
|-
|[[Kernel/MmSetAddressProtect]]
|182
|stdcall
|
|-
|[[Kernel/MmUnmapIoSpace]]
|183
|stdcall
|
|-
|[[Kernel/NtAllocateVirtualMemory]]
|184
|stdcall
|
|-
|[[Kernel/NtCancelTimer]]
|185
|stdcall
|
|-
|[[Kernel/NtClearEvent]]
|186
|stdcall
|
|-
|[[Kernel/NtClose]]
|187
|stdcall
|
|-
|[[Kernel/NtCreateDirectoryObject]]
|188
|stdcall
|
|-
|[[Kernel/NtCreateEvent]]
|189
|stdcall
|
|-
|[[Kernel/NtCreateFile]]
|190
|stdcall
|
|-
|[[Kernel/NtCreateIoCompletion]]
|191
|stdcall
|
|-
|[[Kernel/NtCreateMutant]]
|192
|stdcall
|
|-
|[[Kernel/NtCreateSemaphore]]
|193
|stdcall
|
|-
|[[Kernel/NtCreateTimer]]
|194
|stdcall
|
|-
|[[Kernel/NtDeleteFile]]
|195
|stdcall
|
|-
|[[Kernel/NtDeviceIoControlFile]]
|196
|stdcall
|
|-
|[[Kernel/NtDuplicateObject]]
|197
|stdcall
|
|-
|[[Kernel/NtFlushBuffersFile]]
|198
|stdcall
|
|-
|[[Kernel/NtFreeVirtualMemory]]
|199
|stdcall
|
|-
|[[Kernel/NtFsControlFile]]
|200
|stdcall
|
|-
|[[Kernel/NtOpenDirectoryObject]]
|201
|stdcall
|
|-
|[[Kernel/NtOpenFile]]
|202
|stdcall
|
|-
|[[Kernel/NtOpenSymbolicLinkObject]]
|203
|stdcall
|
|-
|[[Kernel/NtProtectVirtualMemory]]
|204
|stdcall
|
|-
|[[Kernel/NtPulseEvent]]
|205
|stdcall
|
|-
|[[Kernel/NtQueueApcThread]]
|206
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryFile]]
|207
|stdcall
|
|-
|[[Kernel/NtQueryDirectoryObject]]
|208
|stdcall
|
|-
|[[Kernel/NtQueryEvent]]
|209
|stdcall
|
|-
|[[Kernel/NtQueryFullAttributesFile]]
|210
|stdcall
|
|-
|[[Kernel/NtQueryInformationFile]]
|211
|stdcall
|
|-
|[[Kernel/NtQueryIoCompletion]]
|212
|stdcall
|
|-
|[[Kernel/NtQueryMutant]]
|213
|stdcall
|
|-
|[[Kernel/NtQuerySemaphore]]
|214
|stdcall
|
|-
|[[Kernel/NtQuerySymbolicLinkObject]]
|215
|stdcall
|
|-
|[[Kernel/NtQueryTimer]]
|216
|stdcall
|
|-
|[[Kernel/NtQueryVirtualMemory]]
|217
|stdcall
|
|-
|[[Kernel/NtQueryVolumeInformationFile]]
|218
|stdcall
|
|-
|[[Kernel/NtReadFile]]
|219
|stdcall
|
|-
|[[Kernel/NtReadFileScatter]]
|220
|stdcall
|
|-
|[[Kernel/NtReleaseMutant]]
|221
|stdcall
|
|-
|[[Kernel/NtReleaseSemaphore]]
|222
|stdcall
|
|-
|[[Kernel/NtRemoveIoCompletion]]
|223
|stdcall
|
|-
|[[Kernel/NtResumeThread]]
|224
|stdcall
|
|-
|[[Kernel/NtSetEvent]]
|225
|stdcall
|
|-
|[[Kernel/NtSetInformationFile]]
|226
|stdcall
|
|-
|[[Kernel/NtSetIoCompletion]]
|227
|stdcall
|
|-
|[[Kernel/NtSetSystemTime]]
|228
|stdcall
|
|-
|[[Kernel/NtSetTimerEx]]
|229
|stdcall
|
|-
|[[Kernel/NtSignalAndWaitForSingleObjectEx]]
|230
|stdcall
|
|-
|[[Kernel/NtSuspendThread]]
|231
|stdcall
|
|-
|[[Kernel/NtUserIoApcDispatcher]]
|232
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObject]]
|233
|stdcall
|
|-
|[[Kernel/NtWaitForSingleObjectEx]]
|234
|stdcall
|
|-
|[[Kernel/NtWaitForMultipleObjectsEx]]
|235
|stdcall
|
|-
|[[Kernel/NtWriteFile]]
|236
|stdcall
|
|-
|[[Kernel/NtWriteFileGather]]
|237
|stdcall
|
|-
|[[Kernel/NtYieldExecution]]
|238
|stdcall
|
|-
|[[Kernel/ObCreateObject]]
|239
|stdcall
|
|-
|[[Kernel/ObDirectoryObjectType]]
|240
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObInsertObject]]
|241
|stdcall
|
|-
|[[Kernel/ObMakeTemporaryObject]]
|242
|stdcall
|
|-
|[[Kernel/ObOpenObjectByName]]
|243
|stdcall
|
|-
|[[Kernel/ObOpenObjectByPointer]]
|244
|stdcall
|
|-
|[[Kernel/ObpObjectHandleTable]]
|245
|
|Variable: OBJECT_HANDLE_TABLE
|-
|[[Kernel/ObReferenceObjectByHandle]]
|246
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByName]]
|247
|stdcall
|
|-
|[[Kernel/ObReferenceObjectByPointer]]
|248
|stdcall
|
|-
|[[Kernel/ObSymbolicLinkObjectType]]
|249
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/ObfDereferenceObject]]
|250
|fastcall
|
|-
|[[Kernel/ObfReferenceObject]]
|251
|fastcall
|
|-
|[[Kernel/PhyGetLinkState]]
|252
|stdcall
|
|-
|[[Kernel/PhyInitialize]]
|253
|stdcall
|
|-
|[[Kernel/PsCreateSystemThread]]
|254
|stdcall
|
|-
|[[Kernel/PsCreateSystemThreadEx]]
|255
|stdcall
|
|-
|[[Kernel/PsQueryStatistics]]
|256
|stdcall
|
|-
|[[Kernel/PsSetCreateThreadNotifyRoutine]]
|257
|stdcall
|
|-
|[[Kernel/PsTerminateSystemThread]]
|258
|stdcall
|
|-
|[[Kernel/PsThreadObjectType]]
|259
|
|Variable: OBJECT_TYPE
|-
|[[Kernel/RtlAnsiStringToUnicodeString]]
|260
|stdcall
|
|-
|[[Kernel/RtlAppendStringToString]]
|261
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeStringToString]]
|262
|stdcall
|
|-
|[[Kernel/RtlAppendUnicodeToString]]
|263
|stdcall
|
|-
|[[Kernel/RtlAssert]]
|264
|stdcall
|
|-
|[[Kernel/RtlCaptureContext]]
|265
|stdcall
|
|-
|[[Kernel/RtlCaptureStackBackTrace]]
|266
|stdcall
|
|-
|[[Kernel/RtlCharToInteger]]
|267
|stdcall
|
|-
|[[Kernel/RtlCompareMemory]]
|268
|stdcall
|
|-
|[[Kernel/RtlCompareMemoryUlong]]
|269
|stdcall
|
|-
|[[Kernel/RtlCompareString]]
|270
|stdcall
|
|-
|[[Kernel/RtlCompareUnicodeString]]
|271
|stdcall
|
|-
|[[Kernel/RtlCopyString]]
|272
|stdcall
|
|-
|[[Kernel/RtlCopyUnicodeString]]
|273
|stdcall
|
|-
|[[Kernel/RtlCreateUnicodeString]]
|274
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeChar]]
|275
|stdcall
|
|-
|[[Kernel/RtlDowncaseUnicodeString]]
|276
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSection]]
|277
|stdcall
|
|-
|[[Kernel/RtlEnterCriticalSectionAndRegion]]
|278
|stdcall
|
|-
|[[Kernel/RtlEqualString]]
|279
|stdcall
|
|-
|[[Kernel/RtlEqualUnicodeString]]
|280
|stdcall
|
|-
|[[Kernel/RtlExtendedIntegerMultiply]]
|281
|stdcall
|
|-
|[[Kernel/RtlExtendedLargeIntegerDivide]]
|282
|stdcall
|
|-
|[[Kernel/RtlExtendedMagicDivide]]
|283
|stdcall
|
|-
|[[Kernel/RtlFillMemory]]
|284
|stdcall
|
|-
|[[Kernel/RtlFillMemoryUlong]]
|285
|stdcall
|
|-
|[[Kernel/RtlFreeAnsiString]]
|286
|stdcall
|
|-
|[[Kernel/RtlFreeUnicodeString]]
|287
|stdcall
|
|-
|[[Kernel/RtlGetCallersAddress]]
|288
|stdcall
|
|-
|[[Kernel/RtlInitAnsiString]]
|289
|stdcall
|
|-
|[[Kernel/RtlInitUnicodeString]]
|290
|stdcall
|
|-
|[[Kernel/RtlInitializeCriticalSection]]
|291
|stdcall
|
|-
|[[Kernel/RtlIntegerToChar]]
|292
|stdcall
|
|-
|[[Kernel/RtlIntegerToUnicodeString]]
|293
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSection]]
|294
|stdcall
|
|-
|[[Kernel/RtlLeaveCriticalSectionAndRegion]]
|295
|stdcall
|
|-
|[[Kernel/RtlLowerChar]]
|296
|stdcall
|
|-
|[[Kernel/RtlMapGenericMask]]
|297
|stdcall
|
|-
|[[Kernel/RtlMoveMemory]]
|298
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeN]]
|299
|stdcall
|
|-
|[[Kernel/RtlMultiByteToUnicodeSize]]
|300
|stdcall
|
|-
|[[Kernel/RtlNtStatusToDosError]]
|301
|stdcall
|
|-
|[[Kernel/RtlRaiseException]]
|302
|stdcall
|
|-
|[[Kernel/RtlRaiseStatus]]
|303
|stdcall
|
|-
|[[Kernel/RtlTimeFieldsToTime]]
|304
|stdcall
|
|-
|[[Kernel/RtlTimeToTimeFields]]
|305
|stdcall
|
|-
|[[Kernel/RtlTryEnterCriticalSection]]
|306
|stdcall
|
|-
|[[Kernel/RtlUlongByteSwap]]
|307
|fastcall
|
|-
|[[Kernel/RtlUnicodeStringToAnsiString]]
|308
|stdcall
|
|-
|[[Kernel/RtlUnicodeStringToInteger]]
|309
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteN]]
|310
|stdcall
|
|-
|[[Kernel/RtlUnicodeToMultiByteSize]]
|311
|stdcall
|
|-
|[[Kernel/RtlUnwind]]
|312
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeChar]]
|313
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeString]]
|314
|stdcall
|
|-
|[[Kernel/RtlUpcaseUnicodeToMultiByteN]]
|315
|stdcall
|
|-
|[[Kernel/RtlUpperChar]]
|316
|stdcall
|
|-
|[[Kernel/RtlUpperString]]
|317
|stdcall
|
|-
|[[Kernel/RtlUshortByteSwap]]
|318
|fastcall
|
|-
|[[Kernel/RtlWalkFrameChain]]
|319
|stdcall
|
|-
|[[Kernel/RtlZeroMemory]]
|320
|stdcall
|
|-
|[[Kernel/XboxEEPROMKey]]
|321
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxHardwareInfo]]
|322
|
|Variable: XBOX_HARDWARE_INFO
|-
|[[Kernel/XboxHDKey]]
|323
|
|Variable: XBOX_KEY_DATA
|-
|[[Kernel/XboxKrnlVersion]]
|324
|
|Variable: XBOX_KRNL_VERSION
|-
|[[Kernel/XboxSignatureKey]]
|325
|
|Variable: XBOX_KEY_DATA; modified by active XBE Certificate
|-
|[[Kernel/XeImageFileName]]
|326
|
|Variable: OBJECT_STRING
|-
|[[Kernel/XeLoadSection]]
|327
|stdcall
|
|-
|[[Kernel/XeUnloadSection]]
|328
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_UCHAR]]
|329
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_USHORT]]
|330
|stdcall
|
|-
|[[Kernel/READ_PORT_BUFFER_ULONG]]
|331
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_UCHAR]]
|332
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_USHORT]]
|333
|stdcall
|
|-
|[[Kernel/WRITE_PORT_BUFFER_ULONG]]
|334
|stdcall
|
|-
|[[Kernel/XcSHAInit]]
|335
|stdcall
|
|-
|[[Kernel/XcSHAUpdate]]
|336
|stdcall
|
|-
|[[Kernel/XcSHAFinal]]
|337
|stdcall
|
|-
|[[Kernel/XcRC4Key]]
|338
|stdcall
|
|-
|[[Kernel/XcRC4Crypt]]
|339
|stdcall
|
|-
|[[Kernel/XcHMAC]]
|340
|stdcall
|
|-
|[[Kernel/XcPKEncPublic]]
|341
|stdcall
|
|-
|[[Kernel/XcPKDecPrivate]]
|342
|stdcall
|
|-
|[[Kernel/XcPKGetKeyLen]]
|343
|stdcall
|
|-
|[[Kernel/XcVerifyPKCS1Signature]]
|344
|stdcall
|
|-
|[[Kernel/XcModExp]]
|345
|stdcall
|
|-
|[[Kernel/XcDESKeyParity]]
|346
|stdcall
|
|-
|[[Kernel/XcKeyTable]]
|347
|stdcall
|
|-
|[[Kernel/XcBlockCrypt]]
|348
|stdcall
|
|-
|[[Kernel/XcBlockCryptCBC]]
|349
|stdcall
|
|-
|[[Kernel/XcCryptService]]
|350
|stdcall
|
|-
|[[Kernel/XcUpdateCrypto]]
|351
|stdcall
|
|-
|[[Kernel/RtlRip]]
|352
|stdcall
|
|-
|[[Kernel/XboxLANKey]]
|353
|
|Variable: XBOX_KEY_DATA; modified by active XBE Certificate
|-
|[[Kernel/XboxAlternateSignatureKeys]]
|354
|
|Variable: XBOX_KEY_DATA[XBEIMAGE_ALTERNATE_TITLE_ID_COUNT]; modified by active XBE Certificate
|-
|[[Kernel/XePublicKeyData]]
|355
|
|Variable: UCHAR[XC_PUBLIC_KEYDATA_SIZE]
|-
|[[Kernel/HalBootSMCVideoMode]]
|356
|
|Variable: ULONG
|-
|[[Kernel/IdexChannelObject]]
|357
|
|Variable: IDE_CHANNEL_OBJECT
|-
|[[Kernel/HalIsResetOrShutdownPending]]
|358
|stdcall
|
|-
|[[Kernel/IoMarkIrpMustComplete]]
|359
|stdcall
|
|-
|[[Kernel/HalInitiateShutdown]]
|360
|stdcall
|
|-
|[[Kernel/RtlSnprintf]]
|361
|stdcall
|Unused?
|-
|[[Kernel/RtlSprintf]]
|362
|stdcall
|Unused?
|-
|[[Kernel/RtlVsnprintf]]
|363
|stdcall
|Unused?
|-
|[[Kernel/RtlVsprintf]]
|364
|stdcall
|Unused?
|-
|[[Kernel/HalEnableSecureTrayEject]]
|365
|stdcall
|
|-
|[[Kernel/HalWriteSMCScratchRegister]]
|366
|stdcall
|
|-
|
|367
|
|Unused?
|-
|
|368
|
|Unused?
|-
|
|369
|
|Unused?
|-
|[[Kernel/XProfpControl]]
|370
|
|Profiling-enabled builds only!
|-
|[[Kernel/XProfpGetData]]
|371
|
|Profiling-enabled builds only!
|-
|[[Kernel/IrtClientInitFast]]
|372
|
|Profiling-enabled builds only!
|-
|[[Kernel/IrtSweep]]
|373
|
|Profiling-enabled builds only!
|-
|[[Kernel/MmDbgAllocateMemory]]
|374
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgFreeMemory]]
|375
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgQueryAvailablePages]]
|376
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgReleaseAddress]]
|377
|stdcall
|Devkits only!
|-
|[[Kernel/MmDbgWriteCheck]]
|378
|stdcall
|Devkits only!
|}
4913b51349f7571f241f8e427102ae2a96539369
Fatal Error
0
3710
6599
5275
2018-10-27T22:23:27Z
JayFoxRox
2
Be more precise with HDD and DVD errors
wikitext
text/x-wiki
These are the errors which will be displayed [[File:Fatal_Error_13.png|300px|thumb|right|Fatal Error 13 being displayed]]
Checked after cold-boot, in this particular order{{FIXME|reason=We should split this into larger blocks, like HDD initalization, DVD initialization, .. and then explain the steps in each}}:
{| class="wikitable"
!Value (2 digit decimal)
!Step / Condition
|-
|07
|Harddrive never left busy state (after reset from cold-boot)
|-
|09
|Setting Harddrive PIO mode failed
|-
|09
|Setting Harddrive DMA mode failed
|-
|08
|Harddrive ATA identify device command failed
|-
|09
|Harddrive is too small for cache partitions
|-
|06
|Unable to unlock Harddrive
|-
|08
|Harddrive ATA identify device after unlock command failed
|-
|08
|Setting Harddrive device parameters failed
|-
|10
|DVD Drive never left busy state (after reset from cold-boot)
|-
|12
|Setting DVD Drive PIO mode failed
|-
|12
|Setting DVD Drive DMA mode failed
|-
|11
|DVD Drive ATAPI identify device command failed
|}
Additional error codes, or no precise order known{{FIXME|reason=Figure out the order}}:
{| class="wikitable"
!Value (2 digit decimal)
!Generic meaning
|-
|00
|No error (used internally to clear error flags from EEPROM)
|-
|01
|
|-
|02
|EEPROM Checksum failure
|-
|03
|
|-
|04
|RAM bad
|-
|05
|Harddrive not locked{{FIXME|reason=When is this actually checked?}}
|-
|13
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 0</code> (MainMenu)
|-
|14
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 1</code> (Error)
|-
|15
|
|-
|16
|Dashboard settings error{{citation needed}}
|-
|17
|
|-
|18
|
|-
|19
|
|-
|20
|Dashboard failed to launch, but DVD security check was successful
|-
|21
|Used to manually display fatal error after reboot (on purpose)
|}
850ba6c6fa9b471b553493dcbc46e29e33fb1fe6
6600
6599
2018-10-27T22:34:21Z
JayFoxRox
2
Also add more information for error 5
wikitext
text/x-wiki
These are the errors which will be displayed [[File:Fatal_Error_13.png|300px|thumb|right|Fatal Error 13 being displayed]]
Checked after cold-boot, in this particular order{{FIXME|reason=We should split this into larger blocks, like HDD initalization, DVD initialization, .. and then explain the steps in each}}:
{| class="wikitable"
!Value (2 digit decimal)
!Step / Condition
<!--
IDE / Harddive initialization
-->
|-
|07
|Harddrive never left busy state (after reset from cold-boot)
|-
|09
|Setting Harddrive PIO mode failed
|-
|09
|Setting Harddrive DMA mode failed
|-
|08
|Harddrive ATA identify device command failed
|-
|09
|Harddrive is too small for cache partitions
|-
|06
|Unable to unlock Harddrive
|-
|08
|Harddrive ATA identify device after unlock command failed
|-
|08
|Setting Harddrive device parameters failed
<!--
IDE / DVD Drive initialization
-->
|-
|10
|DVD Drive never left busy state (after reset from cold-boot)
|-
|12
|Setting DVD Drive PIO mode failed
|-
|12
|Setting DVD Drive DMA mode failed
|-
|11
|DVD Drive ATAPI identify device command failed
<!--
XBE Loader
-->
|-
|05
|Harddrive not locked; Not reported if either:
* XBE is allowed to run from unlocked HDD
* Xbox is in manufacturing region
* Kernel is made for Chihiro
* Kernel is made for XDK
|}
Additional error codes, or no precise order known{{FIXME|reason=Figure out the order}}:
{| class="wikitable"
!Value (2 digit decimal)
!Generic meaning
|-
|00
|No error (used internally to clear error flags from EEPROM)
|-
|01
|
|-
|02
|EEPROM Checksum failure
|-
|03
|
|-
|04
|RAM bad
|-
|13
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 0</code> (MainMenu)
|-
|14
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 1</code> (Error)
|-
|15
|
|-
|16
|Dashboard settings error{{citation needed}}
|-
|17
|
|-
|18
|
|-
|19
|
|-
|20
|Dashboard failed to launch, but DVD security check was successful
|-
|21
|Used to manually display fatal error after reboot (on purpose)
|}
158d5f68f8987a04f794c328e200ce619d0abc7b
6602
6600
2018-11-02T15:24:06Z
JayFoxRox
2
Added note about lack of error code display in kernel 3944
wikitext
text/x-wiki
These are the errors which will be displayed [[File:Fatal_Error_13.png|300px|thumb|right|Fatal Error 13 being displayed]].
Kernel version 3944 is the only known official kernel which doesn't show an error code in the corner{{FIXME|reason=Does it still pulse the hardware pin? does it still set error code in the SMC?}}.
Checked after cold-boot, in this particular order{{FIXME|reason=We should split this into larger blocks, like HDD initalization, DVD initialization, .. and then explain the steps in each}}:
{| class="wikitable"
!Value (2 digit decimal)
!Step / Condition
<!--
IDE / Harddive initialization
-->
|-
|07
|Harddrive never left busy state (after reset from cold-boot)
|-
|09
|Setting Harddrive PIO mode failed
|-
|09
|Setting Harddrive DMA mode failed
|-
|08
|Harddrive ATA identify device command failed
|-
|09
|Harddrive is too small for cache partitions
|-
|06
|Unable to unlock Harddrive
|-
|08
|Harddrive ATA identify device after unlock command failed
|-
|08
|Setting Harddrive device parameters failed
<!--
IDE / DVD Drive initialization
-->
|-
|10
|DVD Drive never left busy state (after reset from cold-boot)
|-
|12
|Setting DVD Drive PIO mode failed
|-
|12
|Setting DVD Drive DMA mode failed
|-
|11
|DVD Drive ATAPI identify device command failed
<!--
XBE Loader
-->
|-
|05
|Harddrive not locked; Not reported if either:
* XBE is allowed to run from unlocked HDD
* Xbox is in manufacturing region
* Kernel is made for Chihiro
* Kernel is made for XDK
|}
Additional error codes, or no precise order known{{FIXME|reason=Figure out the order}}:
{| class="wikitable"
!Value (2 digit decimal)
!Generic meaning
|-
|00
|No error (used internally to clear error flags from EEPROM)
|-
|01
|
|-
|02
|EEPROM Checksum failure
|-
|03
|
|-
|04
|RAM bad
|-
|13
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 0</code> (MainMenu)
|-
|14
|Dashboard broken, while [[Kernel/LaunchDataPage]] <code>reason == 1</code> (Error)
|-
|15
|
|-
|16
|Dashboard settings error{{citation needed}}
|-
|17
|
|-
|18
|
|-
|19
|
|-
|20
|Dashboard failed to launch, but DVD security check was successful
|-
|21
|Used to manually display fatal error after reboot (on purpose)
|}
34304827949d84d365458c03a3eafe04bbcfa590
Network
0
3692
6601
6550
2018-10-30T08:12:38Z
Wayo
2479
/* References and links */
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventually an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The XDK provides a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
The IANA registered port 3074 (UDP / TCP) is reserved for Xbox communications (See [[System Link]] and [[Xbox Live]]).
== Integrated network adapter ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips.
The Xbox MAC address is stored in the [[EEPROM]].
The network driver, including the protocol stack is contained in the XDK.
The kernel only contains a small number of exports to reset and get the state of the NIC.
The Xbox Linux team used the binary drivers from Nvidia{{citation needed}}{{FIXME|reason=Wasn't the open-source forcedeth driver used?}}.
==== Heartbeat ====
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Wireless adapter ==
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox setup disc (wich would update the dashboard if necessary).
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
3451845fbf75db50e9c30297319c5ea58eb664c6
NV2A
0
3675
6603
6266
2018-11-10T05:00:49Z
DaveX
2487
fix broken link
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web.archive.org/web/20031004105935/http://developer.nvidia.com:80/object/nv30_emulation.html NV30 information and emulator]
* [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf List of implemented GL extensions for NV10-NV30: "NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x)", 13 Nov. 2006]
23c12abdb51d7b6d0a5d3dba91f73731ea762820
6640
6603
2018-12-29T15:59:44Z
JayFoxRox
2
wikitext
text/x-wiki
The northbridge of the chipset, and is the GPU
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web.archive.org/web/20031004105935/http://developer.nvidia.com:80/object/nv30_emulation.html NV30 information and emulator]
* [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf List of implemented GL extensions for NV10-NV30: "NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x)", 13 Nov. 2006]
[[Category:NV2A]]
3d82cf8272772dcfea8c57d0dcdfcbc800c8c9f7
Resources
0
3
6604
6482
2018-12-21T20:52:02Z
Monocasa
2506
Replace beta archive.org with usable link
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
2ca0b958f4a7d85c4f7b47012b42d7516be3ad39
Emulators
0
3703
6605
6443
2018-12-21T21:00:59Z
Monocasa
2506
xbvm relied on kvm
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/Linux/Mac/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, it is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
0de03f9972ed886ad389ae7600201ebb3c72da5b
6645
6605
2019-01-05T23:11:10Z
JayFoxRox
2
Yet another Xbox emulator
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|
|Windows/Linux
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
c134c0700983f9ef51c719c445f288263f57b4fb
6646
6645
2019-01-05T23:11:56Z
JayFoxRox
2
(Had platform and license fields mixed for viXen)
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
a82b4f6f8a6d7f104aa87ae1c2ec130c5540a569
Main Page
0
1
6606
6553
2018-12-21T21:46:27Z
Espes
2484
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
** [[Network]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
747980a0a154edc0a7b603c5d4f23f7c29cc017a
6607
6606
2018-12-21T21:48:54Z
Espes
2484
/* Historical Pages */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
** [[Network]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
93705b7bf07994e4f34313f29ceb97987549f3da
6608
6607
2018-12-21T23:49:24Z
Monocasa
2506
Add PCI top level page
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
8d7e3ab049cccb83c6536e28ad6a7d91b62f49c2
6622
6608
2018-12-27T11:17:22Z
Espes
2484
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
5d9bcc3e7fc723f284bf7407025063e5fae13640
6623
6622
2018-12-27T11:24:50Z
Espes
2484
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
6fbe8a300f4b69acea9539058118e87b422c1b78
PCI
0
3977
6609
2018-12-22T00:55:03Z
Monocasa
2506
Created page with "== Overview == Most Xbox devices are ultimately exposed to the CPU via a PCI bus. PCI works by allowing individual devices to be interrogated and remapped through the physic..."
wikitext
text/x-wiki
== Overview ==
Most Xbox devices are ultimately exposed to the CPU via a PCI bus.
PCI works by allowing individual devices to be interrogated and remapped through the physical address space (both memory and IO space). This interrogation and configuration occurs in a special address space known as PCI Config Space. Typically an operating system scans the entire PCI Config Space at initilization time in order to map the relevant devices and load drivers. Like a lot of single purpose embedded systems, the Xbox was shipped at the point of being a minimum viable product (ie. the PCI bus is horribly broken in remarkably crazy ways).
PCI Config Addresses consist of three or four hex numbers, typically in the form of BB.DD:F or BB.DD:F.RR where
* BB - Bus number - 00 through FF
* DD - Device Number - 00 through 1F
* F - Function Number - 0 through 7
* RR - Register In PCI Config Space - 00 through FC (register access is aligned on 4 byte words)
== Devices ==
All dumps are from a DVT4 completely booted to the official 5558 debug ROM
=== 00.00:0 - Host Bridge Adapter ===
XCodes write 7ffffff to config reg 84 pretty soon in boot (looks like part of DRAM init).
00.00:0.00: 02a510de
00.00:0.04: 00100006
00.00:0.08: 060000a1
00.00:0.0c: 00800000
00.00:0.10: 40000008
00.00:0.14: 00000000
00.00:0.18: 00000000
00.00:0.1c: 00000000
00.00:0.20: 00000000
00.00:0.24: 00000000
00.00:0.28: 00000000
00.00:0.2c: 00000000
00.00:0.30: 00000000
00.00:0.34: 00000040
00.00:0.38: 00000000
00.00:0.3c: 00000000
00.00:0.40: 00206002
00.00:0.44: 1f000217
00.00:0.48: 00000014
00.00:0.4c: 00000001
00.00:0.50: 00000000
00.00:0.54: 10000000
00.00:0.58: ffffffff
00.00:0.5c: ffffffff
00.00:0.60: 20010008
00.00:0.64: 88880120
00.00:0.68: 00000010
00.00:0.6c: 0f0f0f21
00.00:0.70: ffffffff
00.00:0.74: ffffffff
00.00:0.78: ffffffff
00.00:0.7c: ffffffff
00.00:0.80: 00000100
00.00:0.84: 07ffffff
00.00:0.88: 00000001
00.00:0.8c: 3ff6f417
00.00:0.90: 00000000
00.00:0.94: f9feffff
00.00:0.98: 00000000
00.00:0.9c: 00000000
00.00:0.a0: 00000000
00.00:0.a4: 00002001
00.00:0.a8: 00000000
00.00:0.ac: 00000000
00.00:0.b0: 00000001
00.00:0.b4: 00000000
00.00:0.b8: 00000000
00.00:0.bc: 00000000
00.00:0.c0: 00033333
00.00:0.c4: 00033333
00.00:0.c8: 00000013
00.00:0.cc: 00000000
00.00:0.d0: 00000000
00.00:0.d4: 00000001
00.00:0.d8: 07f0ffff
00.00:0.dc: 00000000
00.00:0.e0: 00400006
00.00:0.e4: 01ff75b7
00.00:0.e8: 00000000
00.00:0.ec: 00000000
00.00:0.f0: f0000001
00.00:0.f4: 00000000
00.00:0.f8: 00000000
00.00:0.fc: 00000000
BAR0: 40000008 - c0000008 - 1073741824 bytes
BAR1: 0 - 0 - 0 bytes
BAR2: 0 - 0 - 0 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.00:1 & 00.00:2 - Broken Devices ===
Reading PCI Config Space for these devices will freeze the console. Looking at the similar nForce chipsets, it is likely that these are DRAM controllers that aren't complete.
=== 00.00:3 - DRAM Controller ===
00.00:3.00: 02a610de
00.00:3.04: 00200000
00.00:3.08: 050000a1
00.00:3.0c: 00800000
00.00:3.10: 00000000
00.00:3.14: 00000000
00.00:3.18: 00000000
00.00:3.1c: 00000000
00.00:3.20: 00000000
00.00:3.24: 00000000
00.00:3.28: 00000000
00.00:3.2c: 00000000
00.00:3.30: 00000000
00.00:3.34: 00000000
00.00:3.38: 00000000
00.00:3.3c: 00000000
00.00:3.40: f0f0c0c0
00.00:3.44: 00c00000
00.00:3.48: 00000000
00.00:3.4c: 00000000
00.00:3.50: 00000000
00.00:3.54: 00000000
00.00:3.58: 00000000
00.00:3.5c: 04070000
00.00:3.60: 00000000
00.00:3.64: 01208001
00.00:3.68: 0000006c
00.00:3.6c: 01230801
00.00:3.70: 00000000
00.00:3.74: 00000000
00.00:3.78: 00000000
00.00:3.7c: 00000000
00.00:3.80: 00000000
00.00:3.84: 00000000
00.00:3.88: 00000000
00.00:3.8c: 00000000
00.00:3.90: 00000000
00.00:3.94: 00000000
00.00:3.98: 00000000
00.00:3.9c: 00000000
00.00:3.a0: 00000000
00.00:3.a4: 00000000
00.00:3.a8: 00000000
00.00:3.ac: 00000000
00.00:3.b0: 00000000
00.00:3.b4: 00000000
00.00:3.b8: 00000000
00.00:3.bc: 00000000
00.00:3.c0: 00000000
00.00:3.c4: 00000000
00.00:3.c8: 00000000
00.00:3.cc: 00000000
00.00:3.d0: 00000000
00.00:3.d4: 00000000
00.00:3.d8: 00000000
00.00:3.dc: 00000000
00.00:3.e0: 00000000
00.00:3.e4: 00000000
00.00:3.e8: 00000000
00.00:3.ec: 00000000
00.00:3.f0: 00000000
00.00:3.f4: 00000000
00.00:3.f8: 00000000
00.00:3.fc: 00000000
BAR0: 0 - 0 - 0 bytes
BAR1: 0 - 0 - 0 bytes
BAR2: 0 - 0 - 0 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.01:0 - ISA Bridge ===
This is probably the LPC bus controller (LPC is just a serial version of the classic ISA bus). A lot of random system init stuff gets written here on boot, both to it's IO space, and it's config space.
00.01:0.00: 01b210de
00.01:0.04: 00b0000f
00.01:0.08: 060100b2
00.01:0.0c: 00800000
00.01:0.10: 00008001
00.01:0.14: 00000000
00.01:0.18: 00000000
00.01:0.1c: 00000000
00.01:0.20: 00000000
00.01:0.24: 00000000
00.01:0.28: 00000000
00.01:0.2c: 00000000
00.01:0.30: 00000000
00.01:0.34: 00000050
00.01:0.38: 00000000
00.01:0.3c: 00000000
00.01:0.40: 00000000
00.01:0.44: 20000000
00.01:0.48: 00000440
00.01:0.4c: 0000fdde
00.01:0.50: 01410008
00.01:0.54: 88880070
00.01:0.58: 000000a0
00.01:0.5c: 00000000
00.01:0.60: 00000400
00.01:0.64: 00000b0c
00.01:0.68: 00031000
00.01:0.6c: 0e065491
00.01:0.70: 00000000
00.01:0.74: 00000000
00.01:0.78: 00000000
00.01:0.7c: 00000000
00.01:0.80: 04001800
00.01:0.84: 00000000
00.01:0.88: 0000000f
00.01:0.8c: 48000000
00.01:0.90: 00000080
00.01:0.94: 00000000
00.01:0.98: 811ced04
00.01:0.9c: 871cc707
00.01:0.a0: 00000000
00.01:0.a4: 01500044
00.01:0.a8: 00150004
00.01:0.ac: 00070001
00.01:0.b0: 02010000
00.01:0.b4: 00010f12
00.01:0.b8: 00000000
00.01:0.bc: 01008001
00.01:0.c0: 00000000
00.01:0.c4: 00000000
00.01:0.c8: 00000000
00.01:0.cc: 00000000
00.01:0.d0: 607f7e7c
00.01:0.d4: 7c7e7c78
00.01:0.d8: 00007e7f
00.01:0.dc: 00000000
00.01:0.e0: 00000000
00.01:0.e4: 00000000
00.01:0.e8: 00000000
00.01:0.ec: 00000000
00.01:0.f0: 00000f00
00.01:0.f4: 00000000
00.01:0.f8: 00000000
00.01:0.fc: 00000000
BAR0: 8001 - ffffff01 - 256 bytes
BAR1: 0 - 0 - 0 bytes
BAR2: 0 - 0 - 0 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.01:1 - SMBUS Controller ===
It's unknown what backs BAR0 and BAR2. BAR0 is never quite setup, and is therefor pointed to the IO ports from 00 to 0F. Cromwell interestingly writes to IO port 00 accidentally.
00.01:1.00: 01b410de
00.01:1.04: 00b00001
00.01:1.08: 0c0500b1
00.01:1.0c: 00800000
00.01:1.10: 00000001
00.01:1.14: 0000c001
00.01:1.18: 0000c201
00.01:1.1c: 00000000
00.01:1.20: 00000000
00.01:1.24: 00000000
00.01:1.28: 00000000
00.01:1.2c: 00000000
00.01:1.30: 00000000
00.01:1.34: 00000044
00.01:1.38: 00000000
00.01:1.3c: 01030100
00.01:1.40: 00000000
00.01:1.44: 00020001
00.01:1.48: 00000000
00.01:1.4c: 00000000
00.01:1.50: 00000000
00.01:1.54: 00000000
00.01:1.58: 00000000
00.01:1.5c: 00000000
00.01:1.60: 00000000
00.01:1.64: 00000000
00.01:1.68: 00000000
00.01:1.6c: 00000000
00.01:1.70: 00000000
00.01:1.74: 00000000
00.01:1.78: 00000000
00.01:1.7c: 00000000
00.01:1.80: 00000000
00.01:1.84: 00000000
00.01:1.88: 00000000
00.01:1.8c: 00000000
00.01:1.90: 00000000
00.01:1.94: 00000000
00.01:1.98: 00000000
00.01:1.9c: 00000000
00.01:1.a0: 00000000
00.01:1.a4: 00000000
00.01:1.a8: 00000000
00.01:1.ac: 00000000
00.01:1.b0: 00000000
00.01:1.b4: 00000000
00.01:1.b8: 00000000
00.01:1.bc: 00000000
00.01:1.c0: 00000000
00.01:1.c4: 00000000
00.01:1.c8: 00000000
00.01:1.cc: 00000000
00.01:1.d0: 00000000
00.01:1.d4: 00000000
00.01:1.d8: 00000000
00.01:1.dc: 00000000
00.01:1.e0: 00000000
00.01:1.e4: 00000000
00.01:1.e8: 00000000
00.01:1.ec: 00000000
00.01:1.f0: 00000000
00.01:1.f4: 00000000
00.01:1.f8: 00000000
00.01:1.fc: 00000000
BAR0: 1 - fffffff1 - 16 bytes
BAR1: c001 - fffffff1 - 16 bytes
BAR2: c201 - ffffffe1 - 32 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.02:0 - First OHCI controller ===
00.02:0.00: 01c210de
00.02:0.04: 00b00006
00.02:0.08: 0c0310b1
00.02:0.0c: 00000000
00.02:0.10: fed00000
00.02:0.14: 00000000
00.02:0.18: 00000000
00.02:0.1c: 00000000
00.02:0.20: 00000000
00.02:0.24: 00000000
00.02:0.28: 00000000
00.02:0.2c: 00000000
00.02:0.30: 00000000
00.02:0.34: 00000044
00.02:0.38: 00000000
00.02:0.3c: 01030101
00.02:0.40: 00000000
00.02:0.44: da020001
00.02:0.48: 00000000
00.02:0.4c: 00000002
00.02:0.50: 0000000f
00.02:0.54: 00000000
00.02:0.58: 00000000
00.02:0.5c: 00000000
00.02:0.60: 00000000
00.02:0.64: 00000000
00.02:0.68: 00000000
00.02:0.6c: 00000000
00.02:0.70: 00000000
00.02:0.74: 00000000
00.02:0.78: 00000000
00.02:0.7c: 00000000
00.02:0.80: 00000000
00.02:0.84: 00000000
00.02:0.88: 00000000
00.02:0.8c: 00000000
00.02:0.90: 00000000
00.02:0.94: 00000000
00.02:0.98: 00000000
00.02:0.9c: 00000000
00.02:0.a0: 00000000
00.02:0.a4: 00000000
00.02:0.a8: 00000000
00.02:0.ac: 00000000
00.02:0.b0: 00000000
00.02:0.b4: 00000000
00.02:0.b8: 00000000
00.02:0.bc: 00000000
00.02:0.c0: 00000000
00.02:0.c4: 00000000
00.02:0.c8: 00000000
00.02:0.cc: 00000000
00.02:0.d0: 00000000
00.02:0.d4: 00000000
00.02:0.d8: 00000000
00.02:0.dc: 00000000
00.02:0.e0: 00000000
00.02:0.e4: 00000000
00.02:0.e8: 00000000
00.02:0.ec: 00000000
00.02:0.f0: 00000000
00.02:0.f4: 00000000
00.02:0.f8: 00000000
00.02:0.fc: 00000000
BAR0: fed00000 - fffff000 - 4096 bytes
BAR1: 0 - 0 - 0 bytes
BAR2: 0 - 0 - 0 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.03:0 - Second OHCI Controller ===
00.03:0.00: 01c210de
00.03:0.04: 00b00006
00.03:0.08: 0c0310b1
00.03:0.0c: 00000000
00.03:0.10: fed08000
00.03:0.14: 00000000
00.03:0.18: 00000000
00.03:0.1c: 00000000
00.03:0.20: 00000000
00.03:0.24: 00000000
00.03:0.28: 00000000
00.03:0.2c: 00000000
00.03:0.30: 00000000
00.03:0.34: 00000044
00.03:0.38: 00000000
00.03:0.3c: 01030109
00.03:0.40: 00000000
00.03:0.44: da020001
00.03:0.48: 00000000
00.03:0.4c: 00000003
00.03:0.50: 00000030
00.03:0.54: 00000000
00.03:0.58: 00000000
00.03:0.5c: 00000000
00.03:0.60: 00000000
00.03:0.64: 00000000
00.03:0.68: 00000000
00.03:0.6c: 00000000
00.03:0.70: 00000000
00.03:0.74: 00000000
00.03:0.78: 00000000
00.03:0.7c: 00000000
00.03:0.80: 00000000
00.03:0.84: 00000000
00.03:0.88: 00000000
00.03:0.8c: 00000000
00.03:0.90: 00000000
00.03:0.94: 00000000
00.03:0.98: 00000000
00.03:0.9c: 00000000
00.03:0.a0: 00000000
00.03:0.a4: 00000000
00.03:0.a8: 00000000
00.03:0.ac: 00000000
00.03:0.b0: 00000000
00.03:0.b4: 00000000
00.03:0.b8: 00000000
00.03:0.bc: 00000000
00.03:0.c0: 00000000
00.03:0.c4: 00000000
00.03:0.c8: 00000000
00.03:0.cc: 00000000
00.03:0.d0: 00000000
00.03:0.d4: 00000000
00.03:0.d8: 00000000
00.03:0.dc: 00000000
00.03:0.e0: 00000000
00.03:0.e4: 00000000
00.03:0.e8: 00000000
00.03:0.ec: 00000000
00.03:0.f0: 00000000
00.03:0.f4: 00000000
00.03:0.f8: 00000000
00.03:0.fc: 00000000
BAR0: fed08000 - fffff000 - 4096 bytes
BAR1: 0 - 0 - 0 bytes
BAR2: 0 - 0 - 0 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.04:0 - Network Adapter ===
00.04:0.00: 01c310de
00.04:0.04: 00b00007
00.04:0.08: 020000b1
00.04:0.0c: 00000000
00.04:0.10: fef00000
00.04:0.14: 0000e001
00.04:0.18: 00000000
00.04:0.1c: 00000000
00.04:0.20: 00000000
00.04:0.24: 00000000
00.04:0.28: 00000000
00.04:0.2c: 00000000
00.04:0.30: 00000000
00.04:0.34: 00000044
00.04:0.38: 00000000
00.04:0.3c: 14010104
00.04:0.40: 00000000
00.04:0.44: fe020001
00.04:0.48: 00000000
00.04:0.4c: 00000004
00.04:0.50: 00000000
00.04:0.54: 00000000
00.04:0.58: 00000000
00.04:0.5c: 00000000
00.04:0.60: 00000000
00.04:0.64: 00000000
00.04:0.68: 00000000
00.04:0.6c: 00000000
00.04:0.70: 00000000
00.04:0.74: 00000000
00.04:0.78: 00000000
00.04:0.7c: 00000000
00.04:0.80: 00000000
00.04:0.84: 00000000
00.04:0.88: 00000000
00.04:0.8c: 00000000
00.04:0.90: 00000000
00.04:0.94: 00000000
00.04:0.98: 00000000
00.04:0.9c: 00000000
00.04:0.a0: 00000000
00.04:0.a4: 00000000
00.04:0.a8: 00000000
00.04:0.ac: 00000000
00.04:0.b0: 00000000
00.04:0.b4: 00000000
00.04:0.b8: 00000000
00.04:0.bc: 00000000
00.04:0.c0: 00000000
00.04:0.c4: 00000000
00.04:0.c8: 00000000
00.04:0.cc: 00000000
00.04:0.d0: 00000000
00.04:0.d4: 00000000
00.04:0.d8: 00000000
00.04:0.dc: 00000000
00.04:0.e0: 00000000
00.04:0.e4: 00000000
00.04:0.e8: 00000000
00.04:0.ec: 00000000
00.04:0.f0: 00000000
00.04:0.f4: 00000000
00.04:0.f8: 00000000
00.04:0.fc: 00000000
BAR0: fef00000 - fffffc00 - 1024 bytes
BAR1: e001 - fffffff9 - 16 bytes
BAR2: 0 - 0 - 0 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.05:0 - APU ===
00.05:0.00: 01b010de
00.05:0.04: 00b00006
00.05:0.08: 040100b1
00.05:0.0c: 00000000
00.05:0.10: fe800000
00.05:0.14: 00000000
00.05:0.18: 00000000
00.05:0.1c: 00000000
00.05:0.20: 00000000
00.05:0.24: 00000000
00.05:0.28: 00000000
00.05:0.2c: 00000000
00.05:0.30: 00000000
00.05:0.34: 00000044
00.05:0.38: 00000000
00.05:0.3c: 0c010105
00.05:0.40: 00000000
00.05:0.44: 00020001
00.05:0.48: 00000000
00.05:0.4c: 0000050a
00.05:0.50: 00020001
00.05:0.54: 00020001
00.05:0.58: 00020001
00.05:0.5c: 00020001
00.05:0.60: 00020001
00.05:0.64: 00020001
00.05:0.68: 00020001
00.05:0.6c: 00020001
00.05:0.70: 00020001
00.05:0.74: 00020001
00.05:0.78: 00020001
00.05:0.7c: 00020001
00.05:0.80: 00020001
00.05:0.84: 00020001
00.05:0.88: 00020001
00.05:0.8c: 00020001
00.05:0.90: 00020001
00.05:0.94: 00020001
00.05:0.98: 00020001
00.05:0.9c: 00020001
00.05:0.a0: 00020001
00.05:0.a4: 00020001
00.05:0.a8: 00020001
00.05:0.ac: 00020001
00.05:0.b0: 00020001
00.05:0.b4: 00020001
00.05:0.b8: 00020001
00.05:0.bc: 00020001
00.05:0.c0: 00020001
00.05:0.c4: 00020001
00.05:0.c8: 00020001
00.05:0.cc: 00020001
00.05:0.d0: 00020001
00.05:0.d4: 00020001
00.05:0.d8: 00020001
00.05:0.dc: 00020001
00.05:0.e0: 00020001
00.05:0.e4: 00020001
00.05:0.e8: 00020001
00.05:0.ec: 00020001
00.05:0.f0: 00020001
00.05:0.f4: 00020001
00.05:0.f8: 00020001
00.05:0.fc: 00020001
BAR0: fe800000 - fff80000 - 524288 bytes
BAR1: 0 - 0 - 0 bytes
BAR2: 0 - 0 - 0 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.06:0 - AC97-esque Controller ===
00.06:0.00: 01b110de
00.06:0.04: 00b00007
00.06:0.08: 040100b1
00.06:0.0c: 00800000
00.06:0.10: 0000d001
00.06:0.14: 0000d201
00.06:0.18: fec00000
00.06:0.1c: 00000000
00.06:0.20: 00000000
00.06:0.24: 00000000
00.06:0.28: 00000000
00.06:0.2c: 00000000
00.06:0.30: 00000000
00.06:0.34: 00000044
00.06:0.38: 00000000
00.06:0.3c: 05020106
00.06:0.40: 00000000
00.06:0.44: 00020001
00.06:0.48: 00000000
00.06:0.4c: 01010106
00.06:0.50: 00000000
00.06:0.54: 00000000
00.06:0.58: 00000000
00.06:0.5c: 00000000
00.06:0.60: 00000000
00.06:0.64: 00000000
00.06:0.68: 00000000
00.06:0.6c: 00000000
00.06:0.70: 00000000
00.06:0.74: 00000000
00.06:0.78: 00000000
00.06:0.7c: 00000000
00.06:0.80: 00000000
00.06:0.84: 00000000
00.06:0.88: 00000000
00.06:0.8c: 00000000
00.06:0.90: 00000000
00.06:0.94: 00000000
00.06:0.98: 00000000
00.06:0.9c: 00000000
00.06:0.a0: 00000000
00.06:0.a4: 00000000
00.06:0.a8: 00000000
00.06:0.ac: 00000000
00.06:0.b0: 00000000
00.06:0.b4: 00000000
00.06:0.b8: 00000000
00.06:0.bc: 00000000
00.06:0.c0: 00000000
00.06:0.c4: 00000000
00.06:0.c8: 00000000
00.06:0.cc: 00000000
00.06:0.d0: 00000000
00.06:0.d4: 00000000
00.06:0.d8: 00000000
00.06:0.dc: 00000000
00.06:0.e0: 00000000
00.06:0.e4: 00000000
00.06:0.e8: 00000000
00.06:0.ec: 00000000
00.06:0.f0: 00000000
00.06:0.f4: 00000000
00.06:0.f8: 00000000
00.06:0.fc: 00000000
BAR0: d001 - ffffff01 - 256 bytes
BAR1: d201 - ffffff81 - 128 bytes
BAR2: fec00000 - fffff000 - 4096 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.08:0 - PCI-PCI Bridge ===
00.08:0.00: 01b810de
00.08:0.04: 00a00000
00.08:0.08: 060400b1
00.08:0.0c: 00010000
00.08:0.10: 00000000
00.08:0.14: 00000000
00.08:0.18: 00000000
00.08:0.1c: 02800000
00.08:0.20: 00000000
00.08:0.24: 00000000
00.08:0.28: 00000000
00.08:0.2c: 00000000
00.08:0.30: 00000000
00.08:0.34: 00000044
00.08:0.38: 00000000
00.08:0.3c: 00000000
00.08:0.40: 00000000
00.08:0.44: 00020001
00.08:0.48: 00000000
00.08:0.4c: 00000b08
00.08:0.50: 00000d0c
00.08:0.54: 00000f0e
00.08:0.58: 00000000
00.08:0.5c: 00000000
00.08:0.60: 00000000
00.08:0.64: 00000000
00.08:0.68: 00000000
00.08:0.6c: 00000000
00.08:0.70: 00000000
00.08:0.74: 00000000
00.08:0.78: 00000000
00.08:0.7c: 00000000
00.08:0.80: 00000000
00.08:0.84: 00000000
00.08:0.88: 00000000
00.08:0.8c: 00000000
00.08:0.90: 00000000
00.08:0.94: 00000000
00.08:0.98: 00000000
00.08:0.9c: 00000000
00.08:0.a0: 00000000
00.08:0.a4: 00000000
00.08:0.a8: 00000000
00.08:0.ac: 00000000
00.08:0.b0: 00000000
00.08:0.b4: 00000000
00.08:0.b8: 00000000
00.08:0.bc: 00000000
00.08:0.c0: 00000000
00.08:0.c4: 00000000
00.08:0.c8: 00000000
00.08:0.cc: 00000000
00.08:0.d0: 00000000
00.08:0.d4: 00000000
00.08:0.d8: 00000000
00.08:0.dc: 00000000
00.08:0.e0: 00000000
00.08:0.e4: 00000000
00.08:0.e8: 00000000
00.08:0.ec: 00000000
00.08:0.f0: 00000000
00.08:0.f4: 00000000
00.08:0.f8: 00000000
00.08:0.fc: 00000000
=== 00.09:0 - IDE Controller ===
00.09:0.00: 01bc10de
00.09:0.04: 00b00005
00.09:0.08: 01018ab1
00.09:0.0c: 00000000
00.09:0.10: 00000000
00.09:0.14: 00000000
00.09:0.18: 00000000
00.09:0.1c: 00000000
00.09:0.20: 0000ff61
00.09:0.24: 00000000
00.09:0.28: 00000000
00.09:0.2c: 00000000
00.09:0.30: 00000000
00.09:0.34: 00000044
00.09:0.38: 00000000
00.09:0.3c: 01030000
00.09:0.40: 00000000
00.09:0.44: 00020001
00.09:0.48: 00000000
00.09:0.4c: 00000900
00.09:0.50: 00000002
00.09:0.54: 00000000
00.09:0.58: 20202020
00.09:0.5c: ffff00ff
00.09:0.60: c0c0c0c0
00.09:0.64: 00000000
00.09:0.68: 00000000
00.09:0.6c: 00000000
00.09:0.70: 00000000
00.09:0.74: 00000000
00.09:0.78: 00000000
00.09:0.7c: 00000000
00.09:0.80: 00000000
00.09:0.84: 00000000
00.09:0.88: 00000000
00.09:0.8c: 00000000
00.09:0.90: 00000000
00.09:0.94: 00000000
00.09:0.98: 00000000
00.09:0.9c: 00000000
00.09:0.a0: 00000000
00.09:0.a4: 00000000
00.09:0.a8: 00000000
00.09:0.ac: 00000000
00.09:0.b0: 00000000
00.09:0.b4: 00000000
00.09:0.b8: 00000000
00.09:0.bc: 00000000
00.09:0.c0: 00000000
00.09:0.c4: 00000000
00.09:0.c8: 00000000
00.09:0.cc: 00000000
00.09:0.d0: 00000000
00.09:0.d4: 00000000
00.09:0.d8: 00000000
00.09:0.dc: 00000000
00.09:0.e0: 00000000
00.09:0.e4: 00000000
00.09:0.e8: 00000000
00.09:0.ec: 00000000
00.09:0.f0: 00000000
00.09:0.f4: 00000000
00.09:0.f8: 00000000
00.09:0.fc: 00000000
BAR0: 0 - 0 - 0 bytes
BAR1: 0 - 0 - 0 bytes
BAR2: 0 - 0 - 0 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: ff61 - fffffff1 - 16 bytes
BAR5: 0 - 0 - 0 bytes
=== 00.1e:0 - AGP Bridge ===
00.1e:0.00: 01b710de
00.1e:0.04: 02200007
00.1e:0.08: 060400a1
00.1e:0.0c: 5f016df7
00.1e:0.10: bf7e3fff
00.1e:0.14: bbfffbff
00.1e:0.18: 00010100
00.1e:0.1c: 02a000f0
00.1e:0.20: fe70fd00
00.1e:0.24: f3f0f000
00.1e:0.28: ff3fbfff
00.1e:0.2c: afff7fff
00.1e:0.30: 3efff5fd
00.1e:0.34: 00000000
00.1e:0.38: 3bdac4f7
00.1e:0.3c: 0080e7f7
00.1e:0.40: 00000001
00.1e:0.44: 80000000
00.1e:0.48: 00000014
00.1e:0.4c: 00000001
00.1e:0.50: 00000000
00.1e:0.54: 10000000
00.1e:0.58: ffffffff
00.1e:0.5c: ffffffff
00.1e:0.60: ffffffff
00.1e:0.64: ffffffff
00.1e:0.68: ffffffff
00.1e:0.6c: ffffffff
00.1e:0.70: ffffffff
00.1e:0.74: ffffffff
00.1e:0.78: ffffffff
00.1e:0.7c: ffffffff
00.1e:0.80: ffffffff
00.1e:0.84: ffffffff
00.1e:0.88: ffffffff
00.1e:0.8c: ffffffff
00.1e:0.90: ffffffff
00.1e:0.94: ffffffff
00.1e:0.98: ffffffff
00.1e:0.9c: ffffffff
00.1e:0.a0: ffffffff
00.1e:0.a4: ffffffff
00.1e:0.a8: ffffffff
00.1e:0.ac: ffffffff
00.1e:0.b0: ffffffff
00.1e:0.b4: ffffffff
00.1e:0.b8: ffffffff
00.1e:0.bc: ffffffff
00.1e:0.c0: ffffffff
00.1e:0.c4: ffffffff
00.1e:0.c8: ffffffff
00.1e:0.cc: ffffffff
00.1e:0.d0: ffffffff
00.1e:0.d4: ffffffff
00.1e:0.d8: ffffffff
00.1e:0.dc: ffffffff
00.1e:0.e0: ffffffff
00.1e:0.e4: ffffffff
00.1e:0.e8: ffffffff
00.1e:0.ec: ffffffff
00.1e:0.f0: ffffffff
00.1e:0.f4: ffffffff
00.1e:0.f8: ffffffff
00.1e:0.fc: ffffffff
=== 01.00:0 - NV2A GPU ===
01.00:0.00: 02a010de
01.00:0.04: 02b00007
01.00:0.08: 030000a1
01.00:0.0c: 0000f800
01.00:0.10: fd000000
01.00:0.14: f0000008
01.00:0.18: 00000008
01.00:0.1c: 00000000
01.00:0.20: 00000000
01.00:0.24: 00000000
01.00:0.28: 00000000
01.00:0.2c: 00000000
01.00:0.30: 00000000
01.00:0.34: 00000060
01.00:0.38: 00000000
01.00:0.3c: 01050103
01.00:0.40: 00000000
01.00:0.44: 00200002
01.00:0.48: 1f000017
01.00:0.4c: 1f000114
01.00:0.50: 00000000
01.00:0.54: 00000001
01.00:0.58: 0023d6ce
01.00:0.5c: 0000000f
01.00:0.60: 00024401
01.00:0.64: 00000000
01.00:0.68: 00000000
01.00:0.6c: 00000000
01.00:0.70: 00000000
01.00:0.74: 00000000
01.00:0.78: 00000000
01.00:0.7c: 00000000
01.00:0.80: 2b16d065
01.00:0.84: 00000000
01.00:0.88: 00000000
01.00:0.8c: 00000000
01.00:0.90: 00000000
01.00:0.94: 00000000
01.00:0.98: 00000000
01.00:0.9c: 00000000
01.00:0.a0: 00000000
01.00:0.a4: 00000000
01.00:0.a8: 00000000
01.00:0.ac: 00000000
01.00:0.b0: 00000000
01.00:0.b4: 00000000
01.00:0.b8: 00000000
01.00:0.bc: 00000000
01.00:0.c0: 00000000
01.00:0.c4: 00000000
01.00:0.c8: 00000000
01.00:0.cc: 00000000
01.00:0.d0: 00000000
01.00:0.d4: 00000000
01.00:0.d8: 00000000
01.00:0.dc: 00000000
01.00:0.e0: 00000000
01.00:0.e4: 00000000
01.00:0.e8: 00000000
01.00:0.ec: 00000000
01.00:0.f0: 00000000
01.00:0.f4: 00000000
01.00:0.f8: 00000000
01.00:0.fc: 00000000
BAR0: fd000000 - ff000000 - 16777216 bytes
BAR1: f0000008 - f8000008 - 134217728 bytes
BAR2: 8 - fff80008 - 524288 bytes
BAR3: 0 - 0 - 0 bytes
BAR4: 0 - 0 - 0 bytes
BAR5: 0 - 0 - 0 bytes
8480dab421c9d41e77c168d58a9de13e89a76036
LPC Debug Port
0
3909
6610
6420
2018-12-24T05:49:43Z
KaosEngineer
2482
On v1.6 hardware, added "pin 9 is" for clarity of what's disconnected. Though it is what is being written about
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | SERIRQ (v1.0) || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on. On 1.6 hardware, pin 9 is disconnected. Reconnect to pin 15 to restore the supply voltage.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal. On 1.3-1.5 hardware, disconnected.
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
2f519a08f4adb65f400daf44a4b6e79390150514
DSP
0
3800
6611
6490
2018-12-26T21:49:30Z
JayFoxRox
2
Add unknown fields
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Unknown (Bit-offset 4; 1-bit).
** 0 = ?
** 1 = ?
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Circular
** 0xF
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).
** 0x0 = 7 bit (all values are OR'd with 0x80)
** 0x1 = 16 bit
** 0x2 = 24 bit in MSB
** 0x3 = 32 bit (2 words per value: first word receives 24 bit, the next word only 8 bit)
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* Step size (Bit-offset 14; unknown size).
** 0 = Keeps reading from same source offset
** 1 = Reads every sample
** 2 = Reads every second sample
** ...
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || The start of the buffer.
|-
! 6
| Buffer limit || The end of the buffer. For 0x1000 bytes, this has to be 0xFFF.{{FIXME|reason=Is this independent of the base?}}
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
2e9971b8af665988d4a2a166244978e4ba0be6fc
6612
6611
2018-12-27T06:25:27Z
JayFoxRox
2
Provide some DMA examples and more documentation (wip)
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes 0x12,0x34,0x56,0x78 are written to words 0x920000, 0xB40000, 0xD60000, 0xF80000
*** Buffer to DSP: bytes 0x92,0xB4,0xD6,0xF8 are written to words 0x120000, 0x340000, 0x560000, 0x780000
*** DSP to buffer: words 0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF are written to bytes: 0x12,0x34,0x56,0x78 ''(Rounded down)''
*** DSP to buffer: words 0x928000, 0xB48000, 0xD68000, 0xF88000 are written to bytes: 0x13,0x35,0x57,0x79 ''(Rounded up)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes 0x34,0x12 are written to word: 0x123400
*** DSP to buffer: DSP word 0x12347F is written to bytes: 0x34,0x12 ''(Truncated)''
*** DSP to buffer: DSP word 0x123480 is written to bytes: 0x34,0x12 ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes)
*** Buffer to DSP: bytes 0x00,0x56,0x34,0x12 are written to {{FIXME}}
*** DSP to buffer: word 0x123456 is written to bytes: 0x00,0x56,0x34,0x12
** 0x3 = 32 bit (2 DSP words / 4 bytes)
*** Buffer to DSP: bytes 0x12,0xBC,0x9A,0x78 are written to {{FIXME}}
*** DSP to buffer: words 0x123456, 0x789ABC are written to bytes: 0x12,0xBC,0x9A,0x78
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes)
*** Buffer to DSP: bytes 0x56,0x34,0x12,0x00 are written to {{FIXME}}
*** DSP to buffer: word 0x123456 is written to bytes: 0x56,0x34,0x12,0x00
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
3cbc3863323c3e42d9a0161fa242cdd5d6d9decf
6613
6612
2018-12-27T06:49:32Z
JayFoxRox
2
Finish work on DMA examples
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
b0195ee9d9b50ce7df4be7bcdf2d4f8cf722ef91
6614
6613
2018-12-27T07:13:32Z
JayFoxRox
2
Add example for saturation
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP24210/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
709fab4da2c13457bdd69323f4d6aa73c00bc6af
6615
6614
2018-12-27T10:29:46Z
Espes
2484
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP core (DSP2410/DSP2420?).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
059d39a00bc045363cf9b43d2811bc3ffdf7e2e7
6616
6615
2018-12-27T10:45:16Z
Espes
2484
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" code).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
ac1134938a800e3135b3eef4a5daeb9b175d8d01
6617
6616
2018-12-27T11:00:30Z
Espes
2484
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
9413c59c7fe73720a7cf7e7e768e226b25dfe733
6618
6617
2018-12-27T11:05:50Z
Espes
2484
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
5b3eeaa5efefb749c9ba1231a62a63dcb8182887
6624
6618
2018-12-27T19:31:13Z
JayFoxRox
2
Buffer offset ignored in buffer type 0x0?
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0
** 0x1 = FIFO1
** 0x2 = FIFO2{{citation needed}}
** 0x3 = FIFO3{{citation needed}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
8a7de71a6b2ef034e2487bc0fba939b5a593887b
6625
6624
2018-12-27T20:05:44Z
JayFoxRox
2
/* Command blocks */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP
** 1 = DSP to buffer
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0{{FIXME|reason=Confirmed for DSP to buffer [GPOF*0]; unknown for buffer to DSP}}
** 0x1 = FIFO1{{FIXME|reason=Confirmed for DSP to buffer [GPOF*1]; unknown for buffer to DSP}}
** 0x2 = FIFO2{{FIXME|reason=Confirmed for DSP to buffer [GPOF*2]; unknown for buffer to DSP}}
** 0x3 = FIFO3{{FIXME|reason=Confirmed for DSP to buffer [GPOF*3]; unknown for buffer to DSP}}
** 0x4
** 0x5
** 0x6
** 0x7
** 0x8
** 0x9
** 0xA
** 0xB
** 0xC
** 0xD
** 0xE = Scratch-Circular
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
1b4d4ce94609a458e011934ea6b6adcb85748f71
6626
6625
2018-12-27T20:18:01Z
JayFoxRox
2
Documented the DMA FIFO buffer ids
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP (In)
** 1 = DSP to buffer (Out)
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0 (In / Out)
** 0x1 = FIFO1 (In / Out)
** 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
** 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
** 0x4 = ?
** 0x5 = ?
** 0x6 = ?
** 0x7 = ?
** 0x8 = ?
** 0x9 = ?
** 0xA = ?
** 0xB = ?
** 0xC = ?
** 0xD = ?
** 0xE = Scratch (Circular)
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
38fc851baf78be7503d4e6aad7c1fa2c9231b316
6627
6626
2018-12-28T11:50:54Z
JayFoxRox
2
/* Command blocks */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP (In)
** 1 = DSP to buffer (Out)
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0 (In / Out)
** 0x1 = FIFO1 (In / Out)
** 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
** 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
** 0x4 = ?
** 0x5 = ?
** 0x6 = ?
** 0x7 = ?
** 0x8 = ?
** 0x9 = ?
** 0xA = ?
** 0xB = ?
** 0xC = ?
** 0xD = ?
** 0xE = Scratch (Circular)
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
e8e686670a50f5e59ae84519a933aef99b2c1715
6628
6627
2018-12-28T12:45:46Z
JayFoxRox
2
/* DMA */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP (In)
** 1 = DSP to buffer (Out)
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0 (In / Out)
** 0x1 = FIFO1 (In / Out)
** 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
** 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
** 0x4 = ?
** 0x5 = ?
** 0x6 = ?
** 0x7 = ?
** 0x8 = ?
** 0x9 = ?
** 0xA = ?
** 0xB = ?
** 0xC = ?
** 0xD = ?
** 0xE = Scratch (Circular)
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the address within the buffer where the first sample is accessed.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
1f3deef76ce4c62dc2e10e42690f9352ff7dacd3
6629
6628
2018-12-28T13:09:42Z
JayFoxRox
2
/* Command blocks */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP (In)
** 1 = DSP to buffer (Out)
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit).
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0 (In / Out)
** 0x1 = FIFO1 (In / Out)
** 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
** 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
** 0x4 = ?
** 0x5 = ?
** 0x6 = ?
** 0x7 = ?
** 0x8 = ?
** 0x9 = ?
** 0xA = ?
** 0xB = ?
** 0xC = ?
** 0xD = ?
** 0xE = Scratch (Circular)
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
d714124b461af9062382977d0ff7b321d0ecc808
6630
6629
2018-12-28T13:52:51Z
JayFoxRox
2
/* Command blocks */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
* Unknown (Bit-offset 0; 1-bit).
** 0 = ?
** 1 = ?
* Direction (Bit-offset 1; 1-bit).
** 0 = Buffer to DSP (In)
** 1 = DSP to buffer (Out)
* Unknown (Bit-offset 2; 2-bit).
** 0 = ?
** 1 = ?
** 2 = ?
** 3 = ?
* Buffer offset writeback (Bit-offset 4; 1-bit). ''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
** 0 = Don't update buffer offset (Word 4)
** 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
* Buffer (Bit-offset 5; 4-bits).
** 0x0 = FIFO0 (In / Out)
** 0x1 = FIFO1 (In / Out)
** 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
** 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
** 0x4 = ?
** 0x5 = ?
** 0x6 = ?
** 0x7 = ?
** 0x8 = ?
** 0x9 = ?
** 0xA = ?
** 0xB = ?
** 0xC = ?
** 0xD = ?
** 0xE = Scratch (Circular)
** 0xF = Scratch
* Unknown (Bit-offset 9; 1-bit).
** 0 = ?
** 1 = ?
* Sample format (Bit-offset 10; 3-bits).{{FIXME|reason=Some of these need tests with signed datatypes}}
** 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
*** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
*** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
*** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
*** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
*** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
** 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
*** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
*** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
*** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
** 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
*** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
*** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
*** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** 0x4 = ''Transfer skipped''
** 0x5 = ''Transfer skipped''
** 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
*** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
** 0x7 = ''Transfer skipped''
* Unknown (Bit-offset 13; 1-bit).
** 0 = ?
** 1 = ?
* DSP address step size (Bit-offset 14; unknown size).
** Each DSP word is addressed using <code>dsp_address + sample_index * step_size</code>
|-
! 2
| Transfer sample count || The number of samples to transfer.
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
b4ff01fa74442b5c4518929587de5527ddc0e4d9
6631
6630
2018-12-28T20:03:46Z
JayFoxRox
2
Document interleaved mode + Formatting
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:{{FIXME|reason=What's the new buffer address when using buffer offset writeback?}}
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
7ea574d102bac81888425eab7172caed134df3b9
6632
6631
2018-12-28T20:13:09Z
JayFoxRox
2
/* Command blocks */
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:{{FIXME|reason=What's the new buffer address when using buffer offset writeback?}}
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks to be transferred.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
ce8a6e413b5bfcd56ed2267c99344757794e4c52
6633
6632
2018-12-28T23:01:11Z
JayFoxRox
2
Interleaved mode (DSP address) does not affect buffer offset writeback (Buffer offset) due to diffeent address spaces
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks to be transferred.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular buffers, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
4d0bdf72ae7a59d5729416bb88cee73415c39220
6634
6633
2018-12-28T23:08:16Z
JayFoxRox
2
Noticed that this can only apply to scratch (FIFO is also circular, but doesn't use these fields - to my knowledge)
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks to be transferred.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
f2527f71a4cec991bd44c7459cc71a2a7555c286
6642
6634
2018-12-29T16:03:32Z
JayFoxRox
2
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks to be transferred.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
[[Category:APU]]
964bfa342583191865564c56e750ee96307701ae
6644
6642
2018-12-30T04:58:52Z
JayFoxRox
2
Add some FIXMEs for untested cases
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''{{FIXME|reason=How is addressing affected with sample format 0x3 = 32 bit words?}}
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''{{FIXME|reason=How are negative input words affected by rounding? 0x123000 etc.}}
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks to be transferred.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
[[Category:APU]]
a12d463ec37dc8fc327e27bfe68010cd39b71f9d
FATX
0
3708
6619
5254
2018-12-27T11:12:35Z
Espes
2484
wikitext
text/x-wiki
The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
== Implementations ==
{| class="wikitable
|-
! Name
! Platform
! Read/Write
! Description
|-
| Official
| Xbox
| Read/Write
| Official FATX implementation by Microsoft
|-
| [https://github.com/mborgerson/fatx fatxfs]
| GNU/Linux, macOS
| Read-Only
| [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]-based implementation
|}
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/File%20systems/FATX%2C%20File%20Allocation%20Table%20%28X-Box%29/Differences_between_Xbox_FATX_and_MS-DOS_FAT.htm Differences between Xbox FATX and MS-DOS FAT]
* [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
61fd7a09d16ffab8c7a05becedb8b5180cc8e640
6621
6619
2018-12-27T11:16:18Z
Espes
2484
wikitext
text/x-wiki
The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
== Implementations ==
{| class="wikitable
|-
! Name
! Platform
! Read/Write
! Description
|-
| Official
| Xbox
| Read/Write
| Official FATX implementation by Microsoft
|-
| [https://github.com/mborgerson/fatx fatxfs]
| GNU/Linux, macOS
| Read-Only
| [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]-based implementation
|}
== Further Reading ==
* [https://web.archive.org/web/20100617022009/http://www.xbox-linux.org/wiki/Differences_between_Xbox_FATX_and_MS-DOS_FAT Differences between Xbox FATX and MS-DOS FAT]
* [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
969b043c432886c8367550f5c2e28230a496ca4c
Hard Drive
0
3707
6620
6484
2018-12-27T11:14:04Z
Espes
2484
wikitext
text/x-wiki
The original Xbox hard disk drive was 8 GB in size. Later releases, 10 GB drives; however, only the first 8 GB of the drive was used. See [[Hardware Revisions]] for more information.
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| N/A
| Config Area
| 0x00000000
| 0x00080000
| Fixed Structure
| N/A
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition3
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition4
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition5
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
| \Device\Harddisk0\Partition2
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
| \Device\Harddisk0\Partition1
|}
::::::::::::::::::::::''side note: CD/DVD Drive "D:" <=> "\Device\CdRom0"''
::::::::::::::::::::::''and usually: added Drive "F:" <=> "\Device\Harddisk0\Partition6"''
::::::::::::::::::::::::: ''added Drive "G:" <=> "\Device\Harddisk0\Partition7"''
'''Debug/Devkit HDD:'''
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
|-
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
* [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
a70420ffe35ca74f845461692f1609991ff7aaf3
NV2A/Vertex attributes
0
3687
6635
5068
2018-12-29T15:57:15Z
JayFoxRox
2
Categorize
wikitext
text/x-wiki
This article documents the attribute types which are supported by the Xbox GPU.
Please take everything with a grain of salt - it's still being researched.
== Draw methods ==
=== Draw Arrays ===
Data uploaded through DMA.
Each attribute has it's own offset and stride.
Decoded using the attribute information.
=== Inline Buffer ===
Data uploaded and decoded through PGRAPH methods.
==== NV097_SET_VERTEX_DATA2F_M ... NV097_SET_VERTEX_DATA2F_M + 0x7c ====
==== NV097_SET_VERTEX_DATA4F_M ... NV097_SET_VERTEX_DATA4F_M + 0xfc ====
==== NV097_SET_VERTEX_DATA2S ... NV097_SET_VERTEX_DATA2S + 0x3c ====
==== NV097_SET_VERTEX_DATA4UB ... NV097_SET_VERTEX_DATA4UB + 0x3c ====
==== NV097_SET_VERTEX_DATA4S_M ... NV097_SET_VERTEX_DATA4S_M + 0x7c ====
=== Inline Array ===
Data uploaded through PGRAPH method NV097_INLINE_ARRAY.
The attributes are tightly packed in that buffer.
Decoded using the attribute information.
=== Inline Elements ===
Same as "Draw Arrays" but with an extra index buffer.
The index buffer is uploaded through PGRAPH methods NV097_ARRAY_ELEMENT16 and NV097_ARRAY_ELEMENT32.
== Attribute Types ==
=== Normalized unsigned byte (D3D) ===
Unsigned bytes aranged as ZYXW (BGRA) in memory (Also see [http://www.opengl.org/registry/specs/ARB/vertex_array_bgra.txt this GL extension]).
This is commonly used with an attribute count of 4.
FIXME: Does this still work with attribute count =/= 4 ?
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized unsigned byte (GL) ===
Unsigned bytes arranged as XYZW (RGBA) in memory.
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -1.0 to 1.0
FIXME: Verify
=== Float ===
IEEE-754 single precision float arranged as XYZW.
FIXME: What happens to NaN or denormals?
=== Short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -32768.0 to 32767.0
FIXME: Verify
=== Compressed normal ===
Each 32 bit attribute is consisting of 11 bit X, 11 bit Y, 10 bit Z.
Each component is signed and will be mapped into the range -1.0 to 1.0.
FIXME: Verify
FIXME: Is the attribute count ignored?
[[Category:NV2A]]
67d21be6e2b584d4b90daff4cb18fd3c9aea415c
NV2A/Fixed Function Pipeline
0
7
6636
15
2018-12-29T15:57:37Z
JayFoxRox
2
wikitext
text/x-wiki
== Lighting ==
== Skinning ==
[[Category:NV2A]]
4c20a74a362a40de88ac5e34e2100d8b3f5cf64d
NV2A/Vertex Shader
0
9
6637
5878
2018-12-29T15:57:53Z
JayFoxRox
2
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
!Index
!GL Name
!D3D Name
!Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
!Meaning
!Word
!Offset (bits)
!Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
!Value
!Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
=== Functional units ===
==== Inverse Logic Unit (ILU) ====
{| class="wikitable"
|+ILU Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|RCP
|-
|3
|RCC
|-
|4
|RSQ
|-
|5
|EXP
|-
|6
|LOG
|-
|7
|LIT
|}
==== Multiply-Accumulate (MAC) ====
{| class="wikitable"
|+MAC Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|MUL
|-
|3
|ADD
|-
|4
|MAD
|-
|5
|DP3
|-
|6
|DPH
|-
|7
|DP4
|-
|8
|DST
|-
|9
|MIN
|-
|10
|MAX
|-
|11
|SLT
|-
|12
|SGE
|-
|13
|ARL
|}
== Related links ==
* [https://github.com/envytools/envytools/blob/master/nvhw/pgraph_celsius_xfrm.c Code which appears to implement bit-accurate emulation of some instructions]{{FIXME|reason=Unconfirmed, needs testing}}
[[Category:NV2A]]
6be68285aa98e2e1d20b214f14a39aa3fd7a8f6d
NV2A/Pixel Combiner
0
8
6638
5513
2018-12-29T15:58:01Z
JayFoxRox
2
wikitext
text/x-wiki
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2tex?{{citation needed}}
|DOT_PRODUCT_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
* http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf
[[Category:NV2A]]
6b5f9f61201be53aa537d9440af21530a746859c
NV2A/Surface Formats
0
10
6639
18
2018-12-29T15:58:11Z
JayFoxRox
2
wikitext
text/x-wiki
== Texture formats ==
== Framebuffer formats ==
[[Category:NV2A]]
53a4394573b46e9885ddebb2ea4dbb34d222e948
APU
0
3799
6641
5859
2018-12-29T16:03:23Z
JayFoxRox
2
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
* SSL = Stream Segment List
* SGE = Scatter Gather Entry
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate segments of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** The best approximation I could come up with so far is: <code>255*pow(0.99988799,(DECAYRATE*16-COUNT)*4096/DECAYRATE)</code>.
** When the output level (not LVL!) reaches the sustain level the decay section is over (In my example above, this happens when the output level is less than 0.2 away from the sustain level; so if sustain is 0, the voice would switch to the sustain segment when a value below 0.2 is reached)
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this, but writes go through? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound APIs.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
[[Category:APU]]
893368acc244832d1445b3cb52bbf75f710f1252
Xbox ADPCM
0
3804
6643
5936
2018-12-29T16:03:44Z
JayFoxRox
2
wikitext
text/x-wiki
Xbox used it's own WAV file format to encode data using [[Wikipedia:Adaptive differential pulse-code modulation|ADPCM]]. This format is often called Xbox ADPCM.
Standard IMA ADPCM WAV files would use format code 0x0011, whereas Xbox ADPCM files use format-code 0x0069.
There are always 1 (Mono) or 2 (Stereo) channels{{citation needed|reason=Hardware doesn't allow playing anything else probably}}.
All Xbox ADPCM files seem to store 64 ADPCM input nibbles per block.
This value is also stored in the 'fmt ' extra-data which is always 2 bytes, containing the Bytes <code>0x40, 0x00</code> (64 as unsigned 16-bit integer).
Because of that, all Xbox ADPCM files will have a block alignment of 36 (Mono) or 72 (Stereo) Bytes.
As the decoder-setup in every block contains a predictor for each channel, there will be 65 samples / channel output per block (130:36 compression ratio = 72.3% compressed).
Aside from what was mentioned, there are no known differences to IMA ADPCM.
This is probably because the [[APU]] VP will decode ADPCM in hardware. Microsoft probably had little control over the APU ADPCM implementation and had to stay compatible to standard ADPCM.
Players supporting IMA ADPCM also support Xbox ADPCM. However, they might reject files due to the different format-code.
=== Block format ===
Same as IMA ADPCM
In the following tables, the following notation is used:
* All indices start at 0
* W# denotes a 32-bit word
* B# denotes a Byte (8-bit)
* P denotes the ADPCM predictor for the block
* SI denotes the Step-Index for the block
* S# denotes a sample
* Background color denotes the channel:
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:SkyBlue"></div> Blue: Left = Right
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:White;"></div> White: Left
** <div style="display: inline-block; width:10px; height:10px; border:1px solid black; background-color:Tomato"></div> Red: Right
==== Mono ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" width="20%" | W0
| colspan="8" width="20%" | W1
| colspan="8" width="20%" | W2
| rowspan="3" width="5%" | ...
| colspan="8" width="20%" | W8
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B32 || colspan="2" | B33 || colspan="2" | B34 || colspan="2" | B35
|-
! Meaning
| style="background-color:SkyBlue;" colspan="4" | P = S0
| style="background-color:SkyBlue;" colspan="2" | SI
| colspan="2" |
| style="background-color:SkyBlue;" | S2 || style="background-color:SkyBlue;" | S1
| style="background-color:SkyBlue;" | S4 || style="background-color:SkyBlue;" | S3
| style="background-color:SkyBlue;" | S6 || style="background-color:SkyBlue;" | S5
| style="background-color:SkyBlue;" | S8 || style="background-color:SkyBlue;" | S7
| style="background-color:SkyBlue;" | S10 || style="background-color:SkyBlue;" | S9
| style="background-color:SkyBlue;" | S12 || style="background-color:SkyBlue;" | S11
| style="background-color:SkyBlue;" | S14 || style="background-color:SkyBlue;" | S13
| style="background-color:SkyBlue;" | S16 || style="background-color:SkyBlue;" | S15
| style="background-color:SkyBlue;" | S58 || style="background-color:SkyBlue;" | S57
| style="background-color:SkyBlue;" | S60 || style="background-color:SkyBlue;" | S59
| style="background-color:SkyBlue;" | S62 || style="background-color:SkyBlue;" | S61
| style="background-color:SkyBlue;" | S64 || style="background-color:SkyBlue;" | S63
|}
==== Stereo ====
{{FIXME|reason=Fix cell width}}
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W0
| colspan="8" | W1
| colspan="8" | W2
| colspan="8" | W3
|-
! Byte
| colspan="2" | B0 || colspan="2" | B1 || colspan="2" | B2 || colspan="2" | B3
| colspan="2" | B4 || colspan="2" | B5 || colspan="2" | B6 || colspan="2" | B7
| colspan="2" | B8 || colspan="2" | B9 || colspan="2" | B10 || colspan="2" | B11
| colspan="2" | B12 || colspan="2" | B13 || colspan="2" | B14 || colspan="2" | B15
|-
! Meaning
| style="background-color:White;" colspan="4" | P = S0
| style="background-color:White;" colspan="2" | SI
| colspan="2" |
| style="background-color:Tomato;" colspan="4" | P = S0
| style="background-color:Tomato;" colspan="2" | SI
| colspan="2" |
| style="background-color:White;" | S2 || style="background-color:White;" | S1
| style="background-color:White;" | S4 || style="background-color:White;" | S3
| style="background-color:White;" | S6 || style="background-color:White;" | S5
| style="background-color:White;" | S8 || style="background-color:White;" | S7
| style="background-color:Tomato;" | S2 || style="background-color:Tomato;" | S1
| style="background-color:Tomato;" | S4 || style="background-color:Tomato;" | S3
| style="background-color:Tomato;" | S6 || style="background-color:Tomato;" | S5
| style="background-color:Tomato;" | S8 || style="background-color:Tomato;" | S7
|}
...
{| class="wikitable" style="font-size:90%; text-align:center;"
! 32-bit word
| colspan="8" | W14
| colspan="8" | W15
| colspan="8" | W16
| colspan="8" | W17
|-
! Byte
| colspan="2" | B56 || colspan="2" | B57 || colspan="2" | B58 || colspan="2" | B59
| colspan="2" | B60 || colspan="2" | B61 || colspan="2" | B62 || colspan="2" | B63
| colspan="2" | B64 || colspan="2" | B65 || colspan="2" | B66 || colspan="2" | B67
| colspan="2" | B68 || colspan="2" | B69 || colspan="2" | B70 || colspan="2" | B71
|-
! Meaning
| style="background-color:White;" | S50 || style="background-color:White;" | S49
| style="background-color:White;" | S52 || style="background-color:White;" | S51
| style="background-color:White;" | S54 || style="background-color:White;" | S53
| style="background-color:White;" | S56 || style="background-color:White;" | S55
| style="background-color:Tomato;" | S50 || style="background-color:Tomato;" | S49
| style="background-color:Tomato;" | S52 || style="background-color:Tomato;" | S51
| style="background-color:Tomato;" | S54 || style="background-color:Tomato;" | S53
| style="background-color:Tomato;" | S56 || style="background-color:Tomato;" | S55
| style="background-color:White;" | S58 || style="background-color:White;" | S57
| style="background-color:White;" | S60 || style="background-color:White;" | S59
| style="background-color:White;" | S62 || style="background-color:White;" | S61
| style="background-color:White;" | S64 || style="background-color:White;" | S63
| style="background-color:Tomato;" | S58 || style="background-color:Tomato;" | S57
| style="background-color:Tomato;" | S60 || style="background-color:Tomato;" | S59
| style="background-color:Tomato;" | S62 || style="background-color:Tomato;" | S61
| style="background-color:Tomato;" | S64 || style="background-color:Tomato;" | S63
|}
=== Index-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
|-
! {{no-select}} | 0
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8{{hc}}
|-
! {{no-select}} | 8
| -1{{hc}} || -1{{hc}} || -1{{hc}} || -1{{hc}} || 2{{hc}} || 4{{hc}} || 6{{hc}} || 8
|}
=== Step-Table ===
Same as IMA ADPCM
{| class="wikitable" style="text-align: right;"
!
! {{no-select}} | +0
! {{no-select}} | +1
! {{no-select}} | +2
! {{no-select}} | +3
! {{no-select}} | +4
! {{no-select}} | +5
! {{no-select}} | +6
! {{no-select}} | +7
! {{no-select}} | +8
! {{no-select}} | +9
|-
! {{no-select}} | 0
| 7{{hc}} || 8{{hc}} || 9{{hc}} || 10{{hc}} || 11{{hc}} || 12{{hc}} || 13{{hc}} || 14{{hc}} || 16{{hc}} || 17{{hc}}
|-
! {{no-select}} | 10
| 19{{hc}} || 21{{hc}} || 23{{hc}} || 25{{hc}} || 28{{hc}} || 31{{hc}} || 34{{hc}} || 37{{hc}} || 41{{hc}} || 45{{hc}}
|-
! {{no-select}} | 20
| 50{{hc}} || 55{{hc}} || 60{{hc}} || 66{{hc}} || 73{{hc}} || 80{{hc}} || 88{{hc}} || 97{{hc}} || 107{{hc}} || 118{{hc}}
|-
! {{no-select}} | 30
| 130{{hc}} || 143{{hc}} || 157{{hc}} || 173{{hc}} || 190{{hc}} || 209{{hc}} || 230{{hc}} || 253{{hc}} || 279{{hc}} || 307{{hc}}
|-
! {{no-select}} | 40
| 337{{hc}} || 371{{hc}} || 408{{hc}} || 449{{hc}} || 494{{hc}} || 544{{hc}} || 598{{hc}} || 658{{hc}} || 724{{hc}} || 796{{hc}}
|-
! {{no-select}} | 50
| 876{{hc}} || 963{{hc}} || 1060{{hc}} || 1166{{hc}} || 1282{{hc}} || 1411{{hc}} || 1552{{hc}} || 1707{{hc}} || 1878{{hc}} || 2066{{hc}}
|-
! {{no-select}} | 60
| 2272{{hc}} || 2499{{hc}} || 2749{{hc}} || 3024{{hc}} || 3327{{hc}} || 3660{{hc}} || 4026{{hc}} || 4428{{hc}} || 4871{{hc}} || 5358{{hc}}
|-
! {{no-select}} | 70
| 5894{{hc}} || 6484{{hc}} || 7132{{hc}} || 7845{{hc}} || 8630{{hc}} || 9493{{hc}} || 10442{{hc}} || 11487{{hc}} || 12635{{hc}} || 13899{{hc}}
|-
! {{no-select}} | 80
| 15289{{hc}} || 16818{{hc}} || 18500{{hc}} || 20350{{hc}} || 22385{{hc}} || 24623{{hc}} || 27086{{hc}} || 29794{{hc}} || 32767 ||
|}
=== Algorithm ===
The algorithms for encoding and decoding are the same as IMA ADPCM.
For an example implementation and an explanation, refer to the related links.
== Related links ==
* [https://wiki.multimedia.cx/index.php/IMA_ADPCM Explanation of IMA ADPCM algorithms ]
* [https://wiki.multimedia.cx/index.php/Microsoft_IMA_ADPCM Explanation of IMA ADPCM WAV storage]
* [https://github.com/JayFoxRox/xbox-tools/tree/master/adpcm-decoder Tool to decode Xbox ADPCM files]
* [http://samples.ffmpeg.org/game-formats/xbox-adpcm-wav/ Sample files by FFmpeg]
[[Category:APU]]
08f6cc43a75639b7ccab95ad88707e9af771a0f2
Xbox Game Disc
0
3700
6647
6290
2019-01-11T03:16:42Z
Mborgerson
2478
Add a table containing info on which adapters are known to work well with Kreon drives.
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D (<code>H/W:A Ver.D JULY 2007</code>)
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
c0c00af679a4d8ef10f0bd18ee837158d03df98b
6648
6647
2019-01-11T03:23:32Z
Mborgerson
2478
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
4991ad1f559acb851851052a17698526493a577e
Kernel/RtlExtendedLargeIntegerDivide
0
3978
6649
2019-01-17T05:49:59Z
Fisherman166
2497
Add binary division algorithm
wikitext
text/x-wiki
RtlExtendedLargeIntegerDivide will call RtlRaiseStatus(STATUS_INTEGER_DIVIDE_BY_ZERO) if Divisor = 0. Otherwise, a custom binary division algorithm is used to perform the divide operation. The algorithm below was reverse engineered from original hardware.
LARGE_INTEGER quotient = Dividend;
ULONG local_remainder = 0;
BOOLEAN carry, remainder_carry;
for (uint8_t i = 64; i > 0; i--) {
carry = (quotient.QuadPart >> 63) & 0x1;
remainder_carry = (local_remainder >> 31) & 0x1;
quotient.QuadPart <<= 1;
local_remainder = (local_remainder << 1) | carry;
if (remainder_carry || (local_remainder >= Divisor)) {
quotient.u.LowPart += 1;
local_remainder -= Divisor;
}
}
if (Remainder) {
*Remainder = local_remainder;
}
888bc47ac22e29317b2dd5d268f3dbe0ac235e76
6650
6649
2019-01-17T05:51:20Z
Fisherman166
2497
wikitext
text/x-wiki
RtlExtendedLargeIntegerDivide will call RtlRaiseStatus(STATUS_INTEGER_DIVIDE_BY_ZERO) if Divisor = 0. Otherwise, a custom binary division algorithm is used to perform the divide operation. The algorithm below was reverse engineered from original hardware.
LARGE_INTEGER quotient = Dividend;
ULONG local_remainder = 0;
BOOLEAN carry, remainder_carry;
for (uint8_t i = 64; i > 0; i--) {
carry = (quotient.QuadPart >> 63) & 0x1;
remainder_carry = (local_remainder >> 31) & 0x1;
quotient.QuadPart <<= 1;
local_remainder = (local_remainder << 1) | carry;
if (remainder_carry || (local_remainder >= Divisor)) {
quotient.u.LowPart += 1;
local_remainder -= Divisor;
}
}
if (Remainder) {
*Remainder = local_remainder;
}
ebae80e96085e2dca9166f2ab314e15f504cf655
User:Master-bob/MACS
2
3979
6651
2019-01-22T01:48:14Z
Master-bob
2507
Created page with "The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''"
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''
67579acba025004fd26e476e10346b56c0cc9c3e
6653
6651
2019-01-22T02:36:04Z
Master-bob
2507
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The following algorithm is used to decrypt it:
// TODO: Add code
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REPs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
f7569ec5ffea4b47765b4ce5548b1e9f7ea71599
6654
6653
2019-01-22T02:36:59Z
Master-bob
2507
/* PA-PAC-REQUEST-EX */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The following algorithm is used to decrypt it:
// TODO: Add code
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
779550764ddb3db805e373861313c7725fe956c1
6655
6654
2019-01-22T02:40:38Z
Master-bob
2507
/* PA-PAC-REQUEST-EX */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The following algorithm is used to decrypt it:
// TODO: Add code
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
66bca1616f4186f84c7a7b43d9768f6c205d5d89
6656
6655
2019-01-22T02:46:59Z
Master-bob
2507
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The following algorithm is used to decrypt it:
// TODO: Add code
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
===Nonce HMAC Key===
==AS-REP==
a7c2b702be8c0aaffffdf4cfc3347666ff9a4b0a
6657
6656
2019-01-22T03:05:22Z
Master-bob
2507
/* Nonce HMAC Key */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The following algorithm is used to decrypt it:
// TODO: Add code
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1203) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the signature from the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
if both signatures match, the key was generated correctly
==AS-REP==
c7b52bf2b1e18c8d6eb4fdabf5827f6c1f5e035f
6658
6657
2019-01-22T03:05:48Z
Master-bob
2507
/* Nonce HMAC Key */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The following algorithm is used to decrypt it:
// TODO: Add code
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1203) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
f123fccb4f4e266ac7fe447c13776fd0ffe908d6
6659
6658
2019-01-22T03:15:36Z
Master-bob
2507
/* Nonce HMAC Key */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The following algorithm is used to decrypt it:
// TODO: Add code
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
647599755e592560ee38cbd93734f6ab0e6eb526
6660
6659
2019-01-22T03:23:15Z
Master-bob
2507
/* Online Key */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The following algorithm is used to decrypt it:
rc4_key = HMAC-SHA1 of the hdd_key using "60 59 E8 2E DF BF 7F D3 23 35 74 2A 64 8B B1 2C"
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
7e3c8a80015eb83efef4783b933fb6e6940b115f
6661
6660
2019-01-22T03:23:54Z
Master-bob
2507
/* PA-ENC-TIMESTAMP */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
rc4_key = HMAC-SHA1 of the hdd_key using "60 59 E8 2E DF BF 7F D3 23 35 74 2A 64 8B B1 2C"
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed for. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
4e0f86488d3894473181af982719eb0910cf1f3a
6662
6661
2019-01-22T03:26:56Z
Master-bob
2507
/* PA-XBOX-PRE-PRE-AUTH */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
rc4_key = HMAC-SHA1 of the hdd_key using "60 59 E8 2E DF BF 7F D3 23 35 74 2A 64 8B B1 2C"
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
5d99575f48afe4fc4661cb58d51819ab4792df36
6663
6662
2019-01-22T03:56:18Z
Master-bob
2507
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
210f38431a392864ecc757e53dc00833b47722c3
6664
6663
2019-01-22T04:11:36Z
Master-bob
2507
/* The Machine Account */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG userID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
855ed2e6820083bb9082fbe4bf4635d57db241bd
6665
6664
2019-01-22T04:12:58Z
Master-bob
2507
/* The Machine Account */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 presumably correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, but I'm not sure about that.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG userID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
99c4a33fe84c608ad39198a5a71abea74ae0ffcb
6666
6665
2019-01-22T04:22:36Z
Master-bob
2507
/* PA-PAC-REQUEST-EX */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, and are used to tell the server to include a PUID PAC (20) in the response
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG userID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
edac6a92715344791769363ff0210abf56f88aea
6667
6666
2019-01-22T04:24:15Z
Master-bob
2507
/* PA-PAC-REQUEST-EX */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to a custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, and are used to tell the server to include a PUID PAC (20) in the response.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG userID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
==AS-REP==
d85c88ed640fd43a6165157ad60354461b325a7b
6668
6667
2019-01-22T04:35:46Z
Master-bob
2507
/* Building the Response */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to a custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, and are used to tell the server to include a PUID PAC (20) in the response.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG userID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
===Encryption===
The machine account is encrypted with the nonce HMAC key and salt 1203 using RC4-HMAC-MD5. The encrypted bytes are packed as a Kerberos EncrpytedData object into a PA-DATA TYPE 203 preauthentication header in the AS-REP.
==AS-REP==
58afcb241f27dd78e7b07c62877d2a5f541190b4
6669
6668
2019-01-22T04:38:40Z
Master-bob
2507
/* PA-ENC-TIMESTAMP */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
// decrypt the EEPROM to get the correct hdd key
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to a custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, and are used to tell the server to include a PUID PAC (20) in the response.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG userID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
===Encryption===
The machine account is encrypted with the nonce HMAC key and salt 1203 using RC4-HMAC-MD5. The encrypted bytes are packed as a Kerberos EncrpytedData object into a PA-DATA TYPE 203 preauthentication header in the AS-REP.
==AS-REP==
e6e6e8dad01070433737449784580427beacad1a
6670
6669
2019-01-22T04:39:18Z
Master-bob
2507
/* PA-XBOX-CLIENT-VERSION */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
// decrypt the EEPROM to get the correct hdd key
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to a custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, and are used to tell the server to include a PUID PAC (20) in the response.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856 - Xbox Live Dashboard 5849
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG userID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
md5_ctx = MD5 of the salt (1026) as a ULONG and the nonce as a DWORD
nonce_hmac_key = MD5-HMAC of md5_ctx using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
===Encryption===
The machine account is encrypted with the nonce HMAC key and salt 1203 using RC4-HMAC-MD5. The encrypted bytes are packed as a Kerberos EncrpytedData object into a PA-DATA TYPE 203 preauthentication header in the AS-REP.
==AS-REP==
844acfff79e3cdbcf6709d0e2eecf658a0bcb32b
6673
6670
2019-01-23T04:18:58Z
Master-bob
2507
/* Nonce HMAC Key */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
// decrypt the EEPROM to get the correct hdd key
rc4_key = HMAC-SHA1 of the hdd_key using a magical key
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to a custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, and are used to tell the server to include a PUID PAC (20) in the response.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT - computed as follows
** SPPA1 - SHA1(PPA1)
** PPA2 - First 8 bytes of SHA1-HMAC of PrincipalName appended to PrincipalName using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856 - Xbox Live Dashboard 5849
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* '''nonce - a randomly generated number'''
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG userID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
salted_nonce = MD5 of "02 04 00 00 00 00 00 00"
nonce_hmac_key = MD5-HMAC of salted_nonce using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
===Encryption===
The machine account is encrypted with the nonce HMAC key and salt 1203 using RC4-HMAC-MD5. The encrypted bytes are packed as a Kerberos EncrpytedData object into a PA-DATA TYPE 203 preauthentication header in the AS-REP.
==AS-REP==
d23ea565c121a870805af4fe9e1c56b92da69431
6674
6673
2019-01-23T16:20:37Z
Master-bob
2507
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
// decrypt the EEPROM to get the correct hdd key
rc4_key = SHA1-HMAC of the hdd_key using "60 59 E8 2E DF BF 7F D3 23 35 74 2A 64 8B B1 2C"
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to a custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, and are used to tell the server to include a PUID PAC (20) in the response. Not sure if it's actually needed for AS-REP.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT
** SPPA1 - SHA1 of PPA1
** PPA2 - First 8 bytes of SHA1-HMAC of ths serial number appended to the serial number using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** Xbox Live Dashboard 5849 - XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos ticket. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* nonce - a randomly generated number
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG uniqueID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
salted_nonce = "5F F3 28 92 13 8C 9C 4B 05 84 9A 3C 10 1A DB 5D" // MD5 of "02 04 00 00 00 00 00 00"
nonce_hmac_key = MD5-HMAC of salted_nonce using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
===Encryption===
The machine account is encrypted with the nonce HMAC key and salt 1203 using RC4-HMAC-MD5. The encrypted bytes are packed as a Kerberos EncryptedData object into a PA-DATA TYPE 203 preauthentication header in the AS-REP.
==AS-REP==
85ad3ecdc545c37ed42ae72e7d6b9b653772c28d
6675
6674
2019-01-23T16:23:33Z
Master-bob
2507
/* REQ-BODY */
wikitext
text/x-wiki
The first step of Xbox Live authentication is connecting to the '''Machine Account Creation Service''', located at '''MACS.XBOXLIVE.COM'''.
The Xbox would only connect to MACS once, the first time the console ever connected to Xbox Live. MACS was presumably used to keep banned consoles off of Xbox Live, and is still used to this day for Xbox 360s.
The MACS exchange, like the majority of Xbox Live authentication, is done using the Kerberos system.
==AS-REQ==
The first step of MACS authentication is sending an AS-REQ to MACS.XBOXLIVE.COM on UDP port 88. The AS-REQ is composed of several components.
*PVNO and MSG TYPE - These have default values of 5 (Kerberos version 5) and 10 (krb-as-req), respectively.
===PADATA===
Pre authentication data (PADATA) contains most of what makes this request unique from other Kerberos systems.
====PA-ENC-TIMESTAMP====
PA-DATA TYPE 2
An official part of the Kerberos standard, this is a Unix timestamp encrypted with the later defined encryption standard (in Xbox's case, RC4-HMAC-MD5). The server attempts to decrypt this to confirm that the client is using the correct password. For MACS, the password is the console's '''Online Key''', which Microsoft stored server side on a very well guarded database.
=====Online Key=====
The online key is stored in an encrypted form on the Xbox's [[EEPROM]]. The key is decrypted using:
// decrypt the EEPROM to get the correct hdd key
rc4_key = SHA1-HMAC of the hdd_key using "60 59 E8 2E DF BF 7F D3 23 35 74 2A 64 8B B1 2C"
decrypted_online_key = rc4 of online_key using rc4_key
====PA-PAC-REQUEST-EX====
PA-DATA TYPE 131
This is an Xbox modification to a custom Microsoft (PA-PAC-REQUEST) addition to Kerberos, used to define what the client expects in the response. This is encoded in ASN.1 (method of packing data structures into bytes, used by Kerberos). All AS-REQs contain the following data in this section:
SEQUENCE (2 elem)
[0] (1 elem)
BOOLEAN true
[1] (1 elem)
SEQUENCE (2 elem)
INTEGER 13
INTEGER 14
13 and 14 correlate to PAC_CLIENT_IDENTITY and PAC_COMPOUND_IDENTITY, respectively, and are used to tell the server to include a PUID PAC (20) in the response. Not sure if it's actually needed for AS-REP.
====PA-XBOX-PRE-PRE-AUTH====
PA-DATA TYPE 204
This is a custom preauthentication header that was used by Microsoft to quickly look up Xbox information from their database and is probably not needed. Contains the following:
* currentTime - the current time, sent as a FILETIME
* PPA1 - SHA1-HMAC of the principal name (the Xbox serial number) using the principal key (the online key)
* SPPA2atT
** SPPA1 - SHA1 of PPA1
** PPA2 - First 8 bytes of SHA1-HMAC of ths serial number appended to the serial number using the principal key
** SPPA2atT - SHA1 of PPA2 appended to the current time
====PA-XBOX-CLIENT-VERSION====
PA-DATA TYPE 206
This is a custom preauthentication header and arguably the most important for MACS authentication from a homebrew perspective. Contains the following:
* signature - a 20 byte array used to verify the encryption key generated for the response
* version - null terminated string with information about the application sending the request
** Xbox Live Dashboard 5849 - XboxVersion=1.00.5849.3 Title=0xFFFE0000 TitleVersion=408857856
===REQ-BODY===
The remainder of the Kerberos request. '''Bold''' indicates the data are used for response building.
* Padding - 0
* KDC-Options - 0b00010000 (canonicalize)
* '''cname - the serial number of the Xbox'''
* realm - MACS.XBOX.COM
* sname - krbtgt@MACS.XBOX.COM
* till - 2037-09-13 02:48:05 (UTC)
* nonce - a randomly generated number
* '''etype - RC4-HMAC-MD5'''
==Building the Response==
The server must generate a valid machine account and encrypt it using the correct key.
===The Machine Account===
The following is how the machine account is built ''for transfer''. It is stored in a different fashion.
ULONGLONG uniqueID;
CHAR gamertag[16]; // SN.XXXXXXXXXXXX (the console serial number)
CHAR domain[20]; // xbox.com
CHAR realm[24]; // passport.net
BYTE key[16];
===Nonce HMAC Key===
The nonce HMAC key, used to encrypt the machine account, is computed as follows:
temp_key = MD5-HMAC of the null terminated string "signaturekey" using the online key
salted_nonce = "5F F3 28 92 13 8C 9C 4B 05 84 9A 3C 10 1A DB 5D" // MD5 of "02 04 00 00 00 00 00 00"
nonce_hmac_key = MD5-HMAC of salted_nonce using temp_key
The key can be verified using the PA-XBOX-CLIENT-VERSION preauth:
test_signature = SHA1-HMAC of the version_string using the nonce_hmac_key
// if both signatures match, the key was generated correctly
===Encryption===
The machine account is encrypted with the nonce HMAC key and salt 1203 using RC4-HMAC-MD5. The encrypted bytes are packed as a Kerberos EncryptedData object into a PA-DATA TYPE 203 preauthentication header in the AS-REP.
==AS-REP==
cee24568599e3bbb2a3f55ee14f688627b418886
User:Master-bob
2
3980
6652
2019-01-22T01:48:20Z
Master-bob
2507
Created page with "The following are links to my research on Xbox Live * [[User:Master-bob/MACS|Machine Account Creation Service (MACS)]]"
wikitext
text/x-wiki
The following are links to my research on Xbox Live
* [[User:Master-bob/MACS|Machine Account Creation Service (MACS)]]
d0e8689cec8447c8161df01af3d38d876068689f
NV2A/Vertex attributes
0
3687
6671
6635
2019-01-22T23:11:53Z
Mborgerson
2478
wikitext
text/x-wiki
This article documents the attribute types which are supported by the Xbox GPU.
Please take everything with a grain of salt - it's still being researched.
== Draw methods ==
=== Draw Arrays ===
Data uploaded through DMA.
Each attribute has it's own offset and stride.
Decoded using the attribute information.
=== Inline Buffer ===
Data uploaded and decoded through PGRAPH methods.
==== NV097_SET_VERTEX_DATA2F_M ... NV097_SET_VERTEX_DATA2F_M + 0x7c ====
==== NV097_SET_VERTEX_DATA4F_M ... NV097_SET_VERTEX_DATA4F_M + 0xfc ====
==== NV097_SET_VERTEX_DATA2S ... NV097_SET_VERTEX_DATA2S + 0x3c ====
Vertex attribute values provided via NV097_SET_VERTEX_DATA2S are
apparently two 16-bit signed integers, packed into 32 bits, which are
then to be directly mapped to floating point values in the range
[-32768.0, 32767.0].
==== NV097_SET_VERTEX_DATA4UB ... NV097_SET_VERTEX_DATA4UB + 0x3c ====
==== NV097_SET_VERTEX_DATA4S_M ... NV097_SET_VERTEX_DATA4S_M + 0x7c ====
=== Inline Array ===
Data uploaded through PGRAPH method NV097_INLINE_ARRAY.
The attributes are tightly packed in that buffer.
Decoded using the attribute information.
=== Inline Elements ===
Same as "Draw Arrays" but with an extra index buffer.
The index buffer is uploaded through PGRAPH methods NV097_ARRAY_ELEMENT16 and NV097_ARRAY_ELEMENT32.
== Attribute Types ==
=== Normalized unsigned byte (D3D) ===
Unsigned bytes aranged as ZYXW (BGRA) in memory (Also see [http://www.opengl.org/registry/specs/ARB/vertex_array_bgra.txt this GL extension]).
This is commonly used with an attribute count of 4.
FIXME: Does this still work with attribute count =/= 4 ?
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized unsigned byte (GL) ===
Unsigned bytes arranged as XYZW (RGBA) in memory.
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -1.0 to 1.0
FIXME: Verify
=== Float ===
IEEE-754 single precision float arranged as XYZW.
FIXME: What happens to NaN or denormals?
=== Short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -32768.0 to 32767.0
FIXME: Verify
=== Compressed normal ===
Each 32 bit attribute is consisting of 11 bit X, 11 bit Y, 10 bit Z.
Each component is signed and will be mapped into the range -1.0 to 1.0.
FIXME: Verify
FIXME: Is the attribute count ignored?
[[Category:NV2A]]
f25c773f2b9abc5200698b1278643a42e588affe
6672
6671
2019-01-22T23:32:19Z
JayFoxRox
2
Markup for FIXME
wikitext
text/x-wiki
This article documents the attribute types which are supported by the Xbox GPU.
Please take everything with a grain of salt - it's still being researched.
== Draw methods ==
=== Draw Arrays ===
Data uploaded through DMA.
Each attribute has it's own offset and stride.
Decoded using the attribute information.
=== Inline Buffer ===
Data uploaded and decoded through PGRAPH methods.
==== NV097_SET_VERTEX_DATA2F_M ... NV097_SET_VERTEX_DATA2F_M + 0x7c ====
==== NV097_SET_VERTEX_DATA4F_M ... NV097_SET_VERTEX_DATA4F_M + 0xfc ====
==== NV097_SET_VERTEX_DATA2S ... NV097_SET_VERTEX_DATA2S + 0x3c ====
Vertex attribute values provided via NV097_SET_VERTEX_DATA2S are
apparently two 16-bit signed integers, packed into 32 bits, which are
then to be directly mapped to floating point values in the range
[-32768.0, 32767.0].
==== NV097_SET_VERTEX_DATA4UB ... NV097_SET_VERTEX_DATA4UB + 0x3c ====
==== NV097_SET_VERTEX_DATA4S_M ... NV097_SET_VERTEX_DATA4S_M + 0x7c ====
=== Inline Array ===
Data uploaded through PGRAPH method NV097_INLINE_ARRAY.
The attributes are tightly packed in that buffer.
Decoded using the attribute information.
=== Inline Elements ===
Same as "Draw Arrays" but with an extra index buffer.
The index buffer is uploaded through PGRAPH methods NV097_ARRAY_ELEMENT16 and NV097_ARRAY_ELEMENT32.
== Attribute Types ==
=== Normalized unsigned byte (D3D) ===
Unsigned bytes aranged as ZYXW (BGRA) in memory (Also see [http://www.opengl.org/registry/specs/ARB/vertex_array_bgra.txt this GL extension]).
This is commonly used with an attribute count of 4{{FIXME|reason=Does this still work with attribute count =/= 4 ?}}.
Each byte will be mapped into the range{{FIXME|reason=Verify}} 0.0 to 1.0.
=== Normalized unsigned byte (GL) ===
Unsigned bytes arranged as XYZW (RGBA) in memory.
Each byte will be mapped into the range 0.0 to 1.0.
FIXME: Verify
=== Normalized short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -1.0 to 1.0
FIXME: Verify
=== Float ===
IEEE-754 single precision float arranged as XYZW.
FIXME: What happens to NaN or denormals?
=== Short ===
Shorts, arranged as XYZW.
Each short will be mapped into the range -32768.0 to 32767.0
FIXME: Verify
=== Compressed normal ===
Each 32 bit attribute is consisting of 11 bit X, 11 bit Y, 10 bit Z.
Each component is signed and will be mapped into the range -1.0 to 1.0.
FIXME: Verify
FIXME: Is the attribute count ignored?
[[Category:NV2A]]
bae4d78c4d427e704e20b98882399abc97be9434
Talk:Emulators
1
3981
6676
2019-01-24T10:48:04Z
PatrickvL
2473
Created page with "How about adding haxar's xexec? Even though it's withdrawn from github, it did exist and could still be retrieved by some."
wikitext
text/x-wiki
How about adding haxar's xexec? Even though it's withdrawn from github, it did exist and could still be retrieved by some.
74dd1ce76d21bee72e7b745f72ae60c644e045a0
Emulators
0
3703
6677
6646
2019-01-24T12:09:12Z
PatrickvL
2473
Added xexec and MacBox
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/MacOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|xexec
|[http://xboxdevwiki.net/User:Haxar/NV2A]
|Haxar
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|MacOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
3730c5f8d90fec1a5540ddeab42d3710cda0eb0a
6678
6677
2019-01-24T12:10:30Z
PatrickvL
2473
Changed link to haxar
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/MacOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|MacOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|
|MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
ed331fe41f53ef7fa75a0c4618422c16ddd5fbaf
6679
6678
2019-01-24T12:19:34Z
PatrickvL
2473
Updated MAME initiator and links
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/MacOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|MacOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/dettaglio_mame.php?game_name=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
6518fa23d05a8c5f814fb7d7d2c00e791c39ed18
6680
6679
2019-01-24T12:20:51Z
PatrickvL
2473
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/MacOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|MacOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|Mac
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/Linux/Mac/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
88d20d224f5c7ee2f3587fa549c326b4cbba3278
6681
6680
2019-01-25T09:20:34Z
JayFoxRox
2
The OS is called macOS. Also focus was on HLE for xexec, so name it first.
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation. Does Xbox (non-Chihiro) emulation exist yet?{{citation needed}}
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
4e70e4c4438586e886ffef85d2086d460d04b68e
6682
6681
2019-01-25T09:25:13Z
JayFoxRox
2
Add Xbox link to MAME
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
7e65979dcad1fc20b4c582934d4881a9fed014bc
6685
6682
2019-01-25T17:24:30Z
PatrickvL
2473
Added link to XBENext
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|[https://github.com/LoveMHz/XBENext]
|LoveMHz
|Windows
|
|
|-
|{{Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
f656e04552a38aedfeabfad7d72543d4e9c13d6f
6686
6685
2019-01-30T13:05:51Z
JayFoxRox
2
Use standard templates if available
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Yes|Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{No|Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{No|Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid
|{{No}}
|viXen
|[https://github.com/StrikerX3/viXen]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{No|Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|[https://github.com/LoveMHz/XBENext]
|LoveMHz
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{No|Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{No|Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
c74ce78c0d2fc8a6897870da5f2817f5c340daed
6696
6686
2019-03-01T01:22:41Z
StrikerX3
2510
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Yes|Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{No|Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{No|Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid
|{{No}}
|StrikeBox
|[https://github.com/StrikerX3/StrikeBox]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{No|Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|[https://github.com/LoveMHz/XBENext]
|LoveMHz
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{No|Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{No|Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
348ce44e1f9d8559e094b83c5e30e083caeca1d5
NForce
0
3765
6683
5731
2019-01-25T09:59:09Z
Dans34
2508
Slight AMD Heritage correction
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/NForce}}
This documents collects information about the Xbox chipset and its sibling, the nVidia nForce chipset, as well as further relatives.
== nForce ==
The nForce chipset consists of the IGP (Integrated Graphics Processor) Northbridge and the MCP (Media and Communications Processor) Southbridge. Both are available in different flavours:
* IGP-64: 64 bit memory bus
* IGP-128: 128 bit memory bus (TwinBank), requires two DIMM modules for 128 bit operation
* MCP-D: includes Dolby Digital encoder
* MCP: Dolby Digital encoder disabled
So these are the four possible combinations:
{| class="wikitable"
|-
|
| MCP
| MCP-D
|-
| IGP-64
| nForce 220
| nForce 220D
|-
| IGP-128
| nForce 420
| nForce 420D
|}
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/05/31/nvidia_crush_chipset_named_nforce/]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/06/01/nvidia_crush_is_called_nforce/]
The VGA controller inside the IGP is a "GeForce2 MX Integrated Graphics" (PCI ID:10de/01a0). Its internal name is NV1A.
[https://web.archive.org/web/20100617023830/http://pciids.sourceforge.net/iii/?i=10de]
[https://web.archive.org/web/20100617023830/http://www.nvitalia.com/articoli/editoriali/produzione_nvidia_2001.htm]
Although IGP-64 and IGP-128 are different and their respective chipsets have different codenames (Crush11 and Crush12, see below), there seems to be no difference from the software side:
* The VGA BIOS of the MS-6367 mainboard (nForce 420D configuration, i.e. Crush12) has the internal name "CR11BT.ROM". It also includes the strings "NVIDIA GeForce2 Integrated GPU", "CR11 Board" and "Chip Rev B2".
* The PCI IDs seem to be the same for the GPUs inside IGP-64 and IGP-128.
== Crush ==
"Crush" was the codename of the nForce chipset. Crush11 is the nForce 220/220D/230/230-T, Crush12 is the nForce 420/420D/430/430-T, and Crush18 is the nForce2. The "11" probably derives from "NV11", the internal name of the GeForce2 MX.
[https://web.archive.org/web/20100617023830/http://users.erols.com/chare/chipsets.htm]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2000/11/17/nvidias_super_secret_crush_spec/]
== nForce & Xbox ==
The Xbox has an IGP-128 that uses an NV2A video core (PCI ID:10de/02a5), which is between the GeForce3 (NV20) and the GeForce4 (NV25). The Southbridge is called "MCP-X" and lacks the PCI card bus (PCI bus #1).
[https://web.archive.org/web/20100617023830/http://www.digit-life.com/articles/nvidianforce/]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/showdoc.html?i=1484]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=1535]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/systems/showdoc.aspx?i=1561&p=3]
== AMD Heritage ==
There is the following rumour, which is not fully verified yet:
* Microsoft wanted AMD to make the CPU and the chipset for the Xbox, and nVidia to make the video hardware.
* When alpha hardware had already bee built, Intel made a better deal
* Microsoft agreed to have Intel CPUs; Intel had to modify AMD's chipset to support an Intel CPU
* Intel insisted that the brand name AMD could not be associated with the Xbox, so nVidia licensed the AMD chipset. Now the Xbox chipset was by nVidia.
* nVidia sold the same chipset for PCs, calling it "nForce".
This is the reason why
* the Xbox is the only nForce chipset with an Intel CPU
* the AMD chipset and the nForce chipset are so similar
Evidence:
* The AMD and nForce AMD IDE controllers are fully compatible. (Linux kernel: "AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04 IDE driver for Linux." [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/ide/pci/amd74xx.c])
* The I2C/SMBus controller on the nForce is fully AMD-756/766/68 compatible. [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/i2c/busses/i2c-amd756.c]
* The audio controller is i810 compatible - as is the audio controller of the AMD-768 and the AMD-8111.
* The nForce and AMD-768 modems are compatible.
* At least one register ("VGA_en") in the nForce PCI-to-AGP bridge is compatible with the AMD chipset (AMD-761, 24081.pdf, page 136).
* The nForce uses HyperTransport.
* [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0307.3/0922.html], [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0301.3/0305.html]
* ''"One man's guess, the silicon is not a major factor. Because the nForce and 760 MP have a similar pin count, they are going to be cost comparable."'' [https://web.archive.org/web/20100617023830/http://overclockers.com/articles446/]
{| class="wikitable"
|-
|
| Northbridge
| Southbridge
|-
| AMD-760
| AMD-761
| AMD-766
|-
| AMD-760MP
| AMD-762
| AMD-766
|-
| AMD-760MPX
| AMD-762
| AMD-768
|}
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_1133,00.html AMD-760™ Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_1130,00.html AMD-760™ MP Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_4296,00.html AMD-760™ MPX Chipset Tech Docs]
<br />
The nForce chipset might be based on the AMD-760 chipset.
== More Links ==
[https://web.archive.org/web/20100617023830/http://www.duxcw.com/digest/guides/mb_chip/nforce/print.htm]
72229eb2f73876a90a44bbd9298be08a0116a0e3
DSP
0
3800
6684
6644
2019-01-25T16:21:31Z
JayFoxRox
2
Describe FIFOs
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''{{FIXME|reason=How is addressing affected with sample format 0x3 = 32 bit words?}}
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''{{FIXME|reason=How are negative input words affected by rounding? 0x123000 etc.}}
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks to be transferred.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
{{FIXME|reason=Document register names? The FIFO registers are already defined in the XQEMU source}}
Each of the DSP has 4 output FIFOs, and 2 input FIFOs.
All FIFOs belonging to the same DSP share the memory view. The memory view is controlled in the DSPs FIFO Scatter-Gather entries.
Each FIFO has 3 address registers, which define a ringbuffer:
* Base address: The address of the first byte in the FIFO.
* End address: The address of the first byte that's no longer part of the FIFO (so this address is exclusive).
* Current address: The absolute address of the next byte that will be written.
During a transfer, the current address is incremented.
If the current address hits the end address during a transfer, the current address is moved to the base, where the transfer continues.
If the transfer length is greater than the FIFO length when using the output FIFO, the transfer will continue normally and overwrite previously transferred bytes.
If the transfer length is greater than the FIFO length when using the input FIFO, the transfer will continue normally and read previously transferred bytes again.
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
[[Category:APU]]
476a0cb2e7f2d9b5b8b64d71ac5769bec04c79a3
6689
6684
2019-02-03T17:16:39Z
JayFoxRox
2
Add link to xboxpy scripts
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation)
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''{{FIXME|reason=How is addressing affected with sample format 0x3 = 32 bit words?}}
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''{{FIXME|reason=How are negative input words affected by rounding? 0x123000 etc.}}
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks to be transferred.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
{{FIXME|reason=Document register names? The FIFO registers are already defined in the XQEMU source}}
Each of the DSP has 4 output FIFOs, and 2 input FIFOs.
All FIFOs belonging to the same DSP share the memory view. The memory view is controlled in the DSPs FIFO Scatter-Gather entries.
Each FIFO has 3 address registers, which define a ringbuffer:
* Base address: The address of the first byte in the FIFO.
* End address: The address of the first byte that's no longer part of the FIFO (so this address is exclusive).
* Current address: The absolute address of the next byte that will be written.
During a transfer, the current address is incremented.
If the current address hits the end address during a transfer, the current address is moved to the base, where the transfer continues.
If the transfer length is greater than the FIFO length when using the output FIFO, the transfer will continue normally and overwrite previously transferred bytes.
If the transfer length is greater than the FIFO length when using the input FIFO, the transfer will continue normally and read previously transferred bytes again.
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://github.com/JayFoxRox/xbox-tools/pull/70 Script to analyze DSP instructions]
* [https://github.com/JayFoxRox/xbox-tools/pull/60 Script to control DSP DMA]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
[[Category:APU]]
0c36a8a63ebb1ea2243feb71ea690a54180725dc
6690
6689
2019-02-03T17:17:46Z
JayFoxRox
2
Add explicit link to family manual, because people don't seem to find it
wikitext
text/x-wiki
The DSPs in the APU are probably "Parthus MediaStream" DSP cores (probably the 24-bit DSP2420 "Mozart" core).
Those are similar to Motorola DSP56362 (DSP56300 Family). If so, the datasheet can be found at http://www.nxp.com/docs/en/data-sheet/DSP56362.pdf (Also see "Documentation" section in said datasheet for the related documentation, like [https://www.nxp.com/docs/en/reference-manual/DSP56300FM.pdf the family manual])
== Memory Size ==
{| class="wikitable"
|-
!
! Program RAM Size
! X Data RAM Size
! Y Data RAM Size
! MIXBUF Size
|-
! GP
| 4096 x 24-bit
| 4096 x 24-bit
| 2048 x 24-bit
| 992{{FIXME|reason=This is probably 1024 words, but the last 32 words were not working as intended during my testing}} x 24-bit
|-
! EP
| 4096 x 24-bit
| 3072 x 24-bit
| 256 x 24-bit
| n/a
|}
MIXBUF is accessible at X:$001400 in the GP.
Other datasheets for similar DSPs suggest that the memory sizes might be different if instruction cache or switch mode are toggled.
It is currently unknown if the DSPs in the Xbox APU support a similar feature{{FIXME}}.
== DMA ==
''This section is very incomplete and not much was tested on hardware either''
DMA is controlled using peripheral registers:
* 0xFFFFD4: Memory address of next command block
* 0xFFFFD5: DMA_START_BLOCK{{FIXME|reason=How is this used?}}
* 0xFFFFD6: DMA_CONTROL{{FIXME|reason=Explain the bits}}
* 0xFFFFD7: DMA_CONFIGURATION{{FIXME|reason=Explain the bits}}
Additionally, bit 7 in the interrupt register at 0xFFFFC5 is set if a DMA End-Of-List has been encountered.
=== Command blocks ===
DSP command blocks are loaded from X-Memory.
{| class="wikitable"
! Word
! Meaning
! Notes
|-
! 0
| Next command block address || Memory address of next command block.
Bit 14 is used as End-Of-List marker.
|-
! 1
| Transfer control word || Controls the DMA transfer:
'''DSP address interleave (Bit-offset 0; 1-bit):'''{{FIXME|reason=How is addressing affected with sample format 0x3 = 32 bit words?}}
<ul>
<li>0 = Addressing using:<pre>
for (sample_index = 0; sample_index < sample_count; sample_index++) {
transfer_dsp_word(dsp_address + sample_index * dsp_step_size)
}</pre></li>
<li>1 = Addressing using:<pre>
for (block_index = 0; block_index < block_count; block_index++) {
for (channel_index = 0; channel_index < channel_count; channel_index++) {
transfer_dsp_word(dsp_address + block_index + channel_index * dsp_step_size)
}
}</pre></li>
</ul>
'''Direction (Bit-offset 1; 1-bit):'''
* 0 = Buffer to DSP (In)
* 1 = DSP to buffer (Out)
'''Unknown (Bit-offset 2; 2-bits):'''
* 0 = ?
* 1 = ?
* 2 = ?
* 3 = ?
'''Buffer offset writeback (Bit-offset 4; 1-bit):'''
''Only used for scratch buffers, behaves like 0 otherwise.''{{FIXME|reason=Assumption; Didn't do anything for FIFO0. Not sure if I documented this for 0xE or 0xF}}
* 0 = Don't update buffer offset (Word 4)
* 1 = Update buffer offset (Word 4); this respects address wrapping of circular buffers
'''Buffer (Bit-offset 5; 4-bits):'''
* 0x0 = FIFO0 (In / Out)
* 0x1 = FIFO1 (In / Out)
* 0x2 = FIFO2 (Out only; Buffer to DSP is ignored)
* 0x3 = FIFO3 (Out only; Buffer to DSP is ignored)
* 0x4 = ?
* 0x5 = ?
* 0x6 = ?
* 0x7 = ?
* 0x8 = ?
* 0x9 = ?
* 0xA = ?
* 0xB = ?
* 0xC = ?
* 0xD = ?
* 0xE = Scratch (Circular)
* 0xF = Scratch
'''Unknown (Bit-offset 9; 1-bit):'''
* 0 = ?
* 1 = ?
'''Sample format (Bit-offset 10; 3-bits):''' ''{{FIXME|reason=Some of these need tests with signed datatypes}}''
* 0x0 = 8 bit (1 DSP word / 1 byte); ''sample-count must be multiple of 4, or transfer is skipped; rounded; byte MSB is flipped''{{FIXME|reason=How are negative input words affected by rounding? 0x123000 etc.}}
** Buffer to DSP: bytes: <code>0x12,0x34,0x56,0x78</code> → words: <code>0x920000, 0xB40000, 0xD60000, 0xF80000</code>
** Buffer to DSP: bytes: <code>0x92,0xB4,0xD6,0xF8</code> → words: <code>0x120000, 0x340000, 0x560000, 0x780000</code>
** DSP to buffer: words: <code>0x927FFF, 0xB47FFF, 0xD67FFF, 0xF87FFF</code> → bytes: <code>0x12,0x34,0x56,0x78</code> ''(Rounded down)''
** DSP to buffer: words: <code>0x928000, 0xB48000, 0xD68000, 0xF88000</code> → bytes: <code>0x13,0x35,0x57,0x79</code> ''(Rounded up)''
** DSP to buffer: words: <code>0x800000, 0x7E7FFF, 0x7E8000, 0x7FFFFF</code> → bytes: <code>0x00,0xFE,0xFF,0xFF</code> ''(Saturated)''
* 0x1 = 16 bit (1 DSP word / 2 bytes) ''sample-count must be multiple of 2, or transfer is skipped; truncated''
** Buffer to DSP: bytes: <code>0x34,0x12</code> → word: <code>0x123400</code>
** DSP to buffer: word: <code>0x1234FF</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
** DSP to buffer: word: <code>0x123400</code> → bytes: <code>0x34,0x12</code> ''(Truncated)''
* 0x2 = 24 bit in MSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x00,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0xFF,0x56,0x34,0x12</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x00,0x56,0x34,0x12</code> ''(Zero padding)''
* 0x3 = 32 bit (2 DSP words / 4 bytes); ''trunacted''
** Buffer to DSP: bytes: <code>0x12,0xBC,0x9A,0x78</code> → words: <code>0x120000, 0x789ABC</code>
** DSP to buffer: words: <code>0x12FFFF, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
** DSP to buffer: words: <code>0x120000, 0x789ABC</code> → bytes: <code>0x12,0xBC,0x9A,0x78</code> ''(Truncated)''
* 0x4 = ''Transfer skipped''
* 0x5 = ''Transfer skipped''
* 0x6 = 24 bit in LSB (1 DSP word / 4 bytes); ''padded''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0x00</code> → word: <code>0x123456</code> ''(Padding ignored)''
** Buffer to DSP: bytes: <code>0x56,0x34,0x12,0xFF</code> → word: <code>0x123456</code> ''(Padding ignored)''
** DSP to buffer: word: <code>0x123456</code> → bytes: <code>0x56,0x34,0x12,0x00</code> ''(Zero padding)''
* 0x7 = ''Transfer skipped''
'''Unknown (Bit-offset 13; 1-bit):'''
* 0 = ?
* 1 = ?
'''DSP address step size (Bit-offset 14; 10-bits):'''
Used in DSP address calculation
|-
! 2
| Sample count || Behaviour depends on interleave setting
* Non-interleaved mode:
:
: '''Sample count (Bit-offset 0; 24-bits):'''
: The number of samples to be transferred
:
:
* Interleaved mode:
:
: '''Channel count (Bit-offset 0; 4-bits):'''
: The number of channels minus 1. For 3 channels, this has to be 0x2.
:
: '''Block count (Bit-offset 4; 20-bits):'''
: The number of blocks to be transferred.
:
:
|-
! 3
| DSP address || This is the address in the DSP:
* 0x0000 - 0x17FF = X-Memory
* 0x1800 - 0x27FF = Y-Memory
* 0x2800 - 0x37FF = P-Memory
|-
! 4
| Buffer offset || ''Only used for scratch buffers, ignored otherwise.''{{FIXME|reason=Assumption; effect in buffers 0xE / 0xF; didn't seem to do anything for buffer 0x0}}
This is the offset within the buffer where the first sample is accessed.
If this is above or equal to the buffer end (buffer base + buffer size), then the write will behave like a non circular write.
|-
! 5
| Buffer base || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
The start address of the buffer.
|-
! 6
| Buffer size || ''Only used for circular scratch buffer, ignored otherwise.''{{FIXME|reason=Assumption; it happens for buffer 0xE, but not for buffer 0xF}}
Size of buffer minus 1. For a buffer with 0x1000 bytes, this has to be 0xFFF.
|}
=== FIFO ===
{{FIXME|reason=Document register names? The FIFO registers are already defined in the XQEMU source}}
Each of the DSP has 4 output FIFOs, and 2 input FIFOs.
All FIFOs belonging to the same DSP share the memory view. The memory view is controlled in the DSPs FIFO Scatter-Gather entries.
Each FIFO has 3 address registers, which define a ringbuffer:
* Base address: The address of the first byte in the FIFO.
* End address: The address of the first byte that's no longer part of the FIFO (so this address is exclusive).
* Current address: The absolute address of the next byte that will be written.
During a transfer, the current address is incremented.
If the current address hits the end address during a transfer, the current address is moved to the base, where the transfer continues.
If the transfer length is greater than the FIFO length when using the output FIFO, the transfer will continue normally and overwrite previously transferred bytes.
If the transfer length is greater than the FIFO length when using the input FIFO, the transfer will continue normally and read previously transferred bytes again.
If the current address is below the base address when starting a transfer, it is moved to the base address.
If the current address is above or equal to the end address when starting a transfer, the DSP hangs{{FIXME|reason=Needed to reboot Xbox to start new DMA, even DSP reset did not work}}.
== Related links ==
* [https://github.com/XboxDev/a56 Modernized fork of a56, open-source assembler for the similar 56000 architecture]
* [https://github.com/JayFoxRox/xbox-tools/pull/70 Script to analyze DSP instructions]
* [https://github.com/JayFoxRox/xbox-tools/pull/60 Script to control DSP DMA]
* [https://web.archive.org/web/20010212122052/http://www.parthus.com:80/platforms/parthus_mediastream/index.html MediaStream product page]
* [https://web.archive.org/web/20011130084353/http://www.fs2.com:80/parthus_download/ First Silicon MediaStream tools]
* [https://web.archive.org/web/20020213235936/http://www.tasking.com/products/MediaStream/index.html Tasking MediaStream compiler]
[[Category:APU]]
cf6af4bd7d84de0df6c71397e76537f4fddb5e9a
Xbox DVD Movie Playback Kit
0
3768
6687
6539
2019-02-01T01:46:10Z
JayFoxRox
2
Old link was broken, but tool is also linked above with new link
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they don't have to pay Dolby for every Xbox sold, but just for every DVD Remote kit sold. This allows them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used
// Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).
// A value close to 0x0040 is returned for continously holding a button.
// When holding, the value often goes back and forth between 0x0040 / 0x0041.
// It is unknown if the receiver / remote intentionally does this.
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit {{FIXME|reason=Document the protocol here}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
909d42288bcb792f93a9da0a75216e9600a449c8
APU
0
3799
6688
6641
2019-02-02T00:10:14Z
JayFoxRox
2
Some more basic APU information
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
The APU consists of 3 main components for audio-processing:
* VP: A fixed-function block, that generates 32 channel mono audio from voices; the audio is output to the GP MIXBUF.
* GP: A programmable DSP, it is intended for general-purpose audio processing (programmable audio effects for example).
* EP: A programmable DSP, it is intended for audio encoding (5.1 AC3 encoding for example).
VP and GP are connected by the MIXBUF, but GP and EP are entirely independent, and no special-purpose memory area connects them.
Therefore, the communication between the GP and EP typically happens through programmable DMA transfers (via FIFO or scratch memory).
The GP and EP are based on the same DSP architecture, run at the same clockrate, and have the same functionality (the EP has less memory, and no direct access to the MIXBUF). So, theoretically, nothing prevents the GP from doing EP tasks or vice versa{{FIXME|reason=I have not seen counter-arguments}}.
The APU does only audio-processing but no audio output. Hence, one of the DSPs typically uses programmable DMA to transfer the finished audio to system memory, where it can be read by other components (such as AC97).
All audio processing by the APU is typically done in 24bit PCM at 48000Hz.
An APU audio frame is 32 samples long, so there are 1500 frames per second.
The MIXBUF therefore holds 1024 samples (32 channels * 32 samples/channel).
=== Glossary ===
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
* SGE = Scatter Gather Entry
* SSL = Stream Segment List
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate segments of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** The best approximation I could come up with so far is: <code>255*pow(0.99988799,(DECAYRATE*16-COUNT)*4096/DECAYRATE)</code>.
** When the output level (not LVL!) reaches the sustain level the decay section is over (In my example above, this happens when the output level is less than 0.2 away from the sustain level; so if sustain is 0, the voice would switch to the sustain segment when a value below 0.2 is reached)
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this, but writes go through? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound APIs.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
[[Category:APU]]
ccc3b831d9c473f2780bd0635b4c7a52796fa818
Memory
0
3674
6691
6283
2019-02-04T15:18:25Z
PatrickvL
2473
corrected address range ends to be inclusive (most where exclusive)
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. On Debug Xboxs and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|APU Registers
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
08a428e554ec33db049fcbd58fb97351db25533d
6692
6691
2019-02-04T15:22:34Z
JayFoxRox
2
Add links
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. On Debug Xboxs and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
d20a4bfd77cc1cd09d3aa3bcb7fdf6661ca35950
OpenXDK
0
3680
6693
5028
2019-02-09T02:50:00Z
JayFoxRox
2
Use archived website before it was defaced
wikitext
text/x-wiki
Seemingly abandoned, but then sprung back into life in 2016 after 7 years of inactivity.
== References ==
[https://web.archive.org/web/20170624051336/http://openxdk.sourceforge.net:80/ openxdk.sourceforge.net]
645ee4c8d028d2fe9bc18d44f5ca76181e0da379
Xbox Input Devices
0
11
6694
6579
2019-02-11T06:35:18Z
DiscoStarslayer
2509
Testing on halo: ce I sampled force feedback events from the shotgun with values of 0xFFFF
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
From http://www.yaronet.com/topics/154490-steel-battalion-controller-homemade#post-15
<pre>bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0A7B
idProduct: 0xD000
bcdDevice: 0x0100
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Full
Device Address: 0x03
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0xFA (500 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x58
bInterfaceSubClass: 0x42
bInterfaceProtocol: 0x00
iInterface: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x82
Transfer Type: Interrupt</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
209e131d6e07925afdd4cf745e6329cc01740d31
Xbox Debug Monitor
0
3689
6695
6559
2019-02-16T16:09:33Z
JayFoxRox
2
/* delete (Delete file) */
wikitext
text/x-wiki
The '''Xbox Debug Monitor''' ('''XBDM''') is a feature of Xbox Development Kits that provides remote debugging, file management, console discovery, and other services on TCP/UDP port 731. It is loaded by debug kernels at startup from <code>C:\xbdm.dll</code> and its configuration is read from <code>E:\xbdm.ini</code>. XBDM is distinct from KD and uses a different wire protocol.
==Name Answering Protocol==
An Xbox Development Kit (XDK) can be assigned a ''debug name'' that identifies it on the local network. XBDM provides the ability to resolve a debug name to an IP address ([[#Forward Lookup|forward lookup]]), resolve an IP address to a debug name ([[#Reverse Lookup|reverse lookup]]), and [[#Console Discovery|discover]] all XDKs on the local network using a very simple UDP-based protocol.
{|class="wikitable" style="margin: 0 auto; text-align: center;"
|+Name Answering Protocol Packet
|-
! style="border-bottom:none; border-right:none;"| ''Offsets''
! style="border-left:none;"| Octet
! colspan="8" | 0
! colspan="8" | 1
|-
! style="border-top: none" | Octet
! Bit!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10!!11!!12!!13!!14!!15
|-
! 0
! 0
| colspan="8" | Type || colspan="8" | Name Length
|-
! 2
! 16+
| colspan="16" | Name
|}
A NAP packet contains 3 fields, the last of which is variable-length. The minimum length of a NAP packet is 2 bytes and the maximum is 257. Invalid packets are silently dropped by XBDM.
; Type
: This unsigned 8-bit field may contain the values 1 (lookup), 2 (reply), or 3 (wildcard).
; Name Length
: This unsigned 8-bit field specifies the length of the Name field and should be a value from 0 to 255. For Type 3 packets, this field should always be 0. For Type 1 and Type 2 packets, this field should never be 0.
; Name
: This variable-length field contains the ASCII-encoded debug name for Type 1 and Type 2 packets. The number of bytes in this field is given by the Length field. It should not contain any <code>NUL</code> characters.
===Forward Lookup===
To resolve a debug name to an IP address, send a Type 1 NAP packet containing the debug name to be resolved to UDP address 255.255.255.255:731. The XDK with that name will respond with a Type 2 NAP packet and its IP address can be retrieved from the UDP header. There is no way to prevent multiple XDKs being assigned the same debug name, so it's possible that the client may receive replies from multiple IP addresses.
===Reverse Lookup===
To resolve an IP address to a debug name, send a Type 3 NAP packet with no name (length 0) to the IP address on UDP port 731. Assuming the target is actually an XDK, it will respond with a Type 2 NAP packet containing its name. This is very similar to the Console Discovery process (below), except that by sending the wildcard packet to a single IP address, only that XDK will respond.
===Console Discovery===
To discover all XDKs on the local network, send a Type 3 NAP packet with no name (length 0) to the UDP address 255.255.255.255:731. Each XDK will respond with a Type 2 NAP packet containing its name. As with a forward lookup, the client may receive multiple replies with the same name, but different IP addresses.
==Remote Debugging and Control Protocol==
The Remote Debugging and Control Protocol (RDCP) is a text-based protocol transmitted over a TCP connection on port 731. RDCP resembles protocols like FTP and SMTP, making it possible to communicate with XBDM using just a Telnet client in many cases.
When a connection is established, XBDM sends <code>201- connected</code> (or <code>200- connected</code> in version 3944) followed by <CR><LF> (that is, a carriage return character followed by a line feed character). The RDCP client is then free to send a [[#Commands|command]] followed by <CR><LF> or <CR><NUL>.
After executing a command, XBDM replies with a response line consisting of a three-digit status code and message of the form <code>999- message text<CR><LF></code>. Note that unlike similar protocols, the <code>-</code> (dash) is always present in responses and messages cannot span multiple lines.
===Status codes===
In responses, 2xx status codes indicate success and 4xx codes indicate failure. Most codes have a default message, but some commands leave the message field empty while others use the message field to hold whatever data was requested by the client or additional information about an error.
====2xx Success====
; <span id="status_200">200- OK</span>
: Standard response for successful execution of a command.
; <span id="status_201">201- connected</span>
: Initial response sent after a connection is established. The client does not need to send anything to solicit this response.
; <span id="status_202">202- multiline response follows</span>
: The response line is followed by one or more additional lines of data terminated by a line containing only a <code>.</code> (period). The client must read all available lines before sending another command.
; <span id="status_203">203- binary response follows</span>
: The response line is followed by raw binary data, the length of which is indicated in some command-specific way. The client must read all available data before sending another command.
; <span id="status_204">204- send binary data</span>
: The command is expecting additional binary data from the client. After the client sends the required number of bytes, XBDM will send another response line with the final result of the command.
; <span id="status_205">205- connection dedicated</span>
: The connection has been moved to a dedicated handler thread (see [[#Connection dedication]]).
====4xx Failure====
; <span id="status_400">400- unexpected error</span>
: An internal error occurred that could not be translated to a standard error code. The message is typically more descriptive, such as "out of memory" or "bad parameter".
; <span id="status_401">401- max number of connections exceeded</span>
: The connection could not be established because XBDM is already serving the maximum number of clients (4).
; <span id="status_402">402- file not found</span>
: An operation was attempted on a file that does not exist.
; <span id="status_403">403- no such module</span>
: An operation was attempted on a module that does not exist.
; <span id="status_404">404- memory not mapped</span>
: An operation was attempted on a region of memory that is not mapped in the page table.
; <span id="status_405">405- no such thread</span>
: An operation was attempted on a thread that does not exist.
; <span id="status_406">406-</span>
: An attempt to set the system time with the <code>[[#cmd_setsystime|setsystime]]</code> command failed. This status code is undocumented.
; <span id="status_407">407- unknown command</span>
: The command is not recognized.
; <span id="status_408">408- not stopped</span>
: The target thread is not stopped.
; <span id="status_409">409- file must be copied</span>
: A move operation was attempted on a file that can only be copied.
; <span id="status_410">410- file already exists</span>
: A file could not be created or moved because one already exists with the same name.
; <span id="status_411">411- directory not empty</span>
: A directory could not be deleted because it still contains files and/or directories.
; <span id="status_412">412- filename is invalid</span>
: The specified file contains invalid characters or is too long.
; <span id="status_413">413- file cannot be created</span>
: The file cannot be created for some unspecified reason.
; <span id="status_414">414- access denied</span>
: The file cannot be accessed at the connection's current privilege level (see [[#Security]]).
; <span id="status_415">415- no room on device</span>
: The target device has run out of storage space.
; <span id="status_416">416- not debuggable</span>
: The title is not debuggable.
; <span id="status_417">417- type invalid</span>
: The performance counter type is invalid.
; <span id="status_418">418- data not available</span>
: The performance counter data is not available.
; <span id="status_420">420- box not locked</span>
: The command can only be executed when security is enabled (see [[#Security]]).
; <span id="status_421">421- key exchange required</span>
: The client must perform a key exchange with the <code>[[#cmd_keyxchg|keyxchg]]</code> command (see [[#Security]]).
; <span id="status_422">422- dedicated connection required</span>
: The command can only be executed on a dedicated connection (see [[#Connection dedication]]).
===Connection dedication===
'''Connection dedication''' is the process of moving a client connection from the ''global server thread'' to a ''threaded command handler thread'' with the <code>dedicate</code> command.
By default, commands sent to XBDM are processed on the global server thread. Built-in commands and custom command handlers registered with <code>DmRegisterCommandProcessor</code> are run on this thread and may only execute kernel APIs. Commands that need to call CRT or XAPI functions must run in a threaded command handler, registered with <code>DmRegisterCommandProcessorEx</code> or <code>DmRegisterThreadedCommandProcessor</code>.
A client that has not dedicated its connection will receive a <code>422- dedicated connection required</code> response if it tries to execute a threaded command on the global server thread. After dedicating itself to a threaded command handler, the client can no longer send built-in or non-threaded commands until it re-dedicates itself to the global server thread.
===Security===
TODO
===Commands===
''See also: [[XBDM commands by version]]''
A command consists of a name and zero or more parameters separated by whitespace characters. The format of the parameters is defined by the command, but most commands use the form <code>key=value</code>. Parameter values that contain whitespace characters must be surrounded by double quotes (e.g. <code>"some value"</code> or <code>key="some value"</code>).
In the command descriptions below, the following data types are used:
{| class="wikitable" style="margin: 0 auto"
! Type !! Description
|-
| DWORD || A 32-bit integer in hexadecimal format (e.g. <code>0x1234ABCD</code>).
|-
| QWORD || A 64-bit integer in hexadecimal format, but prefixed with 0q instead of 0x (e.g. <code>0q0123456789ABCDEF</code>).
|-
| STRING || An ASCII-encoded string, optionally surrounded by double quotes.
|}
====<span id="cmd_adminpw">adminpw</span> (Set administrator password)====
{{XBDM command|version=4039+|text=adminpw none|privs=manage}}
Clear the administrator password.
{{XBDM command|version=4039+|text=adminpw passwd=QWORD|privs=manage}}
Set the administrator password to the value of the <code>passwd</code> parameter. Note that <code>passwd</code> is a 64-bit integer instead of a string. The details of the conversion from a string password to a 64-bit integer are currently unknown.
====<span id="cmd_altaddr">altaddr</span>====
====<span id="cmd_authuser">authuser</span> (Authenticate user)====
====<span id="cmd_boxid">boxid</span>====
====<span id="cmd_break">break</span>====
====<span id="cmd_bye">bye</span> (Close connection)====
====<span id="cmd_capcontrol">capcontrol</span>/<span id="cmd_capctrl">capctrl</span>====
====<span id="cmd_continue">continue</span>====
====<span id="cmd_crashdump">crashdump</span>====
====<span id="cmd_d3dopcode">d3dopcode</span>====
====<span id="cmd_dbgname">dbgname</span> (Get/set debug name)====
====<span id="cmd_dbgoptions">dbgoptions</span>====
====<span id="cmd_debugger">debugger</span>====
====<span id="cmd_debugmode">debugmode</span>====
====<span id="cmd_dedicate">dedicate</span> (Dedicate connection)====
====<span id="cmd_deftitle">deftitle</span>====
====<span id="cmd_delete">delete</span> (Delete file or directory)====
{{XBDM command|text=delete name=STRING dir}}
Deletes a file or directory.
To delete a directory, the optional <code>dir</code> attribute must be present.
====<span id="cmd_dirlist">dirlist</span> (List files in directory)====
====<span id="cmd_dmversion">dmversion</span> (Get debug monitor version)====
====<span id="cmd_drivefreespace">drivefreespace</span> (Get free space on drive)====
====<span id="cmd_drivelist">drivelist</span> (List drive letters)====
{{XBDM command|text=drivelist}}
Returns a string which contains the drive-letter for each accessible drive.
====<span id="cmd_dvdblk">dvdblk</span> (Read block from DVD)====
====<span id="cmd_dvdperf">dvdperf</span>====
====<span id="cmd_fileeof">fileeof</span>====
====<span id="cmd_flash">flash</span> (Flash BIOS image)====
====<span id="cmd_fmtfat">fmtfat</span> (Format FAT partition)====
====<span id="cmd_funccall">funccall</span>====
====<span id="cmd_getcontext">getcontext</span> (Get thread context)====
====<span id="cmd_getd3dstate">getd3dstate</span> (Get Direct3D state)====
====<span id="cmd_getextcontext">getextcontext</span> (Get extended thread context)====
====<span id="cmd_getfile">getfile</span> (Download file)====
{{XBDM command|text=getfile name=STRING}}
Retrieve the entire contents of the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
{{XBDM command|text=getfile name=STRING offset=DWORD size=DWORD}}
Retrieve <code>size</code> bytes starting at <code>offset</code> from the named file.
The received data is prefixed with a 32 bit little endian value, which contains the number of bytes which have been read.
====<span id="cmd_getfileattributes">getfileattributes</span> (Get file attributes)====
====<span id="cmd_getgamma">getgamma</span> (Get gamma table)====
====<span id="cmd_getmem">getmem</span> (Read memory)====
====<span id="cmd_getmem2">getmem2</span> (Read memory)====
====<span id="cmd_getpalette">getpalette</span>====
====<span id="cmd_getpid">getpid</span>====
====<span id="cmd_getsum">getsum (Generate memory checksums)</span>====
{{XBDM command|version=5120+|text=getsum addr=DWORD length=DWORD blocksize=DWORD}}
Generates one or more checksums from memory.
The function will return <code>length</code> divided by <code>blocksize</code> 32-bit little endian checksums for the memory starting at virtual address <code>addr</code>.
The <code>addr</code>, <code>length</code> and <code>blocksize</code> must be multiples of 8.
Picking bad values can lead to crashes.
Each checksum is equal to <code>ReverseBitOrder(CRC32(address + blockoffset, blocksize) XOR 0xFFFFFFFF)</code> for the respective block.
====<span id="cmd_getsurf">getsurf</span>====
====<span id="cmd_getuserpriv">getuserpriv</span> (Get user's privilege level)====
====<span id="cmd_getutildrvinfo">getutildrvinfo</span> (Get utility drive information)====
====<span id="cmd_go">go</span>====
====<span id="cmd_gpucount">gpucount</span> (Toggle GPU counters)====
====<span id="cmd_halt">halt</span>====
====<span id="cmd_irtsweep">irtsweep</span>====
====<span id="cmd_isbreak">isbreak</span>====
====<span id="cmd_isdebugger">isdebugger</span>====
====<span id="cmd_isstopped">isstopped</span>====
====<span id="cmd_kd">kd</span> (Enable/disable kernel debugger)====
====<span id="cmd_keyxchg">keyxchg</span> (Perform key exchange)====
====<span id="cmd_lockmode">lockmode</span>====
====<span id="cmd_lop">lop</span>====
====<span id="cmd_magicboot">magicboot (Boot into new title)</span>====
{{XBDM command|text=magicboot title=STRING debug}}
Boots into another title, specified by the path to XBE in <code>title</code>.
If the optional <code>debug</code> is provided, XBDM will remain loaded while the title is running.
====<span id="cmd_memtrack">memtrack</span>====
====<span id="cmd_mkdir">mkdir</span> (Create directory)====
====<span id="cmd_mmglobal">mmglobal</span>====
====<span id="cmd_modlong">modlong</span>====
====<span id="cmd_modsections">modsections</span>====
====<span id="cmd_modules">modules</span>====
====<span id="cmd_nostopon">nostopon</span>====
====<span id="cmd_notify">notify</span>====
====<span id="cmd_notifyat">notifyat</span>====
====<span id="cmd_pbsnap">pbsnap</span>====
====<span id="cmd_pclist">pclist</span> (List performance counters)====
====<span id="cmd_pdbinfo">pdbinfo</span>====
====<span id="cmd_pssnap">pssnap</span>====
====<span id="cmd_querypc">querypc</span> (Query performance counter)====
====<span id="cmd_reboot">reboot</span>====
====<span id="cmd_rename">rename</span> (Rename file)====
====<span id="cmd_resume">resume</span>====
====<span id="cmd_screenshot">screenshot</span> (Take screenshot)====
====<span id="cmd_sendfile">sendfile</span> (Upload file)====
====<span id="cmd_servname">servname</span>====
====<span id="cmd_setconfig">setconfig</span>====
====<span id="cmd_setcontext">setcontext</span> (Set thread context)====
====<span id="cmd_setfileattributes">setfileattributes</span> (Set file attributes)====
====<span id="cmd_setsystime">setsystime</span> (Set system time)====
====<span id="cmd_setuserpriv">setuserpriv</span> (Set user's privilege level)====
====<span id="cmd_signcontent">signcontent</span>====
====<span id="cmd_stop">stop</span>====
====<span id="cmd_stopon">stopon</span>====
====<span id="cmd_suspend">suspend</span>====
====<span id="cmd_sysfileupd">sysfileupd</span> (Update system file)====
====<span id="cmd_systime">systime</span> (Get system time)====
====<span id="cmd_threadinfo">threadinfo</span> (Get thread information)====
====<span id="cmd_threads">threads</span> (List threads)====
====<span id="cmd_title">title</span>====
====<span id="cmd_user">user</span>====
====<span id="cmd_userlist">userlist</span> (List users)====
====<span id="cmd_vssnap">vssnap</span>====
====<span id="cmd_walkmem">walkmem</span>====
====<span id="cmd_writefile">writefile</span>====
====<span id="cmd_xbeinfo">xbeinfo</span>====
====<span id="cmd_xtlinfo">xtlinfo</span>====
==See Also==
* [[Xbox Neighborhood]] – An XDK tool that utilizes the XBDM protocols
==External Links==
* [https://github.com/Ernegien/ViridiX ViridiX] – An open-source collection of Xbox debugging libraries and tools written in C#.
* [https://github.com/docbrown/xbdm-rs xbdm-rs] - An open-source XBDM client written in Rust.
2712f0478dccacce61b5e09edf8358d2e76b92f5
Xbox Live
0
3693
6697
6551
2019-03-04T17:19:44Z
Wayo
2479
wikitext
text/x-wiki
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Matchmaking servers ===
=== Game servers ===
=== XDK Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon. It will return XONLINETASK_S_RUNNING while the login process has not been completed.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|Will return XONLINE_S_LOGON_CONNECTION_ESTABLISHED when the task is successfully completed. Otherwise it will return an error code.
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|}
6af4f3d4c6854877eab51c604e3060cb767cd1bf
MCPX
0
3671
6698
6534
2019-03-10T15:04:17Z
Espes
2484
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers [https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
== ROM ==
The MCPX is home to the secret [[MCPX ROM]].
== Pin L21: PC Speaker ==
The MCPX has PC Speaker pin which can be controlled using [https://wiki.osdev.org/PC_Speaker the standard PC Speaker interface].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin and to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
<gallery mode="slideshow">
Image:XboxWithPcSpkr.jpg|'' ''
Image:XboxPcSpkrTrace.jpg|'' ''
Image:XboxPcSpkrSolderPoints.jpg|'' ''
</gallery>
== See Also ==
[[NForce]]
[http://siliconpr0n.org/archive/doku.php?id=azonenberg:nvidia:mcpx Die Inspection]
c6639c606e3bfe88809afbe337763c1e31e15874
MCPX
0
3671
6699
6698
2019-03-10T15:07:58Z
Espes
2484
/* See Also */
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers [https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
== ROM ==
The MCPX is home to the secret [[MCPX ROM]].
== Pin L21: PC Speaker ==
The MCPX has PC Speaker pin which can be controlled using [https://wiki.osdev.org/PC_Speaker the standard PC Speaker interface].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin and to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
<gallery mode="slideshow">
Image:XboxWithPcSpkr.jpg|'' ''
Image:XboxPcSpkrTrace.jpg|'' ''
Image:XboxPcSpkrSolderPoints.jpg|'' ''
</gallery>
== See Also ==
* [[NForce]]
* [http://siliconpr0n.org/archive/doku.php?id=azonenberg:nvidia:mcpx Die Inspection]
b5eed8671e1afea291641fd07f6ece21cb4c3bdd
6745
6699
2019-07-16T05:39:43Z
Redherring32
2513
/* Pin L21: PC Speaker */
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) and also the USB, PCI, IDE, etc, controllers [https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
== ROM ==
The MCPX is home to the secret [[MCPX ROM]].
== Pin L21: PC Speaker ==
The MCPX has a PC Speaker pin which can be controlled using [https://wiki.osdev.org/PC_Speaker the standard PC Speaker interface].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin in order to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
<gallery mode="slideshow">
Image:XboxWithPcSpkr.jpg|'' ''
Image:XboxPcSpkrTrace.jpg|'' ''
Image:XboxPcSpkrSolderPoints.jpg|'' ''
</gallery>
== See Also ==
* [[NForce]]
* [http://siliconpr0n.org/archive/doku.php?id=azonenberg:nvidia:mcpx Die Inspection]
52857858f37c2214e5d73fbd1dc63925c9f3f206
6746
6745
2019-07-16T05:46:10Z
Redherring32
2513
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset made by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) as well as the USB, PCI, IDE, etc, controllers [https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
== ROM ==
The MCPX is home to the secret [[MCPX ROM]].
== Pin L21: PC Speaker ==
The MCPX has a PC Speaker pin which can be controlled using [https://wiki.osdev.org/PC_Speaker the standard PC Speaker interface].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin in order to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
<gallery mode="slideshow">
Image:XboxWithPcSpkr.jpg|'' ''
Image:XboxPcSpkrTrace.jpg|'' ''
Image:XboxPcSpkrSolderPoints.jpg|'' ''
</gallery>
== See Also ==
* [[NForce]]
* [http://siliconpr0n.org/archive/doku.php?id=azonenberg:nvidia:mcpx Die Inspection]
9352b8d23913bbed9a7450859b15e8b394942c87
Network
0
3692
6700
6601
2019-03-12T00:35:18Z
JayFoxRox
2
Add links for MN740 firmware updates on MS website / wayback machine
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventually an official wireless adapter was released based of a "D-Link 108AG Gaming Adapter" in the end of 2003.
The XDK provides a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
The IANA registered port 3074 (UDP / TCP) is reserved for Xbox communications (See [[System Link]] and [[Xbox Live]]).
== Integrated network adapter ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips.
The Xbox MAC address is stored in the [[EEPROM]].
The network driver, including the protocol stack is contained in the XDK.
The kernel only contains a small number of exports to reset and get the state of the NIC.
The Xbox Linux team used the binary drivers from Nvidia{{citation needed}}{{FIXME|reason=Wasn't the open-source forcedeth driver used?}}.
==== Heartbeat ====
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Wireless adapter ==
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with a Xbox setup disc (wich would update the dashboard if necessary).
It was also [https://web.archive.org/web/20040508051958/http://www.xbox.com/en-US/live/connect/msmn740.htm described on Micosofts website].
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some Eeprom wich hold the MAC adress (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 leds are: Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what apears to be Serial testpins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
latest firmware is seperated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
There were at least 2 firmware updates for download:
* [https://web.archive.org/web/20031210155952/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_101.htm MN740 1.01]
* [https://web.archive.org/web/20040602231929/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_102.htm MN740 1.02]
Judging by the firmware filenames above, there should also be a MN740 1.00 and MN740 1.03.
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or webbrowser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
b2123c891b349f40198bf5c68c9981ed0f8f3c94
Xbox 360 Backward Compatibility
0
3701
6701
6361
2019-03-21T13:46:37Z
JayFoxRox
2
/* References and links */
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPRDT section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter? eax points to a zero terminated list of pointers into the kernel memory [7 elements]
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter? " [4 elements]
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter? Seems to be some call to that address?!
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter? " [3 elements]
|-
| colspan="3" | Cleaner list starts here {{FIXME}}
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x21 ||
|-
| 0x04 || 0x22 ||
|-
| 0x04 || 0x23 ||
|-
| 0x04 || 0x24 ||
|-
| 0x04 || 0x35 ||
|-
| 0x04 || 0x50 ||
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter? Memory is 0x00 filled before. location is 0x8002b420, size would be 0x3000
|-
| 0x06 || 0x02 ||
|-
| 0x06 || 0x20 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x21 ||
|-
| 0x06 || 0x22 ||
|-
| 0x06 || 0x23 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x24 ||
|-
| 0x06 || 0x25 ||
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x40 ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages (Microsoft) page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://randomascii.wordpress.com/2019/03/20/exercises-in-emulation-xbox-360s-fma-instruction/ Blog post about FMA math emulation by Bruce Dawson (Microsoft)]
* [https://www.youtube.com/watch?v=Da_ont-2AG0 Modern Vintage Gamer: Revisiting Original Xbox Backward Compatibility on the Xbox 360]
11934625d40704f877b2c0a3eab997298e9018cf
Xbox
0
3682
6702
5031
2019-04-02T11:07:14Z
Nsd0g
2512
An update detailing the xbox, still has work to do
wikitext
text/x-wiki
The Xbox is a games console developed by Microsoft and released on the 15th of November 2001. The console was designed to directly compete with Sony's PlayStation 2. In 1998http://xboxdevwiki.net/index.php?title=Talk:Xbox&action=edit&redlink=1, Kevin Bachus, Seamus Blackley, Ted Hase and Otto Berkes, disassembled some Dell laptops to create a Windows based gaming machine, dubbed the DirectXbox. The team then approached Ed Fries, the leader of Microsoft's game publishing division at the time, with their idea. Ed Fries chose to support the team's idea.
During development of the console, the team shortened the name to Xbox, which the marketing division at Microsoft not liking the idea. Focus testing showed that consumers preferred the name "Xbox" over anything else that was said during testing, so the name stuck.
The Xbox was designed with multiplayer in mind, as the console had a ethernet cable and 4 controller ports. In 2002 Microsoft released Xbox Live, a subscription service where players could pay a monthly fee to play online with other Xbox owners in games such as ''Halo'', ''Project Gotham Racing'', and ''Madden''. The service was discontinued on April 15th, 2010, where 12 players sat in a lobby of ''Halo 2'' 24/7 to keep the server running. Microsoft saluted their decision, and said that they weren't going to kick the players off. Instead they offered the players Halo: Reach beta codes. The final player, Apache N4SIR was streaming the entire thing, as the 12 players twindeled down to just him. On stream, he was wondering what he should do, and one viewer suggested playing through the campain, but not beating the final mission, as it would kick him offline, and at 11:40 PM PDT, on May 11th 2010, Apache was booted from the game. This image details the story (https://external-preview.redd.it/A6pf_qIL-DN--q3jRIvcRvklICQp-qk3zJjwogSGTzY.jpg?width=960&crop=smart&auto=webp&s=e5c0b2fa5f8f7b5fdbec96cd26d015177e399542)
Emulation for the original xbox exists, as there are 3 emulators for it, XQEMU, Cxbx-r and an emulator that Strider3X is developing
ef168e25d658e4dbb2adf9d89a22bfa0a6e7a233
6704
6702
2019-04-05T11:32:23Z
JayFoxRox
2
Data was duplicated from Wikipedia; please contribute to that instead, and just link it
wikitext
text/x-wiki
The Xbox is a games console developed by Microsoft and released on the 15th of November 2001.
=== Links ===
* [[wikipedia:Xbox (console)|Wikipedia article]]
3aaa76c3921f0a5fb9ddc583e8661c88bf98065b
Xbox Live
0
3693
6703
6697
2019-04-05T11:27:39Z
JayFoxRox
2
Move content by Nsd0g (and focus on factual and important aspects)
wikitext
text/x-wiki
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of authentication servers, matchmaking servers, and game servers.
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customizations for the Xbox.
Kerberos Authentication Server: macs.xboxlive.com
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Matchmaking servers ===
=== Game servers ===
=== XDK Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon. It will return XONLINETASK_S_RUNNING while the login process has not been completed.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|Will return XONLINE_S_LOGON_CONNECTION_ESTABLISHED when the task is successfully completed. Otherwise it will return an error code.
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|}
== Discontinuation of service ==
The service was officially discontinued on April 15th, 2010.
12 players decided to stay in a lobby of ''Halo 2'' 24/7 to keep a server running.
The final player, Apache N4SIR was streaming the entire event, as the player count of 12 twindeled down to just him. At 11:40 PM PDT, on May 11th 2010, Apache N4SIR was booted from the game[http://i.imgur.com/oQw6k5H.jpg].
dbc5bae6117ff70e7e60fe0a95cda2e457921119
Power Supply
0
3818
6705
6360
2019-04-05T16:55:39Z
DiscoStarslayer
2509
Put power + current rating for PSU into tables for easier reading. Confirmed pinout on 1.1 + 1.3 xbox, cleaned up pinout layout to more closely match the actual connector. Added speculative pinout for 1.6
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 & 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3.3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 to 1.5 ===
The connector for the 1.2 -> 1.5 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 1 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || +12V || Pin 1 || +5V
|-
| Pin 2 || None || Pin 2 || +5V
|-
| Pin 3 || +5V || Pin 3 || +5V
|-
| Pin 4 || GND || Pin 4 || None
|-
| Pin 5 || +3.3V Standby || Pin 5 || GND
|-
| Pin 6 || GND || Pin 4 || None
|-
| Pin 7 || None || Pin 7 || +3.3V
|-
| Pin 8 || +3.3V || Pin 8 || None
|-
| Pin 9 || GND || Pin 9 || GND
|-
| Pin 10 || PowON || Pin 11 || PowOK
|}
=== Xbox 1.6+ ===
The connector for the 1.6+ Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2 -> 1.5 xbox, with a different pinout. {{citation needed|reason=Need to validate this pinout on an actual machine, I don't have one to test.}}
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || +12V || Pin 1 || +5V
|-
| Pin 2 || GND || Pin 2 || +5V
|-
| Pin 3 || +5V || Pin 3 || +5V
|-
| Pin 4 || GND || Pin 4 || GND
|-
| Pin 5 || +5V Standby {{citation needed}} || Pin 5 || GND
|-
| Pin 6 || GND || Pin 4 || GND
|-
| Pin 7 || None || Pin 7 || None {{citation needed}}
|-
| Pin 8 || None {{citation needed}} || Pin 8 || None
|-
| Pin 9 || GND || Pin 9 || GND
|-
| Pin 10 || PowON || Pin 11 || PowOK
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
32760edbd0f465674b2ed2067f1e4886cf8736b6
6706
6705
2019-04-05T17:10:12Z
DiscoStarslayer
2509
Remove ->
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 & 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3.3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2 to 1.5 ===
The connector for the 1.2 to 1.5 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 1 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || +12V || Pin 1 || +5V
|-
| Pin 2 || None || Pin 2 || +5V
|-
| Pin 3 || +5V || Pin 3 || +5V
|-
| Pin 4 || GND || Pin 4 || None
|-
| Pin 5 || +3.3V Standby || Pin 5 || GND
|-
| Pin 6 || GND || Pin 4 || None
|-
| Pin 7 || None || Pin 7 || +3.3V
|-
| Pin 8 || +3.3V || Pin 8 || None
|-
| Pin 9 || GND || Pin 9 || GND
|-
| Pin 10 || PowON || Pin 11 || PowOK
|}
=== Xbox 1.6+ ===
The connector for the 1.6+ Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2 to 1.5 xbox, with a different pinout. {{citation needed|reason=Need to validate this pinout on an actual machine, I don't have one to test.}}
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || +12V || Pin 1 || +5V
|-
| Pin 2 || GND || Pin 2 || +5V
|-
| Pin 3 || +5V || Pin 3 || +5V
|-
| Pin 4 || GND || Pin 4 || GND
|-
| Pin 5 || +5V Standby {{citation needed}} || Pin 5 || GND
|-
| Pin 6 || GND || Pin 4 || GND
|-
| Pin 7 || None || Pin 7 || None {{citation needed}}
|-
| Pin 8 || None {{citation needed}} || Pin 8 || None
|-
| Pin 9 || GND || Pin 9 || GND
|-
| Pin 10 || PowON || Pin 11 || PowOK
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
42cb9c02a9678d015dcbe2240bed41876c788ebd
6707
6706
2019-04-05T17:14:05Z
DiscoStarslayer
2509
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3.3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 1 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || +12V || Pin 1 || +5V
|-
| Pin 2 || None || Pin 2 || +5V
|-
| Pin 3 || +5V || Pin 3 || +5V
|-
| Pin 4 || GND || Pin 4 || None
|-
| Pin 5 || +3.3V Standby || Pin 5 || GND
|-
| Pin 6 || GND || Pin 4 || None
|-
| Pin 7 || None || Pin 7 || +3.3V
|-
| Pin 8 || +3.3V || Pin 8 || None
|-
| Pin 9 || GND || Pin 9 || GND
|-
| Pin 10 || PowON || Pin 11 || PowOK
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout. {{citation needed|reason=Need to validate this pinout on an actual machine, I don't have one to test.}}
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || +12V || Pin 1 || +5V
|-
| Pin 2 || GND || Pin 2 || +5V
|-
| Pin 3 || +5V || Pin 3 || +5V
|-
| Pin 4 || GND || Pin 4 || GND
|-
| Pin 5 || +5V Standby {{citation needed}} || Pin 5 || GND
|-
| Pin 6 || GND || Pin 4 || GND
|-
| Pin 7 || None || Pin 7 || None {{citation needed}}
|-
| Pin 8 || None {{citation needed}} || Pin 8 || None
|-
| Pin 9 || GND || Pin 9 || GND
|-
| Pin 10 || PowON || Pin 11 || PowOK
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
0e33c610250f0e15268da7aed60d6f47f7197b23
6708
6707
2019-04-05T17:15:19Z
DiscoStarslayer
2509
/* Xbox 1.2, 1.3, 1.4, and 1.5 */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || +12V
|-
| Pin 2 || +5V
|-
| Pin 3 || +5V
|-
| Pin 4 || +5V
|-
| Pin 5 || +3.3V
|-
| Pin 6 || +3.3V Standby
|-
| Pin 7 || GND
|-
| Pin 8 || GND
|-
| Pin 9 || GND
|-
| Pin 10 || GND
|-
| Pin 11 || POWON
|-
| Pin 12 || POWOK
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || +12V || Pin 1 || +5V
|-
| Pin 2 || None || Pin 2 || +5V
|-
| Pin 3 || +5V || Pin 3 || +5V
|-
| Pin 4 || GND || Pin 4 || None
|-
| Pin 5 || +3.3V Standby || Pin 5 || GND
|-
| Pin 6 || GND || Pin 4 || None
|-
| Pin 7 || None || Pin 7 || +3.3V
|-
| Pin 8 || +3.3V || Pin 8 || None
|-
| Pin 9 || GND || Pin 9 || GND
|-
| Pin 10 || PowON || Pin 11 || PowOK
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout. {{citation needed|reason=Need to validate this pinout on an actual machine, I don't have one to test.}}
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || +12V || Pin 1 || +5V
|-
| Pin 2 || GND || Pin 2 || +5V
|-
| Pin 3 || +5V || Pin 3 || +5V
|-
| Pin 4 || GND || Pin 4 || GND
|-
| Pin 5 || +5V Standby {{citation needed}} || Pin 5 || GND
|-
| Pin 6 || GND || Pin 4 || GND
|-
| Pin 7 || None || Pin 7 || None {{citation needed}}
|-
| Pin 8 || None {{citation needed}} || Pin 8 || None
|-
| Pin 9 || GND || Pin 9 || GND
|-
| Pin 10 || PowON || Pin 11 || PowOK
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
a3038f31e277619a01a5c88cbbaca5d00a92a080
6709
6708
2019-04-05T19:38:51Z
DiscoStarslayer
2509
Had the pinout up-side down. Fixed the pin layout
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || POWOK
|-
| Pin 2 || POWON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout. {{citation needed|reason=Need to validate this pinout on an actual machine, I don't have one to test.}}
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None {{citation needed}}
|-
| Pin 4 || None {{citation needed}} || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V Standby {{citation needed}}
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || GND
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
7854736ee6abc9d32f9997b5b7c90a11f031a844
6710
6709
2019-04-05T19:49:19Z
DiscoStarslayer
2509
Update 1.6 xbox voltages as confirmed by xbox7887
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || POWOK
|-
| Pin 2 || POWON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK (3.3V Standby) || Pin 1 || PowON (3.3V)
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None
|-
| Pin 4 || None || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V (0.12V Standby)
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V Standby || Pin 8 || +5V Standby
|-
| Pin 9 || +5V Standby || Pin 9 || GND
|-
| Pin 10 || +5V Standby || Pin 10 || +12V (0.532V Standby)
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
bf8dfee86bf3acfe9ffa195913dfacdd21d3e4f6
6711
6710
2019-04-05T20:03:54Z
DiscoStarslayer
2509
Consistent casing
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || PowOK
|-
| Pin 2 || PowON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK (3.3V Standby) || Pin 1 || PowON (3.3V)
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None
|-
| Pin 4 || None || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V (0.12V Standby)
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V Standby || Pin 8 || +5V Standby
|-
| Pin 9 || +5V Standby || Pin 9 || GND
|-
| Pin 10 || +5V Standby || Pin 10 || +12V (0.532V Standby)
|}
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
5af11e6a287f560e645b3bcde7ad932a4d7a8bd2
Patents
0
3824
6712
5939
2019-04-08T03:31:31Z
Redherring32
2513
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by Nvidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by Nvidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452534 "Portion of an electronic housing" (not a dupe, its the top X shape in detail)
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2003-05-09 by Microsoft: https://www.google.com/patents/US8493326 "Controller with removably attachable text input device" (an early keypad, later revered to by the 360 keypad patent)
* Filed 0023-05-09 by Micorsoft: https://www.google.com/patents/US7116311 "Embedded text input " (reffered to by the 360 chatpad)
* Filed 2006-07-03 by Micorsoft: https://www.google.com/patents/US7804484 "Embedded text input " (probably a corrected version of US7116311, reffered to by the 360 chatpad, a picture of the "Baretta" chatpad, https://assemblergames.com/threads/xbox-chatpad-unreleased.54523/
* Filed 2001-06-19 by Nvidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions "NV2A")
* Filed 2003-08-21 by Friendtech: https://www.google.com/patents/US20050282621 "CPU upgrading adapter for a Microsoft XboxTM game machine"
* Filed 2005-01-04 by Nvidia: https://www.google.com/patents/US7916149 "Block linear memory ordering of texture data"
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
* Filed 2005-05-17 by Nvidia: https://www.google.com/patents/US7793029 "Translation device apparatus for configuring printed circuit board connectors " (describes coupling two PCI Express connectors, possibly for the secondary Chihiro board, mentions "Xbox")
* Filed 2001-04-30 by Microsoft: https://www.google.com/patents/US20020160654 "Breakaway cable connector" (filed by Microsofts attorneys)
* Filed 2004-22-02 by Microsoft: https://patents.google.com/patent/US7303476 "Method and apparatus for creating and playing soundtracks in a gaming system"
* Filed 2002-05-16 by Microsoft: https://patents.google.com/patent/US6935959 "Use of multiple player real-time voice communications on a gaming device"
* Filed 2001-03-09 by Microsoft: https://patents.google.com/patent/US7218739B2 "Multiple user authentication for online console-based gaming"
* Filed 2005-03-09 by Microsoft: https://patents.google.com/patent/US7811174B2 "Method and apparatus for managing data in a gaming system"
Possibly unrelated :
* Filed 1989-12-29 by Dolby Laboratories: https://www.google.com/patents/US5109417 "Low bit rate transform coder, decoder, and encoder/decoder for high-quality audio"
* Filed 2008-01-15 by Microsoft: https://www.google.com/patents/US8607324 "Untrusted gaming system access to online gaming service" (describes part of Xbox online)
* Filed 2011-06-17 by Microsoft: https://www.google.com/patents/US8641525 "Controller for video game console" (one of the 51 patents comprising the Xbox One controller)
* Filed 2011-09-07 by Microsoft: https://www.google.com/patents/US8597125 "System and method for configuring game data about players"
* Filed 2012-01-13 by Microsoft: https://www.google.com/patents/US8602897 "Extended and editable gamer profile"
* Filed 2007-12-07 by Microsoft: https://www.google.com/patents/US8487876 "Ergonomic hand-held text input device " (The xbox 360 chatpad, wich mentions the OG textpad US8493326 and US7116311 ;) )
085ff71d68fd34fadb151a693b0d2230990b5bb8
Exploits
0
3751
6713
6538
2019-04-22T05:55:37Z
JayFoxRox
2
Fix typo
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
b1b5710e0ed922a819af50b3b9d869b3b194dc07
Kernel/NtSetInformationFile
0
3982
6714
2019-04-30T02:17:40Z
JayFoxRox
2
Created page with "=== Supported information classes === * FATX: FileBasicInformation, FileRenameInformation, FileDispositionInformation, FilePositionInformation, FileAllocationInformation, Fil..."
wikitext
text/x-wiki
=== Supported information classes ===
* FATX: FileBasicInformation, FileRenameInformation, FileDispositionInformation, FilePositionInformation, FileAllocationInformation, FileEndOfFileInformation
* Xbox DVD: FilePositionInformation
* UDF: FilePositionInformation
* Raw access: FilePositionInformation
26aa38bbdd803691088ea8dfc842ec016be1fecf
Kernel/NtQueryInformationFile
0
3983
6715
2019-04-30T02:17:48Z
JayFoxRox
2
Created page with "=== Supported information classes === * FATX: FileInternalInformation, FilePositionInformation, FileNetworkOpenInformation * Xbox DVD: FileInternalInformation, FilePositionIn..."
wikitext
text/x-wiki
=== Supported information classes ===
* FATX: FileInternalInformation, FilePositionInformation, FileNetworkOpenInformation
* Xbox DVD: FileInternalInformation, FilePositionInformation, FileNetworkOpenInformation
* UDF: FileInternalInformation, FilePositionInformation, FileNetworkOpenInformation
* Raw access: FilePositionInformation
485a89439bf0cfe072c165be1444b8f110bcb076
EEPROM
0
3742
6716
6588
2019-05-05T18:53:23Z
JayFoxRox
2
Make read checksum code more readable
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe & Australia
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set) 1 byte at offset 0x90 data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Language !! EEPROM Value @ 0x90
|-
| English
| 0x01
|-
| Japanese
| 0x02
|-
| German
| 0x03
|-
| French
| 0x04
|-
| Spanish
| 0x05
|-
| Italian
| 0x06
|-
| Korean
| 0x07
|-
| Chinese
| 0x08
|-
| Portuguese
| 0x09
|}
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Thanks! */
void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen+4);
int pos=0;
memset(crc,0x00,4);
memset(CRC_Data,0x00, dataLen+4);
//Circle shift input data one byte right
memcpy(CRC_Data + 0x01 , data, dataLen-1);
memcpy(CRC_Data, data + dataLen-1, 0x01);
for (pos=0; pos<4; ++pos) {
unsigned short CRCPosVal = 0xFFFF;
unsigned long l;
for (l=pos; l<dataLen; l+=4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[pos] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
e4495144a3ce6ae500d607da7445a343208b117d
6717
6716
2019-05-05T19:01:50Z
JayFoxRox
2
Make checksum code more readable
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x01 = North America
* 0x02 = Japan
* 0x04 = Europe & Australia
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set) 1 byte at offset 0x90 data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Language !! EEPROM Value @ 0x90
|-
| English
| 0x01
|-
| Japanese
| 0x02
|-
| German
| 0x03
|-
| French
| 0x04
|-
| Spanish
| 0x05
|-
| Italian
| 0x06
|-
| Korean
| 0x07
|-
| Chinese
| 0x08
|-
| Portuguese
| 0x09
|}
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating) 1 byte at offset 0x9C data 4-byte aligned adds the 3 remaining bytes of 0x00
{| class="wikitable"
! Xbox Game Rating !! EEPROM Value @ 0x9C
|-
| (RP) Rating Pending (Max)
| 0x00
|-
| (AO) Adults Only
| 0x01
|-
| (M) Mature
| 0x02
|-
| (T) Teen
| 0x03
|-
| (E) Everyone
| 0x04
|-
| (K-A) Kids to Adults
| 0x05
|-
| (EC) Early Childhood
| 0x06
|}
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
Note:{{FIXME|reason=Not sure this is the proper place to describe and formatting sucks not used mediawiki that much still learning}}
* EEPROM offset 0xA0: <code>23 14 00 00</code>
* Little Endian value 0x00001423.
* The pass code is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code is only 2 bytes not 4, each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
* Data in the EEPROM is aligned to double word (4-byte) boundaries. Thus, the two extra bytes at 0xA2 and 0xA3 of 0x00.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating) only 1 byte necessary, the 3 remaining bytes for multiple of 4-byte data alignment{{FIXME|reason=Re-word alignment description. The reason for the extra 3 bytes.}}
{| class="wikitable"
! Xbox Movie Rating !! EEPROM Value @ 0xA4
|-
| 8 (Max)
| 0x00
|-
| 7 (NC-17)
| 0x01
|-
| 6 (R)
| 0x02
|-
| 5
| 0x03
|-
| 4 (PG-13)
| 0x04
|-
| 3 (PG)
| 0x05
|-
| 2
| 0x06
|-
| 1 (G)
| 0x07
|}
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this region
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
==The HMAC HDD Key==
The HMAC HDD Key is generated out of the first 48 bytes. This section has been identified clearly.
==The Region Code==
This DWORD is encrypted. It corresponds to the region code in the XBE header:
{| class="wikitable"
|-
| 0x00000001
| North America
|-
| 0x00000002
| Japan
|-
| 0x00000004
| Europe / Australia
|-
| 0x80000000
| Manufacturing plant
|}
==The MAC address==
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
==DVD Region==
This DWORD corresponds to the region code for playback of DVD movies:
{| class="wikitable"
|-
| 0x00000000
| None
|-
| 0x00000001
| Region 1
|-
| ...
| ...
|-
| 0x00000006
| Region 6
|}
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal << 8);
}
free(CRC_Data);
return *(uint32_t*)&checksum;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
a595ec2ca046716430d587e366c145992d621b59
6718
6717
2019-05-05T19:28:09Z
JayFoxRox
2
Refactor
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x??=Normal{{FIXME}}
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC HDD Key ==
The HMAC HDD Key is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal << 8);
}
free(CRC_Data);
return *(uint32_t*)&checksum;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
e1fc65edd01fd1cef4751574ec2459c152ec1f84
6728
6718
2019-06-12T07:00:09Z
Dracc
2502
Video settings "Normal" confirmed
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
Offset 0x96:
* 0x00=Normal
* 0xB0=Widescreen
* 0xB4=Letterbox
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC HDD Key ==
The HMAC HDD Key is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal << 8);
}
free(CRC_Data);
return *(uint32_t*)&checksum;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
df31b55543b0b91423bbaa7e0f1a758304b930f3
6729
6728
2019-06-12T09:31:57Z
JayFoxRox
2
Add video setting information by LukeUsher and wutno
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
* 0x00080000 = 480p
* 0x00020000 = 720p
* 0x00040000 = 1080i
* 0x00010000 = Widescreen{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00100000 = Letterbox{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00400000 = 60Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
* 0x00800000 = 50Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
|-
| 0x98
| 0x9B
| Audio Settings
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC HDD Key ==
The HMAC HDD Key is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal << 8);
}
free(CRC_Data);
return *(uint32_t*)&checksum;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
2a3d8535d770087a5804b44bfa361a409c43ca6c
6730
6729
2019-06-12T16:06:33Z
Dracc
2502
Add Audio settings as described by LukeUsher
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
* 0x00080000 = 480p
* 0x00020000 = 720p
* 0x00040000 = 1080i
* 0x00010000 = Widescreen{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00100000 = Letterbox{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00400000 = 60Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
* 0x00800000 = 50Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
|-
| 0x98
| 0x9B
| Audio Settings
* Channels
* 0x00000000 = Stereo
* 0x00000001 = Mono
* 0x00000002 = Surround
* Flags
* 0x00010000 = Enable AC3
* 0x00020000 = Enable DTS
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC HDD Key ==
The HMAC HDD Key is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal << 8);
}
free(CRC_Data);
return *(uint32_t*)&checksum;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
cc6ffcfd7c7c7b8dfa3c42084532a70c70d6e7fb
6731
6730
2019-06-12T16:07:25Z
Dracc
2502
/* Contents */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
* 0x00080000 = 480p
* 0x00020000 = 720p
* 0x00040000 = 1080i
* 0x00010000 = Widescreen{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00100000 = Letterbox{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00400000 = 60Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
* 0x00800000 = 50Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
|-
| 0x98
| 0x9B
| Audio Settings
* 0x00000000 = Stereo
* 0x00000001 = Mono
* 0x00000002 = Surround
* 0x00010000 = Enable AC3
* 0x00020000 = Enable DTS
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC HDD Key ==
The HMAC HDD Key is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal << 8);
}
free(CRC_Data);
return *(uint32_t*)&checksum;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
98a441614344e7c452aa94e381e1a3feccd68cd7
LED
0
3984
6719
2019-05-20T21:06:36Z
JayFoxRox
2
Created page with "The communication protocol is documented at https://xboxdevwiki.net/PIC#The_LED"
wikitext
text/x-wiki
The communication protocol is documented at https://xboxdevwiki.net/PIC#The_LED
9440a6a2bed131ba2b25dfde817f884cdcadd994
6721
6719
2019-05-25T14:47:10Z
Ernegien
2491
wikitext
text/x-wiki
The communication protocol is documented at https://xboxdevwiki.net/PIC#The_LED
The Xbox's front LED is driven by the PIC16LC63A (SMC) motherboard component. Upon startup, a set of 4 time slots are reserved for it and looped in succession. The first three slots consume 180 ms (milliseconds) and the last 200 ms for a total of 740 ms per full LED cycle.
The time slot used for the first color in a cycle depends on when (specific timing TBD) the SMBus set led command was executed relative to the PIC startup, therefore we cannot easily predict which color gets the additional 20 ms via emulation at the moment; what we can assume however is each full pattern takes 740 ms and each emulated blink should take 185 ms to account for the 20 ms delay evenly dispersed throughout.
An LED cycle can be interrupted (specific timing TBD) but the currently shown color is displayed for its full time slot before honoring the new cycle request.
c891394cb861c63ea9ccf351e18c39b7aa43d400
6722
6721
2019-05-25T15:02:03Z
Ernegien
2491
wikitext
text/x-wiki
The communication protocol is documented at https://xboxdevwiki.net/PIC#The_LED
The Xbox's front LED is driven by the PIC16LC63A (SMC) motherboard component. Upon startup, a set of 4 time slots are reserved for it and looped in succession. The first three slots consume 180 ms (milliseconds) and the last 200 ms for a total of 740 ms per full LED cycle.
The time slot used for the first color in a cycle depends on when (specific timing TBD) the SMBus set led command was executed relative to the PIC startup, therefore we cannot easily predict which color gets the additional 20 ms via emulation at the moment; what we can assume however is each full cycle takes 740 ms.
An LED cycle can be interrupted (specific timing TBD) but the currently shown color is displayed for its full time slot before honoring the new cycle request.
b78003d877796974b58e5bbed93986e596323fed
Talk:Xbox Game Disc
1
3895
6720
6231
2019-05-24T16:51:56Z
JayFoxRox
2
Just bricked a TS-H352A kreon candidate; leaving notes
wikitext
text/x-wiki
== Drive with modded firmwares ==
There seems to be some overlap / similarities in the following devices:
* https://fccid.io/TSS-TS-H353 = TS-H353, TS-H353A, SH-D163, SH-D163A, SD-M2013, SH-D163B
* https://fccid.io/E-H023-00-4752 = SD-616, TS-H352, TS-H352A, SD-M1912, SH-D162, SH-D162C, SD-M2012, TS-H943
Noteworthy that TS-H943 is the 360 Drive! It has (i)Xtreme and 0800 available.
Most other drives have been confirmed to work with Kreons firmware. We should figure out which of those drives are supported by the same firmware even.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 04:09, 16 September 2017 (PDT)
Update about TS-H352A:
I tried flashing my TS-H352A with a modified SH-D162C_TS05_KREON_V100.bin firmware (by only changing the footer of the file, to match the drive model). I flashed using sfdnwin.exe on Windows 10, while debugging the flasher code through IDA Pro, and stepping through each DeviceIoControl call (so flashing was slow).
The drive stopped working after that (no response, no LED, no motors = dead) - I got the impression it just heats up now.
I might attempt to recover the drive by replacing the on-board flash; the original revision was firmare TS03.
For comparisons with other drive; the following main-components (on drive PCB):
- MT1358E
- BD7909FS: motor driver
- EliteMT M11B416256A: 256 K x 16 DRAM EDO PAGE MODE
- SST 39SF020A: 2 Mbit (x8) Multi-Purpose Flash (sticker: "TS03\nCAA1")
The update image size is exactly 256kiB, so it's probably on flash with no changes.
The firmware image looks very similar to the mentioned kreon SH-162C, so it was worth a try.
The firmware image of SH-162D looked much different.
If I were to try this again, I'd probably start by diffing kreon against it's original firmware, and trying to apply the same patches to the TS-H352A.
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 09:51, 24 May 2019 (PDT)
d9c1275053bd0e41338fb356c2203ecac97e012b
Xbox Input Devices
0
11
6723
6694
2019-06-05T13:45:29Z
JayFoxRox
2
`lsusb -vvv` descriptor by Duck (via XboxDev Discord)
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x03{{FIXME|reason=WTF?! Might be bad?}}
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
7c9013b120b516cd86e519595c8cc4409ebf5bf8
Config Sector
0
3985
6724
2019-06-11T12:16:55Z
Dracc
2502
Created page with "{| class="wikitable" !Offset !Size !Description |- |0x1020 |4 |Static IP Address |- |0x1024 |4 |Static Subnet Mask |- |0x1028 |4 |Static Default Gateway |- |0x102C |4 |Static..."
wikitext
text/x-wiki
{| class="wikitable"
!Offset
!Size
!Description
|-
|0x1020
|4
|Static IP Address
|-
|0x1024
|4
|Static Subnet Mask
|-
|0x1028
|4
|Static Default Gateway
|-
|0x102C
|4
|Static Primary DNS Server
|-
|0x1030
|4
|Static Secondary DNS Server
|-
|0x1034
|32
!(Unknown padding)
|-
|0x1054
|4
|Xbox Live IP Address
|-
|0x1058
|4
|Xbox Live Subnet Mask
|-
|0x105C
|4
|Xbox Live Default Gateway
|-
|0x1060
|4
|Xbox Live Primary DNS Server
|-
|0x1064
|4
|Xbox Live Secondary DNS Server
|-
|0x1068
|40
|Xbox Live Hostname
|-
|0x1090
|64
|Xbox Live PPPOE Username
|-
|0x10D0
|64
|Xbox Live PPPOE Password
|-
|0x1110
|40
!(Unknown padding)
|-
|0x1138
|40
|Xbox Live PPPOE Service Name
|-
|0x1160
|12
!(Unknown)
|-
|0x116C
|4
|DHCP IP Address
|-
|0x1170
|4
|DHCP Subnet Mask
|-
|0x1174
|4
|DHCP Default Gateway
|-
|0x1178
|4
|DHCP Primary DNS Server
|-
|0x117C
|4
|DHCP Secondary DNS Server
|-
|0x1180
|4
|PPPOE IP Address (?)
|-
|0x1184
|4
|PPPOE Subnet Mask (?)
|-
|0x1188
|4
|PPPOE Gateway Address (?)
|-
|0x118C
|4
|PPPOE Primary DNS Server (?)
|-
|0x1190
|4
|PPPOE Secondary DNS Server (?)
|}
==References==
* [https://archive.fo/c9s3B Xbox live (accounts, xqemu and MU) | ASSEMbler - Home of the obscure (archive.org)]
2360a37524188d33625fdb0155583db538fccc31
6732
6724
2019-06-12T18:32:13Z
Dracc
2502
Updated reference link to a working one
wikitext
text/x-wiki
{| class="wikitable"
!Offset
!Size
!Description
|-
|0x1020
|4
|Static IP Address
|-
|0x1024
|4
|Static Subnet Mask
|-
|0x1028
|4
|Static Default Gateway
|-
|0x102C
|4
|Static Primary DNS Server
|-
|0x1030
|4
|Static Secondary DNS Server
|-
|0x1034
|32
!(Unknown padding)
|-
|0x1054
|4
|Xbox Live IP Address
|-
|0x1058
|4
|Xbox Live Subnet Mask
|-
|0x105C
|4
|Xbox Live Default Gateway
|-
|0x1060
|4
|Xbox Live Primary DNS Server
|-
|0x1064
|4
|Xbox Live Secondary DNS Server
|-
|0x1068
|40
|Xbox Live Hostname
|-
|0x1090
|64
|Xbox Live PPPOE Username
|-
|0x10D0
|64
|Xbox Live PPPOE Password
|-
|0x1110
|40
!(Unknown padding)
|-
|0x1138
|40
|Xbox Live PPPOE Service Name
|-
|0x1160
|12
!(Unknown)
|-
|0x116C
|4
|DHCP IP Address
|-
|0x1170
|4
|DHCP Subnet Mask
|-
|0x1174
|4
|DHCP Default Gateway
|-
|0x1178
|4
|DHCP Primary DNS Server
|-
|0x117C
|4
|DHCP Secondary DNS Server
|-
|0x1180
|4
|PPPOE IP Address (?)
|-
|0x1184
|4
|PPPOE Subnet Mask (?)
|-
|0x1188
|4
|PPPOE Gateway Address (?)
|-
|0x118C
|4
|PPPOE Primary DNS Server (?)
|-
|0x1190
|4
|PPPOE Secondary DNS Server (?)
|}
==References==
* [https://web.archive.org/web/20190604222002/https://assemblergames.com/threads/xbox-live-accounts-xqemu-and-mu.60352/ Xbox live (accounts, xqemu and MU) | ASSEMbler - Home of the obscure (archive.org)]
af46118575e968d97d2d02c5efdb3804bcf62263
Main Page
0
1
6725
6623
2019-06-11T12:18:11Z
Dracc
2502
Added Config Sector to the listing
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug| Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
4591d0ae522e29d2967fe0c3b123ea3a47c37231
Xbox Hard Disk Partitioning
0
3782
6726
5624
2019-06-11T16:30:04Z
JayFoxRox
2
Add our own article
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Hard_Disk_Partitioning|ours=Hard Drive}}
by ''Michael Steil'' (original version: 8 May 2002)
The Xbox uses a hard disk partitioning scheme that is hardwired into the kernel. The hard disk consists of a header, 3 game cache partitions, a system partition and a data partition:
{| class="wikitable"
|-
! Offset
! Size
! Description
|-
| 0 MB<br /><code>0x00000000</code>
| 0.5 MB
| '''Disk Config Area''' <br />This partition contains no filesystem. Various configuration data is stored on fixed offsets.<br />Linux device: <code>none</code>
|-
| 0.5 MB<br /><code>0x00000400</code>
| 750 MB
| '''Game Cache A''' (Drive X:)<br />FATX volume containing temporary data of a game for faster access.<br />Linux device: <code>/dev/hda52</code>
|-
| 750.5 MB<br /><code>0x00177400</code>
| 750 MB
| '''Game Cache B''' (Drive Y:)<br />Linux device: <code>/dev/hda53</code>
|-
| 1500.5 MB<br /><code>0x002EE400</code>
| 750 MB
| '''Game Cache C''' (Drive Z:)<br />Linux device: <code>/dev/hda54</code>
|-
| 2250.5 MB<br /><code>0x00465400</code>
| 500 MB
| '''System Files''' (Drive C:)<br />FATX volume containing menu code, graphics, sound, DVD player, music import, ...<br />Linux device: <code>/dev/hda51</code>
|-
| 2750.5 MB<br /><code>0x0055F400</code>
| 4895 MB
| '''Data''' (Drive E:)<br />FATX volume containing saved games and imported CD audio tracks.<br />Linux device: <code>/dev/hda50</code>
|-
!
!
! '''Non-Standard partitions on disks >8GB'''
|-
| 7645.5 MB<br /><code>0x00EE8AB0</code>
| 1896 MB<br />- 130 GB
| '''Unused/Additional''' (Drive F:)<br />The first xboxes had a 8GB disk, later versions came with a 10GB disk. This the space difference between the two and not used. Some tools allow it to be used as additional FATX filesystem<br />Linux device: <code>/dev/hda55</code> (only present if signature of formatted FATX found)<br />Linux assumes that all remaining space on the disk belongs to this partition unless another FATX filesystem is detected at the LBA28 boundary. See below.
|-
| 137 GB<br /><code>0x0FFFFFFF</code>
| remaining space
| '''LBA28''' (Drive G:)<br />If you install a very big disk some tools are limited by the LBA24 boundary. The drive G allows this space to be used in a separate drive, only accessible to LBA48 capable tools and BIOS'es.<br />Linux device: <code>/dev/hda56</code> (only present if signature of formatted FATX found at LBA24 boundary)<br />Linux assumes that all remaining space on the disk belongs to this partition.
|}
This table has been completed by Markus Baertschi with lots of stuff. There might be errors and misconceptions, caveat emptor !
{| class="wikitable"
|-
! '''Missing image'''<br />''Icon-admonition-tip.png'' <br />Tip<br /><br /> | For a more detailed description of the format and contents of the partitions see [https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Partitioning_and_Filesystem_Details Xbox Partitioning and Filesystem Details].|}
07a483b02e8c4961c4e95a8c2245e61936e178be
Hard Drive
0
3707
6727
6620
2019-06-11T16:32:58Z
JayFoxRox
2
Link Config Area and add some FIXMEs
wikitext
text/x-wiki
The original Xbox hard disk drive was 8 GB in size. Later releases, 10 GB drives; however, only the first 8 GB of the drive was used. See [[Hardware Revisions]] for more information.
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter{{FIXME|reason=This is under control of running application / variation even in official products?}}
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| N/A
| [[Config Sector|Config Area]]
| 0x00000000
| 0x00080000
| Fixed Structure
| N/A
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition3
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition4
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition5
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
| \Device\Harddisk0\Partition2
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
| \Device\Harddisk0\Partition1
|}
::::::::::::::::::::::''side note: CD/DVD Drive "D:" <=> "\Device\CdRom0"''
::::::::::::::::::::::''and usually: added Drive "F:" <=> "\Device\Harddisk0\Partition6"''{{FIXME|reason=Mark as unofficial / homebrew}}
::::::::::::::::::::::::: ''added Drive "G:" <=> "\Device\Harddisk0\Partition7"''{{FIXME|reason=Mark as unofficial / homebrew}}
'''Debug/Devkit HDD:'''
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
|-
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
* [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
901e4f34f87a6d46de298d376b4e62aec75153d4
AV Cables
0
3817
6733
6441
2019-06-23T18:06:51Z
Redherring32
2513
/* Connector */
wikitext
text/x-wiki
Microsoft has released a handful of '''Audio Video Cables''' for the [[Xbox]], which they refer to internally as '''AV Packs'''. They are connected to the port labelled "Audio Video Input/Output" on the backside of the console.
== Connector ==
{{FIXME|reason=Describe the connector here - is it a standard part? add an image, add the pinout graphics (didn't copy from elsewhere because clearly microsoft copyright)}}
=== Pinout ===
The following table gives the pinout in the way it is arranged on the '''XBOX AVIP''' cables, or '''AV Packs'''. The other end is reversed and on the console.
{| class="wikitable"
!Description
|Audio Right
|Audio Right GND
|SPDIF Digital Audio
|V-Sync (VGA Mode)
|Mode GND
|Mode GND
|Mode GND
|GND
|Variable
|9 GND
|Variable
|11 GND
|-
!Pin
!1
!2
!3
!4
!5
!6
!7
!8
!9
!10
!11
!12
|-
!Pin
!13
!14
!15
!16
!17
!18
!19
!20
!21
!22
!23
!24
|-
!Description
|Vcc
|Audio Left
|Audio Left GND
|H Sync (VGA Mode)
|Mode Select 1
|Mode Select 2
|Mode Select 3
|(+12V)
|22 GND
|Variable
|24 GND
|Variable
|}
== Supported signals / AV cables ==
Below is a table which lists all known officially '''AV cables''' released by Microsoft and their respective signal.
The constants used in the av-prefixed Kernel-functions are also listed.
{| class="wikitable"
! Pin 19 || Pin 18 || Pin 17 || SMC Constant || Region || Official Microsoft product name
! Signal || Pin 24 || Pin 22 || Pin 11 || Pin 9 || Kernel av-Constant
|-
| 0 || 0 || 0 || 0 || PAL || [https://web.archive.org/web/20040216131316/http://www.xbox.com:80/en-gb/hardware/scartcable.htm Advanced SCART Cable]
| SCART (15 kHz RGB) Stereo || V || R || G || B || AV_PACK_SCART = 3
|-
| 0 || 0 || 1 || 1 || NTSC || [https://web.archive.org/web/20040210040422/http://www.xbox.com:80/en-US/hardware/highdefinitionavpack.htm High Definition AV Pack]
| Component SPDIF || - || Pr || Y || Pb || AV_PACK_HDTV = 4
|-
| 0 || 1 || 0 || 2 || - || ''Not officially available / supported''
| VGA (31 kHz RGB) Stereo || - || R || G || B || AV_PACK_VGA = 5
|-
| 0 || 1 || 1 || 3 || NTSC / PAL || [https://web.archive.org/web/20040319001330/http://www.xbox.com:80/en-us/hardware/rfadapter.htm RF Adapter]
| RF Mono || V || C || Y || - || AV_PACK_RFU = 2
|-
| 1 || 0 || 0 || 4 || NTSC || [https://web.archive.org/web/20040319001247/http://www.xbox.com:80/en-us/hardware/advancedavpack.htm Advanced AV Pack]
| S-Video Stereo || V || C || Y || - || AV_PACK_SVIDEO = 6
|-
| 1 || 0 || 1 || 5 || - || ''Not officially available / supported''
| Unknown Mono || V || C || Y || - || AV_PACK_NONE = 0
|-
| 1 || 1 || 0 || 6 || PAL || [https://web.archive.org/web/20040216130745/http://www.xbox.com:80/en-gb/hardware/avcable.htm Standard AV Cable]
| Composite Stereo || V || C || Y || - || AV_PACK_STANDARD = 1
|-
| 1 || 1 || 1 || 7 || - || ''No cable connected''
| - || - || - || - || - || AV_PACK_NONE = 0
|}
A signal value of 0 means connection to ground (Pins 7, 6, 5), whereas a value of 1 means an open-connection{{citation needed|reason=Are these still connected to Vcc maybe?}}
The region only identifies which territory the cable was originally available / intended for. The kernel still might support other video-standards (NTSC / PAL / SECAM) using the same cable.
{{FIXME|reason=Add a list of AV cables with pictures and their supported video modes using the official kernel}}
== Related links ==
* [http://www.gamesx.com/avpinouts/xbox.htm GamesX List of signals and pinout]
* [https://assemblergames.com/attachments/xboxavippinouttr0-png.13081/ ASSEMBLERgames XBOX AV pinout]
* [http://ucon64.sourceforge.net/ucon64misc/conn.html uCON64 Connectors]
334db85ae3a554d452bb538d009c5fa6bfac87ee
DVD Emulator
0
3821
6734
6507
2019-06-23T18:18:26Z
Redherring32
2513
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding which files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and possibly potential faults that could occur.
The Hardware required for this was a Developement kit, (with the DVD emulation board) some sort of scsi cable, and an XDK-Raptor card.{{citation needed}}
The complete kit, a Raptor PCI Scsi card and Hardisk was numbered: 940-75004 Rev.01
two or more versions of the PCI scsi card are known:
* 700-75307 Rev.01
* 700-75307 Rev 03 [https://assemblergames.com/threads/sealed-xbox-raptor-card-for-xdk-dvd-emu.41763/ Assemblergames](posibly same as rev1?)
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
This wasn't the fastest way to get an executable to the Xbox for development, and is useless for Homebrew.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
[http://codeasm.com/xbox/images/dvt4/SL734877.JPG Picture]{{FIXME|reason=Contact codeasm about more pics / without watermarks}}
== Resources ==
* [https://imgur.com/a/ROMYa Images (CC0 License) by Codeasm with detailed shots of the DVD emulation board and serial board]
1a5530adb2907c2fb60c2638fa76e48aec91fc7d
NV2A/Pixel Combiner
0
8
6735
6638
2019-06-25T22:03:20Z
JayFoxRox
2
Some corrections based on https://github.com/XboxDev/nxdk/blob/master/tools/fp20compiler/ps1.0_program.cpp#L227
wikitext
text/x-wiki
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texturing modes ==
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
== References and links ==
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable fragment shading] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
988a9c0122c74f1d76a7fb28907c60d552004a29
NV2A/Surface Formats
0
10
6736
6639
2019-06-25T22:12:43Z
JayFoxRox
2
Add link to NV texture fomat list, and XQEMU links for signedness and convolution
wikitext
text/x-wiki
== Texture formats ==
* [http://download.nvidia.com/developer/OpenGL_Texture_Formats/nv_ogl_texture_formats.pdf List of implemented texture formats, according to NVIDIA]
=== Texture decoding / sampling ===
The textures are sampled by the texture shader portion of [[NV2A/Pixel_Combiner]].
==== Texture signedness ====
Each component of the texture can be either signed (two's-complement) or unsigned.[https://github.com/xqemu/xqemu/issues/75]{{FIXME|reason=Research and collect information here}}.
==== Texture filtering ====
The GPU implements the standard texture filters as known from OpenGL.
In addition, it supports convolution filters[https://github.com/xqemu/xqemu/issues/238]{{FIXME|reason=Research and collect information here}}.
== Framebuffer formats ==
[[Category:NV2A]]
ee3e1f55f663c7c6f601973ddcd9a623bc9e1d9c
6737
6736
2019-06-27T20:28:11Z
JayFoxRox
2
Dummy info about O and Z fields, and list of formats (should link to nouveau or XQEMU instead in future)
wikitext
text/x-wiki
== Texture formats ==
* [http://download.nvidia.com/developer/OpenGL_Texture_Formats/nv_ogl_texture_formats.pdf List of implemented texture formats, according to NVIDIA]
=== Texture decoding / sampling ===
The textures are sampled by the texture shader portion of [[NV2A/Pixel_Combiner]].
==== Texture signedness ====
Each component of the texture can be either signed (two's-complement) or unsigned.[https://github.com/xqemu/xqemu/issues/75]{{FIXME|reason=Research and collect information here}}.
==== Texture filtering ====
The GPU implements the standard texture filters as known from OpenGL.
In addition, it supports convolution filters[https://github.com/xqemu/xqemu/issues/238]{{FIXME|reason=Research and collect information here}}.
== Framebuffer formats ==
Surfaces are rendertargets of the GPU, they can be swizzled or linear.
Additionally, they can be optimized using tiling{{FIXME|reason=Document tiling}}.
{{FIXME|reason=Link to nouveau documentation instead; this section shouldn't be here}}
=== Color ===
Z and O stand for Zero and One respectively. These fields will always be cleared (Zero) or all bis will be set (One).
* NV097_SET_SURFACE_FORMAT_COLOR_LE_X1R5G5B5_Z1R5G5B5
* NV097_SET_SURFACE_FORMAT_COLOR_LE_X1R5G5B5_O1R5G5B5
* NV097_SET_SURFACE_FORMAT_COLOR_LE_R5G6B5
* NV097_SET_SURFACE_FORMAT_COLOR_LE_X8R8G8B8_Z8R8G8B8
* NV097_SET_SURFACE_FORMAT_COLOR_LE_X8R8G8B8_O8R8G8B8
* NV097_SET_SURFACE_FORMAT_COLOR_LE_X1A7R8G8B8_Z1A7R8G8B8
* NV097_SET_SURFACE_FORMAT_COLOR_LE_X1A7R8G8B8_O1A7R8G8B8
* NV097_SET_SURFACE_FORMAT_COLOR_LE_A8R8G8B8
* NV097_SET_SURFACE_FORMAT_COLOR_LE_B8 (not suitable for displaying)
* NV097_SET_SURFACE_FORMAT_COLOR_LE_G8B8 (not suitable for displaying)
=== Depth ===
The depth buffer can be configured to be fixed point or floating point.
Additionally, the GPU allows hardware Z-Buffer compression{{FIXME|reason=Document compression}}.
* NV097_SET_SURFACE_FORMAT_ZETA_Z16
* NV097_SET_SURFACE_FORMAT_ZETA_Z24S8
[[Category:NV2A]]
618ed67034875573e7eb2e12d45e30833de89834
Xbe
0
3706
6738
6414
2019-07-13T08:17:30Z
Wayo
2479
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Certificate ==
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data
* Signature key raw data (used to sign savefiles)
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
== Xbox Alpha executable format==
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
ef937d767e440b451ac01b807f52384f809e6fd9
6739
6738
2019-07-13T08:28:42Z
Wayo
2479
/* Certificate */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Certificate ==
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign savefiles)
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
== Xbox Alpha executable format==
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
3447526261006f952a36f51efb1271c281ab58d2
6740
6739
2019-07-13T08:31:17Z
Wayo
2479
/* Certificate */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
=== Sections ===
==== .text ====
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
==== .rdata ====
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
== Certificate ==
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
== Xbox Alpha executable format==
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
774e745f4abbd4f30417068935c4617be3fca07b
6741
6740
2019-07-13T08:46:46Z
Wayo
2479
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It always starts with the "Magic number" 0x48454258, which translates to "XBEH". Right after the header comes the digital signature for the executable. This signature is 256 bytes.
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format=
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
ced6a0a7c574fec9104dd029ecff9c122b8acbd9
6742
6741
2019-07-13T08:52:08Z
Wayo
2479
/* Certificate */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It always starts with the "Magic number" 0x48454258, which translates to "XBEH". Right after the header comes the digital signature for the executable. This signature is 256 bytes.
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format=
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
9006877691988874cc413005ddf5d1e686b16122
APU
0
3799
6743
6688
2019-07-14T01:21:03Z
Haxar
2485
Include APU audio frame duration (0.6ms / 666.6us)
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
The APU consists of 3 main components for audio-processing:
* VP: A fixed-function block, that generates 32 channel mono audio from voices; the audio is output to the GP MIXBUF.
* GP: A programmable DSP, it is intended for general-purpose audio processing (programmable audio effects for example).
* EP: A programmable DSP, it is intended for audio encoding (5.1 AC3 encoding for example).
VP and GP are connected by the MIXBUF, but GP and EP are entirely independent, and no special-purpose memory area connects them.
Therefore, the communication between the GP and EP typically happens through programmable DMA transfers (via FIFO or scratch memory).
The GP and EP are based on the same DSP architecture, run at the same clockrate, and have the same functionality (the EP has less memory, and no direct access to the MIXBUF). So, theoretically, nothing prevents the GP from doing EP tasks or vice versa{{FIXME|reason=I have not seen counter-arguments}}.
The APU does only audio-processing but no audio output. Hence, one of the DSPs typically uses programmable DMA to transfer the finished audio to system memory, where it can be read by other components (such as AC97).
All audio processing by the APU is typically done in 24bit PCM.
An APU audio frame is 32 samples long with a duration of 0.{{overline|6}}ms at 48000Hz, giving a total of 1500 frames per second.
The MIXBUF therefore holds 1024 samples (32 channels * 32 samples/channel).
=== Glossary ===
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
* SGE = Scatter Gather Entry
* SSL = Stream Segment List
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate segments of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** The best approximation I could come up with so far is: <code>255*pow(0.99988799,(DECAYRATE*16-COUNT)*4096/DECAYRATE)</code>.
** When the output level (not LVL!) reaches the sustain level the decay section is over (In my example above, this happens when the output level is less than 0.2 away from the sustain level; so if sustain is 0, the voice would switch to the sustain segment when a value below 0.2 is reached)
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this, but writes go through? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound APIs.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
[[Category:APU]]
62079465bb7b596764a46341541e33e3c3b05663
6744
6743
2019-07-14T16:08:25Z
JayFoxRox
2
The 48kHz samplerate is a key-design feature. The 32 sample length is a key-design feature. The 1500Hz (~1/0.666ms) is derived from said features.
wikitext
text/x-wiki
The [[MCPX]] contains an APU (Audio Processing Unit).
The APU consists of 3 main components for audio-processing:
* VP: A fixed-function block, that generates 32 channel mono audio from voices; the audio is output to the GP MIXBUF.
* GP: A programmable DSP, it is intended for general-purpose audio processing (programmable audio effects for example).
* EP: A programmable DSP, it is intended for audio encoding (5.1 AC3 encoding for example).
VP and GP are connected by the MIXBUF, but GP and EP are entirely independent, and no special-purpose memory area connects them.
Therefore, the communication between the GP and EP typically happens through programmable DMA transfers (via FIFO or scratch memory).
The GP and EP are based on the same DSP architecture, run at the same clockrate, and have the same functionality (the EP has less memory, and no direct access to the MIXBUF). So, theoretically, nothing prevents the GP from doing EP tasks or vice versa{{FIXME|reason=I have not seen counter-arguments}}.
The APU does only audio-processing but no audio output. Hence, one of the DSPs typically uses programmable DMA to transfer the finished audio to system memory, where it can be read by other components (such as AC97).
All audio processing by the APU is typically done in 24bit PCM at 48000Hz.
An APU audio frame is 32 samples long. Therefore, there are 1500 frames per second, with a duration of 0.{{overline|6}}ms each.
The MIXBUF holds 1024 samples (32 channels * 32 samples/channel).
=== Glossary ===
* PRD = Physical Resource Descriptor (Same thing as SGE?!)
* SGE = Scatter Gather Entry
* SSL = Stream Segment List
== Frontend Engine (FE) ==
== Voice Processor (VP) ==
A powerful voice processor. There can be up to 256 voices [http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php][https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml] and 64[http://www.nvidia.com/object/IO_20010530_6177.html] of those can be 3D.
Per-voice settings:
* Input type (8bit, 16bit, 24bit, ADPCM)
* 8 target bins, each with controllable volume for this voice
* [[wikipedia:Head-related transfer function|Head-related transfer function]] (HRTF)
* [[wikipedia:Low-frequency oscillation|Low-frequency oscillation]] (LFO)
* Pitch (~187.5 Hz to ~12285920.7 Hz)
* Optionally one of the following filters modes:
** For 2D Mono:
*** DLS2 Low-Pass
*** Parametric Equalizer
*** DLS2 Low-Pass + Parametric Equalizer
** For 2D Stereo:
*** DLS2 Low-Pass
*** Parametric Equalizer
** For 3D:
*** DLS2 Low-Pass + I3DL2 Reverb
*** Parametric Equalizer + I3DL2 Reverb
*** I3DL2 Reverb
* 2 Envelopes (DAHDSR: Delay, Attack, Hold, Decay, Sustain, Release)
** Amplitude Envelope
** Pitch / DLS2 Low-Pass Cutoff Envelope
* Tracking of certain parameters
** Volume
** LFO parameters
** DLS2 Low-Pass parameters?{{FIXME|reason=Not 100% sure, also not sure if this also works for the other filters}}
There are 32 bins which these voices will be mixed into.
=== Related APU memory ===
* VPV = VP Voices
* VPHT = VP HRTF Target
* VPHC = VP HRTF Current
* VPSGE = VP SGEs
* VPSSL = VP SSLs
=== Voice lists ===
The voices are kept in a single-linked list. There are 3 voice lists:
* 2D
* 3D
* MP (Multipass?)
=== Voice structure ===
This is 0x80 bytes
==== Pitch calculation ====
The 16 bit signed pitch value (''p'') can be converted to and from a unsigned frequency in Hz (''f'') using the following formulas:
<pre>
p = 4096 * log2(f / 48000)
f = pow2(p / 4096) * 48000
</pre>
=== LFO ===
=== Tracking ===
Some of the parameters of the VP can be controlled by setting timing parameters.
New values will then be slowly be adapted over time.
{{FIXME}}
=== Envelopes ===
There are seperate segments of the envelopes, 2 registers (CUR and COUNT) per envelope keeps track of this and control the envelopes level (LVL):
* 0: Off = Envelope is not used
* 1: Delay = Time where envelope stays at 0% until attack
** COUNT register counts down from DELAYTIME.
* 2: Attack = Rate at which the envelope goes from 0 to 100%
** COUNT register counts up to ATTACKRATE.
** LVL seems to be linear.
* 3: Hold = Time the envelope stays at 100%
** COUNT register counts down from HOLDTIME.
* 4: Decay = Rate at which the envelope goes from 100% to 0%
** COUNT register counts down from DECAYRATE.
** The LVL is not linear, it's a curve which drops steep at first and then slowly becomes level[https://docs.google.com/spreadsheets/d/1fNsfkvBfnlRQ9XplNnTgmh8jBaWJ56bvh2AVWn8B_k0/edit?usp=sharing]
** The best approximation I could come up with so far is: <code>255*pow(0.99988799,(DECAYRATE*16-COUNT)*4096/DECAYRATE)</code>.
** When the output level (not LVL!) reaches the sustain level the decay section is over (In my example above, this happens when the output level is less than 0.2 away from the sustain level; so if sustain is 0, the voice would switch to the sustain segment when a value below 0.2 is reached)
** Writes to the LVL register are ignored
** Writes to count (any value?) impact the LVL
** If the COUNT is larger than the decayrate the envelope will switch to the sustain state
** If the COUNT results in a smaller output level than the sustainlevel the envelope will switch to the sustain state
* 5: Sustain = Level at which the envelope stays while the voice is being played
** COUNT register writes are ignored, it will stay at 0
** LVL register writes are ignored, it will stay at the current sustain level
* 6: Release = Rate at which the envelope goes from current level to 0%
** Can start at any time{{FIXME|reason=the voice state PERSIST has to do with this. Voice is released using NV1BA0_PIO_VOICE_RELEASE ?}}
** COUNT register starts at RELEASERATE, regardless of the current sustain level
** COUNT register counts down{{FIXME|reason=What happens when it reaches 0? DirectSound seems to turn off voice - or is the hw doing that?}}
** LVL is not updated during this phase (it will keep it's previous value)
** Writes to LVL have an impact on the output volume
** If the COUNT register is higher than the releaserate, the output will be silent and LVL will drop to zero
** The actual output level is probably determined like: <code>int(COUNT * LVL / (RELEASERATE * 16))</code>{{FIXME|reason=Test..}}{{FIXME|reason=Unknown output shape}}
** COUNT will keep counting until 0 even after the output level has hit 0
* 7: Force Release = Unknown still{{FIXME}}
** Seems to happen during invalid conditions? Happened to me when modifying ebo during playback{{citation needed|reason=Need to find out why this happens}}
** LVL and COUNT seem to be ignored during this, but writes go through? Output level seems to stay at 100% ? (I only got repeating 32 samples during this and the whole Xbox crashed shortly after)
All durations are described using unsigned 12-bit times/rates. The level of sustain is stored unsigned in 8-bit.
The COUNT register is stored in unsigned 16-bit.
The 12-bit times/rates are multiplied by 16 when loading them into the 16-bit COUNT register.
The COUNT register counts at 1500 Hz[https://docs.google.com/spreadsheets/d/11jxeJ9aey_TVkyiMmmd6SKuow4j4GR9E9fRZ6HXc2WU/edit#gid=396423867].
A unit in the COUNT register is therefore 0.{{overline|6}} ms.
The 12-bit values of the envelope sections are given in units of 0.{{overline|6}} ms * 16 = 10.{{overline|6}} ms.
This can also be written as 512 / (48000 Hz) = 10.{{overline|6}} ms.
The maximum length of an envelope section is therefore 4095 * 10.{{overline|6}} ms = 43.68 seconds.
As the envelope counter runs at a fixed clock speed, it is independent of the voice pitch and duration.
If the Amplitude Envelope COUNT hits 0 during release, DirectSound{{FIXME|reason=Is this a hardware thing? I guess it makes sense..}} already deletes the voice, regardless of the Filter Envelope.
The sustain level can be changed during playback.
Also the attack register can be changed to a lower value while the counter is counting up, however, if the COUNTER does not compare equal to the set value, it will keep counting, even after an overflow. It will not leave the attack phase and keep counting until it sees value COUNTER / 16 in the attack register. If the attack register is set to a higher value while counting, the volume is going down again.
Also, if the attack register value is zero while counting, there won't be any audio output during the attack phase.
This indicates that the COUNT register is used to calculate the actual value from the current rates.
The initial state of each envelope can be controlled by the NV1BA0_PIO_VOICE_ON command. It can either be: DISABLE, DELAY, ATTACK or HOLD.
==== Amplitude Envelope ====
The amplitude envelope is mixed with the volume during mixing. The volume registers are not modified.
{{FIXME|reason=Is it multiplied on? Is it added? subtracted?}}
It is not yet known how many bits of the envelope state are used.
==== Filter Envelope ====
{{FIXME|reason=Research}}
The pitch scale is multiplied with the current envelope state and added to the current pitch during mixing. The pitch registers are not modified.
<pre>
f = 2^((signed_pitch+signed_pitch_mod*32*envelope_state_float)/4096)*48000 # envelope_state_float: [0, 1]
</pre>
It is not yet known how many bits of the envelope state are used.
=== Filters ===
==== DLS2 ====
Formulas from DirectSound
<pre>
FreqToHardwareCoeff(frequency): # Input in Hz
if (frequency < 30) { return 0x8000 }
if (frequency > 8000) { return 0x0000 }
FC = 2 * sin(PI * frequency / 48000)
octaves = 4096 * log2(FC)
return octaves & 0xFFFF
hardware_coefficient[0] = FreqToHardwareCoeff(frequency)
</pre>
<pre>
dBToHardwareCoeff(resonance): # Input in dB
resonance = min(resonance, 22.5)
Q = pow(10, -0.05 * resonance)
return min(0xFFFF)
hardware_coefficient[1] = dBToHardwareCoeff(resonance_in_db)
</pre>
Stuff from the DLS2 spec:{{FIXME|reason=Untested / unconfirmed. Most info comes from Merry of Citra}}
There are 2 coeffiecents per channel:
* F_c (Cutoff frequency)
* resonance
From Page 8 of "DLS 2.2 Version 1.0"[https://www.midi.org/specifications/item/dls-level-2-specification]
* b_1 = -2 * r * cos(θ)
* b_2 = r * r
* K = g * (1 + b_1 + b_2)
<pre>
y[i] = K * x[i] - b_1 * y[i-1] - b_2 * y[i-2]
</pre>
Where y[i-2] and y[i-1] are the last two frames of the output and x[i] the current input.
=== Operation ===
Voices are stored in VPV.
Input data (from the CPU) is loaded using VPSGE.
Voices are then processed and written to the GP MIXBUF.
== Global Processor (GP) ==
The GP is a DSP to do programmable audio processing on the voice bins.
The GP DSP seems to run at 160 MHz.
=== MIXBUF ===
The MIXBUF is a 0x400 word (24-Bit, stored as 32-Bit) section. It is split into 32 * 0x20 words.
Each 0x20 word block represents one of the 32 voice bins of the VP.
The 0x20 words are 24-Bit PCM mono samples to be played back at 48kHz. The duration of each frame is hence 0.{{overline|6}}ms.
=== Memory map ===
=== Related APU memory ===
* GPS = GP Scratch (?)
* GPF = GP FIFO
== Encode Processor (EP) ==
The EP is a DSP to encode the audio signal.
=== Memory map ===
=== Related APU memory ===
* EPS = EP Scratch (?)
* EPF = EP FIFO
== Usage in DirectSound ==
''This topic deserves it's own article{{FIXME}}''
The bins are used {{FIXME|reason=How?}}
DirectSound allows to load custom GP DSP code for a filter / effects chain.
{{FIXME|reaon=Will GP DSP automatically download code or is code pushed to it?}}
The GP waits for the frame interrupt which signals that MIXBUF data is available. It then goes through the filter chain.
At the end of the chain, the GP DSP will verify that the execution didn't take longer than the frame duration.
The GP will then issue 6 DMA requests to output the processed frames to a ringbuffer in scratch space.
The frameformat will be the same format as the GP MIXBUF format (also 0x20 words per channel).
Each ringbuffer is 0x200 words and therefore holds the last 16 frames.
Therefore, the ringbuffer region is 6 * 0x800 Bytes = 0x3000 Bytes in physical memory.
The order of the channels in the ringbuffer is (also DMA order):
* 0: Front Left
* 1: Center{{citation needed}}
* 2: Front Right
* 3: Rear Left{{citation needed}}
* 4: Rear Right{{citation needed}}
* 5: [[Wikipedia:Low-frequency effects|Low-frequency effects]] (LFE){{citation needed}}
The EP maps the same data to its own scratch space. It is assumed that it will DMA this region to its own internal memory.
The EP then AC3 encodes the audio data{{citation needed}} and writes it to the EP FIFO memory{{FIXME|How does this happen? DMA?}}.
{{FIXME|reason=When does this happen and what happens to stereo? headphones? mono?}}
The data is then send to the ACI AC97 using EP FIFO channels 0 (PCM) and 1 (SPDIF){{citation needed}}.
The EP code is loaded by DirectSound. The EP is not programmable using DirectSound APIs.
=== Modifications for Boot Animation ===
During the [[Boot Animation]] a different version of DirectSound is used.
The EP is disabled in this case.
The data is send to the ACI AC97 using GP FIFO channel 0 (PCM).
There is no AC3 / SPDIF during the boot animation[http://www.gamasutra.com/blogs/BrianSchmidt/20111117/90625/Designing_the_Boot_Sound_for_the_Original_Xbox.php]{{citation needed|reason=Link to brians gamasutra stuff}}.
== Related notes ==
* [[ACI]]
* [[DSP]]
* [[Xbox ADPCM]]
* [http://www.nvidia.com/object/apu.html Information at NVIDIAs website]
* [http://www.nvidia.com/attach/9004 "Technical Brief: NVIDIA nForce MCP Audio Processing Unit" by NVIDIA]
* [https://github.com/JayFoxRox/xbox-tools/blob/master/python-scripts/ Scripts to inspect APU registers and voice buffers]
* Filter information
** [https://de.mathworks.com/help/audio/examples/parametric-equalizer-design.html Something about Parametric Equalizers]
** [https://github.com/kcat/openal-soft/blob/master/Alc/effects/reverb.c Mentions I3DL2 Reverb]
** [https://www.midi.org/specifications/item/dls-level-2-specification DLS2 low-pass filter with resonance and dynamic filter cutoff frequency]
[[Category:APU]]
a7b45b7853925292bfffe4c340a8fd707c3d7181
Hardware Revisions
0
3669
6747
6569
2019-07-16T05:49:24Z
Redherring32
2513
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
3be8121f4386d52cf89d1fed8ef3a6316d3e1c11
Flash ROM
0
3762
6748
6469
2019-07-16T17:55:11Z
Redherring32
2513
wikitext
text/x-wiki
The Flash is a 256 kiB or 1 MiB [[Wikipedia:Flash_memory|non-volatile <abbr title="Thin Small Outline Package">TSOP</abbr> ROM chip]] and connected to the [[MCPX]] via the [[Wikipedia:Low Pin Count|<abbr title="Low Pin Count">LPC</abbr>]] bus.
The Flash ROM is mapped at 0xFFF00000 (if the ROM is 1 MiB; 0xFFFC0000, if the ROM is 256 kiB) in the Xbox kernel.
For the content of the Microsoft flash images see [[BIOS]].
979ad504c7805d302c832135a9eb0837b6e8b40f
Motherboard
0
3756
6749
6107
2019-07-16T17:55:53Z
Redherring32
2513
/* Xbox 1.0 */
wikitext
text/x-wiki
For a list of differences between these mainboards, also see [[Hardware Revisions]].
== Xbox 1.0 ==
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
The following table is based on an Xbox 1.0{{citation needed}} retail board.
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
=== USB Daughterboard ===
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== Xbox 1.1 ==
{{FIXME}}
== Xbox 1.2 ==
{{FIXME}}
== Xbox 1.3 ==
{{FIXME}}
== Xbox 1.4 ==
{{FIXME}}
== Xbox 1.5 ==
{{FIXME}}
== Xbox 1.6 ==
{{FIXME}}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm Documentation by PiXEL8]
d0abde94640e2dd3e46a194144db2f5f8569f132
6778
6749
2019-10-03T08:47:24Z
Teufelchen
2518
/* Xbox 1.0 */
wikitext
text/x-wiki
For a list of differences between these mainboards, also see [[Hardware Revisions]].
== Xbox 1.0 ==
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
The following table is based on an Xbox 1.0{{citation needed}} retail board.
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
=== USB Daughterboard ===
[[File:USB_Daughterboard_front.png|400px|thumb|right|Xbox Version 1.0 USB Daughterboard]]
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== Xbox 1.1 ==
{{FIXME}}
== Xbox 1.2 ==
{{FIXME}}
== Xbox 1.3 ==
{{FIXME}}
== Xbox 1.4 ==
{{FIXME}}
== Xbox 1.5 ==
{{FIXME}}
== Xbox 1.6 ==
{{FIXME}}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm Documentation by PiXEL8]
d8ca1634ca40e65541a8ebb756f3677d1313488c
6779
6778
2019-10-03T09:08:33Z
Teufelchen
2518
/* Xbox 1.0 */
wikitext
text/x-wiki
For a list of differences between these mainboards, also see [[Hardware Revisions]].
== Xbox 1.0 ==
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
The following table is based on an Xbox 1.0{{citation needed}} retail board.
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
=== USB Daughterboard ===
[[File:USB_Daughterboard_front.png|100px|thumb|right|Xbox Version 1.0 USB Daughterboard]]
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== Xbox 1.1 ==
{{FIXME}}
== Xbox 1.2 ==
{{FIXME}}
== Xbox 1.3 ==
{{FIXME}}
== Xbox 1.4 ==
{{FIXME}}
== Xbox 1.5 ==
{{FIXME}}
== Xbox 1.6 ==
{{FIXME}}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm Documentation by PiXEL8]
750e01baaee8b05a15af19721f611dc6dfd37052
CPU
0
3681
6750
6584
2019-07-16T17:59:05Z
Redherring32
2513
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium III running at 733MHz. The 'custom' part of this was that the Pentium III in the Xbox only had a 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [http://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/28365403.pdf Mobile Intel® Celeron® Processor (0.18μ) in BGA2 and Micro-PGA2 Packages] This datasheet is for the mobile version Coppermine with 256kB L2 cache. It does not contain the Xbox Coppermine-128 with 128kB L2 cache at 733MHz (S-Spec SL5SN). No such datasheet exists. Both differences are pin compatible.
* [https://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/24542154.pdf Mobile Intel® Celeron® Processor (0.18μ and 0.13μ) Specification Update] This document should contain the errata for the Xbox CPU.
* [https://www.google.com/patents/US20050282621 CPU upgrading adapter for a Microsoft XboxTM game machine] US Patent Application 20050282621 by Friendtech, filed 2003-08-21.
c9967500b2b77629200da5f400365cd7ff042d21
6767
6750
2019-08-09T14:38:11Z
PatrickvL
2473
Added Wikipedia link
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium III running at 733MHz. The 'custom' part of this was that the Pentium III in the Xbox only had a 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [http://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/28365403.pdf Mobile Intel® Celeron® Processor (0.18μ) in BGA2 and Micro-PGA2 Packages] This datasheet is for the mobile version Coppermine with 256kB L2 cache. It does not contain the Xbox Coppermine-128 with 128kB L2 cache at 733MHz (S-Spec SL5SN). No such datasheet exists. Both differences are pin compatible.
* [https://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/24542154.pdf Mobile Intel® Celeron® Processor (0.18μ and 0.13μ) Specification Update] This document should contain the errata for the Xbox CPU.
* Wikipedia - List of Intel Pentium III microprocessors - [https://en.wikipedia.org/wiki/List_of_Intel_Pentium_III_microprocessors#"Coppermine-128"_(180_nm)]
* [https://www.google.com/patents/US20050282621 CPU upgrading adapter for a Microsoft XboxTM game machine] US Patent Application 20050282621 by Friendtech, filed 2003-08-21.
604df5d3c050ac1788f5e527f1ae7660063cc89c
6769
6767
2019-08-23T15:08:41Z
JayFoxRox
2
Fix Wikipedia URL
wikitext
text/x-wiki
The CPU in the Xbox was a custom Pentium III running at 733MHz. The 'custom' part of this was that the Pentium III in the Xbox only had a 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs{{citation needed}}.
== References ==
* [http://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/28365403.pdf Mobile Intel® Celeron® Processor (0.18μ) in BGA2 and Micro-PGA2 Packages] This datasheet is for the mobile version Coppermine with 256kB L2 cache. It does not contain the Xbox Coppermine-128 with 128kB L2 cache at 733MHz (S-Spec SL5SN). No such datasheet exists. Both differences are pin compatible.
* [https://www.intel.com/content/dam/support/us/en/documents/processors/mobile/celeron/sb/24542154.pdf Mobile Intel® Celeron® Processor (0.18μ and 0.13μ) Specification Update] This document should contain the errata for the Xbox CPU.
* [https://en.wikipedia.org/wiki/List_of_Intel_Pentium_III_microprocessors#"Coppermine"_(180_nm) Wikipedia - List of Intel Pentium III microprocessors: "Coppermine" (180 nm)]
* [https://www.google.com/patents/US20050282621 CPU upgrading adapter for a Microsoft XboxTM game machine] US Patent Application 20050282621 by Friendtech, filed 2003-08-21.
00aa112276ebeabe7bceb45029204e7c783b27cb
NV2A
0
3675
6751
6640
2019-07-16T18:01:38Z
Redherring32
2513
wikitext
text/x-wiki
The NV2A is the northbridge of the chipset, as well as the GPU.
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Notes ==
* [https://web.archive.org/web/20031004105935/http://developer.nvidia.com:80/object/nv30_emulation.html NV30 information and emulator]
* [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf List of implemented GL extensions for NV10-NV30: "NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x)", 13 Nov. 2006]
[[Category:NV2A]]
02aa82fd3739c7672e883d3e2869d3e817e19bf5
Memory
0
3674
6752
6692
2019-07-16T18:03:14Z
Redherring32
2513
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
3f70d4ecd691626b86fe9a97da16d4f1709cc88a
Video Encoder
0
3750
6753
6299
2019-07-18T16:03:08Z
Codeasm
2480
/* Xcalibur */ the rom is on the LPC bus
wikitext
text/x-wiki
The '''video encoder''' is a chip that converts a digital pixel data stream (coming from the nVidia NV2A graphics processor) into analog video signal, just like a [http://en.wikipedia.org/wiki/RAMDAC RAMDAC] would. An ordinary RAMDAC, however, can only output VGA-style RGB signal. The video encoder used in the Xbox is more flexible, and can generate several different types of signals that adhere to various video standards and color formats. These include, but are not necessarily limited to:
* VGA-style >31 kHz RGB, though only with Sync-on-Green sync signals. (If needed, separate HSYNC and VSYNC signals can be obtained from the motherboard, or by building a special video cable with active electronics for stripping and separating the Sync-on-Green sync signal. In any case, separate HSYNC and VSYNC are not available directly through the AV connector.)
* TV-compatible 15 kHz RGB (with composite sync) – suitable for European-style SCART RGB output (are progressive 625/50 signals supported?)
* Component (Y'PbPr) signal, both in SDTV and HDTV resolutions; suitable for American-style "component" output
* PAL color signal with typical PAL timings (including PAL60), in both composite (CVBS) and s-video (Y/C) formats
* SECAM color signal with typical SECAM timings, in both composite (CVBS) and s-video (Y/C) formats
* NTSC color signal with typical NTSC timings, in both composite (CVBS) and s-video (Y/C) formats
* Black and white composite video signal without a color carrier
The video encoder is also capable of PALplus style Line 23 Wide Screen Signalling (WSS), and the Xbox PIC is rigged with the capability of controlling Scart pin 8 (the ''function switching pin'', which is used as an alternative method of Wide Screen Signalling) and pin 16 (the ''fast switching pin''.)
The make and model of the video encoder has varied through the years – three different video encoders have been used thus far. All three are very similar in their features; they support various modes and are flexible enough to be able to output a VGA compatible signal (which is not supported by the Xbox kernel). They are, however, not register-compatible.
Two of the video encoders (Conexant CX25871 and Focus FS454) also have extensive scaling and filtering functionality, which allows for [http://scanline.ca/overscan/ overscan compensation] in desktop-style "TV out" usage. This means that the GPU can output ordinary VGA resolutions with VGA timings and the video encoder can convert them to SDTV resolutions with TV-style timings on the fly, adding borders around the image so that a projection of the VGA framebuffer image falls within the "safe area" of the video signal. The capabilities of the Xcalibur chip, however, remain a mystery in this regard: it is not known whether it has a scaler.
All video encoders are connected to (and controlled via) the [[SMBus]].
=== Conexant CX25871 ===
The [http://www.alldatasheet.com/datasheet-pdf/pdf/153349/CONEXANT/CX25871.html Conexant CX25871] is a close relative of the Brooktree BT868/BT869. There is also a sister model (CX25870) without the Macrovision capability. This chip was used in Xbox versions 1.0 through 1.3.
=== Focus FS454 ===
The [https://www.manualslib.com/products/Focus-Fs454-211664.html Focus FS454] was used in v1.4 (and possibly v1.5) Xboxes. There is also a sister model (FS453) without the Macrovision capability.
=== Xcalibur ===
The Xcalibur video encoder is a custom chip manufactured for Microsoft. It was first used in Xbox hardware revision 1.6. Unfortunately, there is no official programming documentation available for this chip. It seems the only way to find out more is through reverse-engineering techniques.
Xboxes that contain the Xcalibur encoder have the firmware ROM and the PIC physically integrated into another custom chip, named Xyclops.
the ROM is put on the LPC bus [[https://web.archive.org/web/20180401042955/http://www.eurasia.nu/wiki/index.php/XboxXyclopsEventLog]]
c24a778bbd8a94a76e5e2e0d8e92d9f2e4db97a0
Hardware Revisions
0
3669
6754
6747
2019-07-30T21:03:13Z
DarkGabbz
2486
Included 1.4/1.6 Video Encoder changes
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
e05e2767b3dcae45ea3de4456aad9ca5a0f79536
6755
6754
2019-07-30T21:05:46Z
DarkGabbz
2486
Added Board Layout changes
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** New Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
05b050d037d7c0ad94c54605a8b81b89091831d1
6756
6755
2019-07-30T21:06:29Z
DarkGabbz
2486
TSOP Stuffs
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** New Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
1c8b9a0ef7d010e4d58a5bb23a5b511849f7071a
6758
6756
2019-07-30T21:19:56Z
DarkGabbz
2486
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
146331e7d91b876e7fd87ead71beadc664cb947a
6759
6758
2019-07-31T15:03:40Z
Codeasm
2480
/* DVD Drive */ added controller information
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMPSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
==== PHILLIPS VAD6053 ====
Also named: VAD6011/21 apear to have no brand or partnumber on its large main controller,might be Cirrus Logic based on its size and use of a Philips secondary smaller mcu. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC dvdrom drive Pioneer 500M with the Philips firmware to be a Xbox dvdrom drive.
==== HITACHI GDR-8050L ====
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
73197916667b4d05085071031ed374a4ece9a521
6768
6759
2019-08-14T13:26:25Z
DarkGabbz
2486
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
==== PHILLIPS VAD6053 ====
Also named: VAD6011/21 apear to have no brand or partnumber on its large main controller,might be Cirrus Logic based on its size and use of a Philips secondary smaller mcu. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC dvdrom drive Pioneer 500M with the Philips firmware to be a Xbox dvdrom drive.
==== HITACHI GDR-8050L ====
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
7a036dc683c50d7c912a2d5ccc457e2910727405
6774
6768
2019-09-28T00:52:46Z
Redherring32
2513
/* History of Xbox 1.5 */
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate PCB
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
==== PHILLIPS VAD6053 ====
Also named: VAD6011/21 apear to have no brand or partnumber on its large main controller,might be Cirrus Logic based on its size and use of a Philips secondary smaller mcu. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC dvdrom drive Pioneer 500M with the Philips firmware to be a Xbox dvdrom drive.
==== HITACHI GDR-8050L ====
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
2751900184a9060cccdd8394634ca6d6b777951c
6783
6774
2019-10-04T12:28:50Z
Teufelchen
2518
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
==== PHILLIPS VAD6053 ====
Also named: VAD6011/21 apear to have no brand or partnumber on its large main controller,might be Cirrus Logic based on its size and use of a Philips secondary smaller mcu. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC dvdrom drive Pioneer 500M with the Philips firmware to be a Xbox dvdrom drive.
==== HITACHI GDR-8050L ====
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
===Hitachi-LG GDR-8050L ===
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
on 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
aff63e93eb4826ecdc6dd4bdf6aa06560c2d19b7
Patents
0
3824
6757
6712
2019-07-30T21:17:50Z
DarkGabbz
2486
Date fix
wikitext
text/x-wiki
Here a list of patents that might be related to the original Xbox:
* Filed 1997-11-25 by Nvidia: https://www.google.com/patents/US6697063 "Rendering pipeline"
* Filed 1998-12-23 by Microsoft: https://www.google.com/patents/US6417858 "Processor for geometry transformations and lighting calculations"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6198488 "Transform, lighting and rasterization system embodied on a single semiconductor platform"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6573900 "Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6765575 "Clip-less rasterization using line equation-based traversal"
* Filed 1999-12-06 by Nvidia: https://www.google.com/patents/US6650325 "Method, apparatus and article of manufacture for boustrophedonic rasterization"
* Filed 2000-12-05 by Nvidia: https://www.google.com/patents/US6690372 "System, method and article of manufacture for shadow mapping"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452282 "Portion of an electronic housing"
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD452534 "Portion of an electronic housing" (not a dupe, its the top X shape in detail)
* Filed 2001-01-11 by Microsoft: https://www.google.com/patents/USD451513 "Computer input device" (describes the original Xbox controller, a.k.a. : "the Duke")
* Filed 2003-05-09 by Microsoft: https://www.google.com/patents/US8493326 "Controller with removably attachable text input device" (an early keypad, later revered to by the 360 keypad patent)
* Filed 2003-05-09 by Micorsoft: https://www.google.com/patents/US7116311 "Embedded text input " (reffered to by the 360 chatpad)
* Filed 2006-07-03 by Micorsoft: https://www.google.com/patents/US7804484 "Embedded text input " (probably a corrected version of US7116311, reffered to by the 360 chatpad, a picture of the "Baretta" chatpad, https://assemblergames.com/threads/xbox-chatpad-unreleased.54523/
* Filed 2001-06-19 by Nvidia: https://www.google.com/patents/US6870540 "System, method and computer program product for a programmable pixel processing model with instruction set"
* Filed 2002-06-07 by Microsoft: https://www.google.com/patents/US6907522 "Use of hashing in a secure boot loader" (mentions "NV2A")
* Filed 2003-08-21 by Friendtech: https://www.google.com/patents/US20050282621 "CPU upgrading adapter for a Microsoft XboxTM game machine"
* Filed 2005-01-04 by Nvidia: https://www.google.com/patents/US7916149 "Block linear memory ordering of texture data"
* Filed 2005-01-07 by Microsoft: https://www.google.com/patents/US7676840 "Use of hashing in a secure boot loader" (a continuation of patent US6907522)
* Filed 2005-05-17 by Nvidia: https://www.google.com/patents/US7793029 "Translation device apparatus for configuring printed circuit board connectors " (describes coupling two PCI Express connectors, possibly for the secondary Chihiro board, mentions "Xbox")
* Filed 2001-04-30 by Microsoft: https://www.google.com/patents/US20020160654 "Breakaway cable connector" (filed by Microsofts attorneys)
* Filed 2004-22-02 by Microsoft: https://patents.google.com/patent/US7303476 "Method and apparatus for creating and playing soundtracks in a gaming system"
* Filed 2002-05-16 by Microsoft: https://patents.google.com/patent/US6935959 "Use of multiple player real-time voice communications on a gaming device"
* Filed 2001-03-09 by Microsoft: https://patents.google.com/patent/US7218739B2 "Multiple user authentication for online console-based gaming"
* Filed 2005-03-09 by Microsoft: https://patents.google.com/patent/US7811174B2 "Method and apparatus for managing data in a gaming system"
Possibly unrelated :
* Filed 1989-12-29 by Dolby Laboratories: https://www.google.com/patents/US5109417 "Low bit rate transform coder, decoder, and encoder/decoder for high-quality audio"
* Filed 2008-01-15 by Microsoft: https://www.google.com/patents/US8607324 "Untrusted gaming system access to online gaming service" (describes part of Xbox online)
* Filed 2011-06-17 by Microsoft: https://www.google.com/patents/US8641525 "Controller for video game console" (one of the 51 patents comprising the Xbox One controller)
* Filed 2011-09-07 by Microsoft: https://www.google.com/patents/US8597125 "System and method for configuring game data about players"
* Filed 2012-01-13 by Microsoft: https://www.google.com/patents/US8602897 "Extended and editable gamer profile"
* Filed 2007-12-07 by Microsoft: https://www.google.com/patents/US8487876 "Ergonomic hand-held text input device " (The xbox 360 chatpad, wich mentions the OG textpad US8493326 and US7116311 ;) )
b256603699fe69c5e11416d827f4eda5ee2ed85e
LPC Debug Port
0
3909
6760
6610
2019-08-04T14:06:06Z
Dreimer
2516
/* Pins */
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | SERIRQ (v1.0) || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on. On 1.6 hardware, pin 9 is disconnected. Reconnect to pin 15 to restore the supply voltage.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal. On 1.3-1.5 hardware, disconnected. Can be reconnected though. ([[LFRAME# reconnect]])
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
04bd5439e9d7e2883976436f21f1e9731323b35e
6764
6760
2019-08-04T22:13:46Z
Haxar
2485
Move LFRAME# reconnection page to its own section
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | SERIRQ (v1.0) || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on. On 1.6 hardware, pin 9 is disconnected. Reconnect to pin 15 to restore the supply voltage.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal. On 1.3-1.5 hardware, this pin is disconnected. See [[LPC_Debug_Port#LFRAME.23_reconnect|LFRAME# reconnect]] for a possible reconnection.
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
== LFRAME# reconnect ==
It is possible to reconnect this pin on 1.3-1.5 hardware by tapping the MCPX soldermask and soldering a jumper wire to the disconnected pin on the LPC port.
Result should look similar to this in the end: [https://photos.app.goo.gl/wUvAwm3KS3ePSnYj8] (Image provided by dreimer)
In the end, we can gain kernel debug output from Super I/O serial again: [https://cdn.discordapp.com/attachments/603568167255801861/607540322871803904/unknown.png] (Image provided by dreimer)
This reconnection was tested on 1.3 hardware, and should work on 1.4 and 1.5 revisions, as the MCPX is the same.
== References ==
* [https://web.archive.org/web/20140805105234/http://dwl.xbox-scene.com/~xbox/xbox-scene/tutorials/LFRAME-for-v1_3-and-up.pdf LFRAME-for-v1_3-and-up.pdf] An old manual from Xbox-Scene that explains how to reconnect '''LFRAME#''' (3) for a Cheapmod. This we don't care about, but is what we want for [[Kernel_Debug|kernel debugging]] via [[Super_I/O|Super I/O]]. Thanks to dreimer for finding and testing this documentation.
d5581b4bbea0e622c80c9121ca8e386d4e06e09a
LFRAME
0
3986
6761
2019-08-04T14:13:09Z
Dreimer
2516
Created page with "A old manual from XBox-Scene still is available from https://www.archive.org/ which explains how to reconnect LFRAME# for Cheapmods. This we don't care about, but the rest is..."
wikitext
text/x-wiki
A old manual from XBox-Scene still is available from https://www.archive.org/ which explains how to reconnect LFRAME# for Cheapmods. This we don't care about, but the rest is what we want: [https://web.archive.org/web/20140805105234/http://dwl.xbox-scene.com/~xbox/xbox-scene/tutorials/LFRAME-for-v1_3-and-up.pdf Manual]
Result should look similar to this in the end: [https://photos.app.goo.gl/wUvAwm3KS3ePSnYj8]
In the end, we can gain debug output from serial again: [https://cdn.discordapp.com/attachments/603568167255801861/607540322871803904/unknown.png]
This was tested on a 1.3 board, but should be the same on 1.4 and 1.5 too as the MCPX is the same.
8c6be9ea0d2970961d816ccb456a0eed1e4246b1
6765
6761
2019-08-04T22:16:39Z
Haxar
2485
Redirected page to [[LPC_Debug_Port]]
wikitext
text/x-wiki
#REDIRECT [[LPC_Debug_Port#LFRAME.23_reconnect]]
b1952274f75ee936ae28d8ceac7e97d4337e23fb
Main Page
0
1
6762
6725
2019-08-04T20:55:06Z
Haxar
2485
nit
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
276bec0f74a34f1e46ff8e38e299ea9c31af69d0
6763
6762
2019-08-04T21:05:00Z
Haxar
2485
Added LPC bus under MCPX southbridge
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Xbox 360 Backward Compatibility]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
da522e59cd512189a831737d4b5c7455db95bcdd
Xbox Input Devices
0
11
6766
6723
2019-08-09T11:28:12Z
Dracc
2502
Fix Steel Battalion Controller RightJoyFire button Mask according to https://github.com/Ryzee119/ogx360/blob/master/Firmware/ogx360_32u4/ogx360_32u4/steelbattalion.h
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== USB Descriptors ===
Most standard gamepads share the same USB descriptor.
Usually the only difference will be the VID / PID.
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
2945fc7b5ed89421e8ade662a38ba4f3d5db57a1
Power Supply
0
3818
6770
6711
2019-08-30T02:23:26Z
CrunchBite
2511
Added "real world power usage" section
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || PowOK
|-
| Pin 2 || PowON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK (3.3V Standby) || Pin 1 || PowON (3.3V)
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None
|-
| Pin 4 || None || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V (0.12V Standby)
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V Standby || Pin 8 || +5V Standby
|-
| Pin 9 || +5V Standby || Pin 9 || GND
|-
| Pin 10 || +5V Standby || Pin 10 || +12V (0.532V Standby)
|}
== Real world power usage ==
As measured on a v1.0 Xbox with a Fluke 376 clamp meter around the PSU to Motherboard connections. HDD not included in measurements and the DVD drive and controller rumble were not used.
{| class="wikitable"
! || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 5.9A || 5.8A || 6.0A || 6.2A
|-
| 3.3v Standby || 0.2A || 0.3A || 0.3A || 0.3A || 0.3A
|-
| 3.3v || 0A || 2.5A || 2.2A || 2.7A || 2.7A
|-
| 5v || 0A || 7.1A || 7.2A || 7.0A || 7.2A
|-
| 12v || 0A || 0.3A || 0.4A || 0.4A || 0.4A
|-
|}
TODO: Measure other hardware revisions and more usage scenarios.
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
cd008aad43e96e1906129b19667c3d5e52ce7ecc
6771
6770
2019-09-01T17:35:51Z
CrunchBite
2511
/* Real world power usage */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || PowOK
|-
| Pin 2 || PowON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK (3.3V Standby) || Pin 1 || PowON (3.3V)
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None
|-
| Pin 4 || None || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V (0.12V Standby)
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V Standby || Pin 8 || +5V Standby
|-
| Pin 9 || +5V Standby || Pin 9 || GND
|-
| Pin 10 || +5V Standby || Pin 10 || +12V (0.532V Standby)
|}
== Real world power usage ==
DC amperage as measured on a v1.0 Xbox with a Fluke 376 clamp meter around the PSU to Motherboard connections. HDD not included in measurements and the DVD drive and controller rumble were not used.
AC wattage measured at 120v 60Hz using a 'KILL A WATT' meter.
{| class="wikitable"
! || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 5.9A || 5.8A || 6.0A || 6.2A
|-
| 3.3v Standby || 0.2A || 0.3A || 0.3A || 0.3A || 0.3A
|-
| 3.3v || 0A || 2.5A || 2.2A || 2.7A || 2.7A
|-
| 5v || 0A || 7.1A || 7.2A || 7.0A || 7.2A
|-
| 12v || 0A || 0.3A || 0.4A || 0.4A || 0.4A
|-
| ~120VAC || 2.1W || 67.4W || 65.3W || 68.5W || 68.5W
|-
|}
TODO: Measure other hardware revisions and more usage scenarios.
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
d3880a15f67856f4cc387f3ef948c08de3aafa36
6772
6771
2019-09-01T17:36:49Z
CrunchBite
2511
/* Real world power usage */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || PowOK
|-
| Pin 2 || PowON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK (3.3V Standby) || Pin 1 || PowON (3.3V)
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None
|-
| Pin 4 || None || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V (0.12V Standby)
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V Standby || Pin 8 || +5V Standby
|-
| Pin 9 || +5V Standby || Pin 9 || GND
|-
| Pin 10 || +5V Standby || Pin 10 || +12V (0.532V Standby)
|}
== Real world power usage ==
DC amperage as measured on a v1.0 Xbox with a Fluke 376 clamp meter around the PSU to Motherboard connections. HDD not included in measurements and the DVD drive and controller rumble were not used.
AC wattage measured at 120v 60Hz using a 'KILL A WATT' meter includes all system components but DVD drive and controller rumble were not used.
{| class="wikitable"
! || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 5.9A || 5.8A || 6.0A || 6.2A
|-
| 3.3v Standby || 0.2A || 0.3A || 0.3A || 0.3A || 0.3A
|-
| 3.3v || 0A || 2.5A || 2.2A || 2.7A || 2.7A
|-
| 5v || 0A || 7.1A || 7.2A || 7.0A || 7.2A
|-
| 12v || 0A || 0.3A || 0.4A || 0.4A || 0.4A
|-
| ~120VAC || 2.1W || 67.4W || 65.3W || 68.5W || 68.5W
|-
|}
TODO: Measure other hardware revisions and more usage scenarios.
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
af65892dfe2efae2f6c9ac56d1015e37c4892ddf
6773
6772
2019-09-20T00:51:54Z
CrunchBite
2511
Added xbox 1.3 power usage measurements
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || PowOK
|-
| Pin 2 || PowON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK (3.3V Standby) || Pin 1 || PowON (3.3V)
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None
|-
| Pin 4 || None || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V (0.12V Standby)
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V Standby || Pin 8 || +5V Standby
|-
| Pin 9 || +5V Standby || Pin 9 || GND
|-
| Pin 10 || +5V Standby || Pin 10 || +12V (0.532V Standby)
|}
== Real world power usage ==
DC amperage as measured on with a Fluke 376 clamp meter around the PSU to Motherboard connections. HDD not included in measurements and the DVD drive and controller rumble were not used.
AC wattage measured at 120v 60Hz using a 'KILL A WATT' meter includes all system components but DVD drive and controller rumble were not used.
{| class="wikitable"
! XBOX V1.0 || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 5.9A || 5.8A || 6.0A || 6.2A
|-
| 3.3v Standby || 0.2A || 0.3A || 0.3A || 0.3A || 0.3A
|-
| 3.3v || 0A || 2.5A || 2.2A || 2.7A || 2.7A
|-
| 5v || 0A || 7.1A || 7.2A || 7.0A || 7.2A
|-
| 12v || 0A || 0.3A || 0.4A || 0.4A || 0.4A
|-
| ~120VAC || 2.1W || 67.4W || 65.3W || 68.5W || 68.5W
|-
|}
{| class="wikitable"
! XBOX V1.3 || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 8.5A || 8.1A || 8.6A || 8.6A
|-
| 3.3v Standby || 0.4A || 0.5A || 0.5A || 0.5A || 0.5A
|-
| 3.3v || 0A || 3.7A || 2.9A || 3.7A || 3.7A
|-
| 5v || 0A || 6.4A || 6.7A || 6.5A || 6.7A
|-
| 12v || 0A || 0.2A || 0.3A || 0.2A || 0.3A
|-
| ~120VAC || 1.2W || 64.6W || 62.2W || 64.3W || 64.6W
|-
|}
TODO: Measure other hardware revisions and more usage scenarios.
== Related links ==
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
8461fa76bef3858d3e1dc7a09504f31456aad188
6781
6773
2019-10-03T14:10:56Z
Teufelchen
2518
/* Related links */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || PowOK
|-
| Pin 2 || PowON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK (3.3V Standby) || Pin 1 || PowON (3.3V)
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None
|-
| Pin 4 || None || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V (0.12V Standby)
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V Standby || Pin 8 || +5V Standby
|-
| Pin 9 || +5V Standby || Pin 9 || GND
|-
| Pin 10 || +5V Standby || Pin 10 || +12V (0.532V Standby)
|}
== Real world power usage ==
DC amperage as measured on with a Fluke 376 clamp meter around the PSU to Motherboard connections. HDD not included in measurements and the DVD drive and controller rumble were not used.
AC wattage measured at 120v 60Hz using a 'KILL A WATT' meter includes all system components but DVD drive and controller rumble were not used.
{| class="wikitable"
! XBOX V1.0 || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 5.9A || 5.8A || 6.0A || 6.2A
|-
| 3.3v Standby || 0.2A || 0.3A || 0.3A || 0.3A || 0.3A
|-
| 3.3v || 0A || 2.5A || 2.2A || 2.7A || 2.7A
|-
| 5v || 0A || 7.1A || 7.2A || 7.0A || 7.2A
|-
| 12v || 0A || 0.3A || 0.4A || 0.4A || 0.4A
|-
| ~120VAC || 2.1W || 67.4W || 65.3W || 68.5W || 68.5W
|-
|}
{| class="wikitable"
! XBOX V1.3 || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 8.5A || 8.1A || 8.6A || 8.6A
|-
| 3.3v Standby || 0.4A || 0.5A || 0.5A || 0.5A || 0.5A
|-
| 3.3v || 0A || 3.7A || 2.9A || 3.7A || 3.7A
|-
| 5v || 0A || 6.4A || 6.7A || 6.5A || 6.7A
|-
| 12v || 0A || 0.2A || 0.3A || 0.2A || 0.3A
|-
| ~120VAC || 1.2W || 64.6W || 62.2W || 64.3W || 64.6W
|-
|}
TODO: Measure other hardware revisions and more usage scenarios.
== Related links ==
* [https://www.youtube.com/watch?v=LBoF1e5YDdQ Eevblog takes a look inside the replacement coord as well as the power supply itself]
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
9221dbc97d0d33ed51b6f4b6e4117c90486b17f9
6782
6781
2019-10-03T14:11:18Z
Teufelchen
2518
/* Related links */
wikitext
text/x-wiki
It's either a Foxlink{{citation needed}} or Delta Electronics power supply for most xboxes.
Some are rumored to be shipped with a Minebea brand and 1.6 xboxes are found with a "tuscany" made probably by Samsung.
On a 1.0 xbox supply, there seems to be 2{{citation needed|reason=2 per region, or 2 overall? and, what about foxlink?}} types for the US 120V and EU 240V market.
The standby voltage powers the [[SMC]] which handles turning on and off the system.
The Xbox supply needs a voltage (3V3?) on it's power-on line to leave the standby mode.
This results in the other voltages being supplied.
=== Delta Electronics ===
The marks are on the PCB with a check next to them:
* Delta Electronics DPSN-96-AP-1 should be the EU 240V one{{citation needed}}
* Delta Electronics DPSN-96-AP is the US 120V one
There is a link J11 under CR1 (right side of the coil under it) that might make the difference between 120V and 240V.
It also seems that the Bridge rectifier is bigger on the US models.
This could make sense as it has to handle double the current. So, before experimenting with this it might be worth to check if the installed type can handle 2.3 amps.
The rated output currents are also noted on the PCB
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.075A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
=== Foxlink Technology LTD ===
{{FIXME|reason=I don't own any US xboxes to compare US foxlinks with}}On the lower heatsink, there is a sticker with the following markings and versions:
* MODEL: FTPS-0001 REV:B {{citation needed}} (120V)
* MODEL: FTPS-0002 REV:B (from a 2002 PAL (240V))
* MODEL: FTPS-0002 REV:H (from a 2003 PAL (240V))
* MODEL: FTPS-0002 REV:G {{citation needed}} (240V)
* MODEL: FTPS-0007 REV:B {{citation needed}} (120V) (are these after the powercord recall?)
* MODEL: FTPS-0007 REV:D {{citation needed}} (120V) (are these after the powercord recall?)
The rated output currents are also noted on the sticker
96W Max output power
{| class="wikitable"
| Power Rail
| Rated Current
|-
| 3.3V Standby
| 0.045A
|-
| 3.3V
| 4.8A
|-
| 5V
| 13.2A
|-
| 12V
| 1.2A
|}
==== Powercord recall ====
Microsoft started an powercord recall, or more like a replacement program [https://web.archive.org/web/20050301093947/http://www.xbox.com:80/en-US/news/0502/powercordannouncement.htm xbox.com]for what appeared to be Foxlink powersupplies having a bad powerplug connector on the back of the console and where installed in 1.0 and 1.1 Xboxes.{{citation needed}}.
Microsoft tried to resolve this by offering free replacement powercords and advising to trow out the old ones. [https://web.archive.org/web/20120722175134/http://www.xbox-scene.com/xbox1data/sep/EEpAEAylAluZlwSlOJ.php More to the power cord replacement than meets the eye?]{{FIXME|reason=why is this link here and where could / should it be instead? I think it's misplaced here}}.
From the Microsoft powercord replacement FAQ:
: '''Does my console require a replacement cord?'''
: If it was manufactured before October 23, 2003, your console requires a replacement cord (except for consoles purchased in Continental Europe, where consoles manufactured prior to January 13, 2004 require a replacement cord). Consoles manufactured after October 23, 2003 (after January 13, 2004 for consoles purchased in Continental Europe) do not require replacement cords because design improvements to the cord and console already protect against the problems that are addressed by the replacement cords.[https://web.archive.org/web/20050223041403/http://replacements.webprogram.com:80/en-us/faqs.asp#Q-7]
The old page describing how to order has been archived here: [https://web.archive.org/web/20050223060900/http://replacements.webprogram.com:80/en-us/programoverview.asp]
One would either receive a thicker but very similar powercord or an actual [https://simple.wikipedia.org/wiki/GFCI GFI] (Ground Fault Circuit Interrupter). a online form would then be used to determine which type of cable you receive by means of serial number. {{FIXME|reason=I cant seem to find a source for these details yet, but I personally requested 2, 1 for my own Xbox (a 1.4, with a confirmed Delta. never replaced it.) and received a normal cable (EU). A friends xbox was older, 1.1/1.2?) and we got a european fusebox brick for his. looks like the UK one, but with the Benelux plug. It was all for free in Europe I remember the part number on my normal cable to be different (higher) for the newer one... ill check if I have it in the original box still}}
===== AFCI =====
A video of whats inside an european (UK) "AFCI" [https://www.youtube.com/watch?v=C0wQikAO-yA]
An european AFCI ordered from MS for free had the following on the bottom label.
{| class="wikitable"
| Part number
| X800925-100
|-
|
| 200-240V~,50/60HZ, 610mA
|-
| MFG Code
| DN0855
|}
The cable that is wired to the AFCI has the following markings:
{| class="wikitable"
! top
! bottom
|-
| JI-HAW
| JHT-031
|}
===== Old and New cords =====
The replacement cable has the following markings:{{citation needed}}
{| class="wikitable"
! top
! bottom
|-
| JHT-031
| {{citation needed}}
|}
The older cable that needed replacement was:
{| class="wikitable"
! top
! bottom
|-
| NITTO SS
| W41-27854
|-
| JHT-013
| N15905
|-
| JI-HAW
|
|-
| E147422
|
|}
Presumably this one doesn't come with tighter tolerances.
=== Samsung "TUSCANY"===
Found in 1.6 xboxes and seems to be made by Samsung (or atleast the main transformer is, which also has the detail label on it)
{{FIXME|reason=There are TUSCANY powersuplies in some 1.6 xboxes?}}
* PSCD101301A
=== Minebea ===
{{FIXME|reason=There are in the UK, Minebea powersuplies in some xboxes?}}
* MS001A096EMJ
{|
!Minebea Electronics UK LTD
!(circuit board)
|-
|DWG No.
|1 R26PA-SE300393 REV: E
|-
|PART No.
|1 1612100002
|-
|
|0234-3
|-
!Sticker:
|
|-
|NMB Technologies Corp
|Power Supply Division
|-
|Made in
|Thailand
|-
|Model:
|MS001A096EMJ
|-
|REV:
|08
|-
|AC INPUT:100-120V
|2A 47-63Hz
|}
== Connector pinout ==
=== Xbox 1.0 and 1.1 ===
The power supply connector for 1.0 and 1.1 is a single column of pins described by the following chart. Pin 1 is the connector pin closest to the back of the Xbox.
{| class="wikitable"
! Pin || Usage
|-
| Pin 1 || PowOK
|-
| Pin 2 || PowON
|-
| Pin 3 || GND
|-
| Pin 4 || GND
|-
| Pin 5 || GND
|-
| Pin 6 || GND
|-
| Pin 7 || +3.3V Standby
|-
| Pin 8 || +3.3V
|-
| Pin 9 || +5V
|-
| Pin 10 || +5V
|-
| Pin 11 || +5V
|-
| Pin 12 || +12V
|}
=== Xbox 1.2, 1.3, 1.4, and 1.5 ===
The power supply connector for the 1.2, 1.3, 1.4, and 1.5 xboxes is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK || Pin 1 || PowON
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || +3.3V
|-
| Pin 4 || +3.3V || Pin 4 || None
|-
| Pin 5 || None || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +3.3V Standby
|-
| Pin 7 || None || Pin 7 || GND
|-
| Pin 8 || +5V || Pin 8 || +5V
|-
| Pin 9 || +5V || Pin 9 || None
|-
| Pin 10 || +5V || Pin 10 || +12V
|}
=== Xbox 1.6 ===
The connector for the 1.6 Xbox is two columns. Pin 1, Column 1 being the top left pin. Pin 1, Column 2 being the top right pin. The top being the side closest to the back of the Xbox. This is the same connector as a 1.2, 1.3, 1.4, and 1.5 xboxes, with a different pinout.
{| class="wikitable"
! Pin Column 1 || Usage || Pin Column 2 || Usage
|-
| Pin 1 || PowOK (3.3V Standby) || Pin 1 || PowON (3.3V)
|-
| Pin 2 || GND || Pin 2 || GND
|-
| Pin 3 || None || Pin 3 || None
|-
| Pin 4 || None || Pin 4 || None
|-
| Pin 5 || GND || Pin 5 || GND
|-
| Pin 6 || GND || Pin 6 || +5V (0.12V Standby)
|-
| Pin 7 || GND || Pin 7 || GND
|-
| Pin 8 || +5V Standby || Pin 8 || +5V Standby
|-
| Pin 9 || +5V Standby || Pin 9 || GND
|-
| Pin 10 || +5V Standby || Pin 10 || +12V (0.532V Standby)
|}
== Real world power usage ==
DC amperage as measured on with a Fluke 376 clamp meter around the PSU to Motherboard connections. HDD not included in measurements and the DVD drive and controller rumble were not used.
AC wattage measured at 120v 60Hz using a 'KILL A WATT' meter includes all system components but DVD drive and controller rumble were not used.
{| class="wikitable"
! XBOX V1.0 || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 5.9A || 5.8A || 6.0A || 6.2A
|-
| 3.3v Standby || 0.2A || 0.3A || 0.3A || 0.3A || 0.3A
|-
| 3.3v || 0A || 2.5A || 2.2A || 2.7A || 2.7A
|-
| 5v || 0A || 7.1A || 7.2A || 7.0A || 7.2A
|-
| 12v || 0A || 0.3A || 0.4A || 0.4A || 0.4A
|-
| ~120VAC || 2.1W || 67.4W || 65.3W || 68.5W || 68.5W
|-
|}
{| class="wikitable"
! XBOX V1.3 || Power off || Unleash X || Halo 2 Menu || DolphinClassic || Maximum Observed
|-
| GND || 0A || 8.5A || 8.1A || 8.6A || 8.6A
|-
| 3.3v Standby || 0.4A || 0.5A || 0.5A || 0.5A || 0.5A
|-
| 3.3v || 0A || 3.7A || 2.9A || 3.7A || 3.7A
|-
| 5v || 0A || 6.4A || 6.7A || 6.5A || 6.7A
|-
| 12v || 0A || 0.2A || 0.3A || 0.2A || 0.3A
|-
| ~120VAC || 1.2W || 64.6W || 62.2W || 64.3W || 64.6W
|-
|}
TODO: Measure other hardware revisions and more usage scenarios.
== Related links ==
* [https://www.youtube.com/watch?v=LBoF1e5YDdQ EEVblog takes a look inside the replacement coord as well as the power supply itself]
* [http://brandonw.net/consoles/xbox/ Describes how to turn an ATX Power-Supply to Xbox PSU]
* [https://web.archive.org/web/20060421203325/https://msmvps.com/blogs/matthewsoft/archive/2005/02/17/36238.aspx Powercord recall blog with exacter cable numbers]
0643078b8a02014738fdd64ad463e8a9f1a2d6f0
File:USB Daughterboard front.png
6
3987
6775
2019-10-03T08:28:50Z
Teufelchen
2518
The frontside of the USB Daughterboard from Rev 1.0 XBOX
wikitext
text/x-wiki
The frontside of the USB Daughterboard from Rev 1.0 XBOX
dc8bc54e1feb5214d8845f7fc25b117504fa44fd
File:USB Daughterboard back.png
6
3988
6776
2019-10-03T08:31:34Z
Teufelchen
2518
The backside of the USB Daughterboard of the Rev. 1.0 XBOX
wikitext
text/x-wiki
The backside of the USB Daughterboard of the Rev. 1.0 XBOX
b5a4c31f8f2c107fcbce328ad9b28e7ed733b4b2
File:USB Daughterboard angle.png
6
3989
6777
2019-10-03T08:34:46Z
Teufelchen
2518
The USB Daughterboard of the Rev. 1.0 XBOX from the side
wikitext
text/x-wiki
The USB Daughterboard of the Rev. 1.0 XBOX from the side
700b03eff731f907159f611567fe49c8c4ffe8bd
File:USB Daughterboard IC.png
6
3990
6780
2019-10-03T09:27:48Z
Teufelchen
2518
Close-up of the ic on the usb daughterboard
wikitext
text/x-wiki
Close-up of the ic on the usb daughterboard
785ecc5ba800ff7c80e1eac082626904cfcf4eb3
Xbox Game Disc
0
3700
6784
6648
2019-10-06T20:23:18Z
Wayo
2479
/* USB Adapters */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator.
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
972c6a8a54b442e5642aac262068b9d645129e18
NV2A/Pixel Combiner
0
8
6785
6735
2019-10-07T13:10:32Z
JayFoxRox
2
Documenting register-combiner differences between NV2A and GL
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the ZERO and DISCARD register are the same index: writes are discard / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
adb4c7070f28606ea7d0ef6615cb2005fd1e78a8
6787
6785
2019-10-07T13:23:00Z
JayFoxRox
2
Swap register names to make it consistent + fix typo
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the DISCARD and ZERO register are the same index: writes are discarded / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
8d4e7ebb0b00e53f69e9c45ab9d0473d6978daf6
6788
6787
2019-10-07T13:34:32Z
JayFoxRox
2
PS_TEXTUREMODES_DOT_ZW is DOT_PRODUCT_DEPTH_REPLACE_NV
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|DOT_PRODUCT_DEPTH_REPLACE_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the DISCARD and ZERO register are the same index: writes are discarded / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
50422bb936ef050d8d7e752ad1522f13780ddbac
Talk:NV2A/Pixel Combiner
1
3760
6786
5490
2019-10-07T13:20:55Z
JayFoxRox
2
Response about nvidia names
wikitext
text/x-wiki
== Move data from cxbx ==
https://github.com/Echelon9/cxbx-shogun/blob/master/src/CxbxKrnl/EmuD3D8/PixelShader.cpp#L467 uses the nvidia names
Those are MS names, not nvidia; I believe most of them are already in the article.
I actually want to remove them in the future to focus on the GL spec (which is much closer to hw + explicit).
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 06:20, 7 October 2019 (PDT)
28e72256dcb8c019085e77e644fbb30b7c6010ea
6789
6786
2019-10-07T13:39:23Z
JayFoxRox
2
I was wrong, MS and nvidia names are really close.
wikitext
text/x-wiki
== Move data from cxbx ==
https://github.com/Echelon9/cxbx-shogun/blob/master/src/CxbxKrnl/EmuD3D8/PixelShader.cpp#L467 uses the nvidia names
Those are MS names, not nvidia (edit: although they are very similar); I believe most of them are already in the article.
<del>I actually want to remove them in the future to focus on the GL spec (which is much closer to hw + explicit).</del> (edit: GL is a bit more limited actually).
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 06:20, 7 October 2019 (PDT)
abe11298ec4a3b1ad2e6efdfee15045ec001cb96
User:JayFoxRox
2
3948
6790
6598
2019-10-21T00:08:04Z
JayFoxRox
2
Add file which can be used to debug savegame localization
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== TitleMeta.xbx locales ==
Put this into a file and move it to "E:/UDATA/13371337/TitleMeta.xbx" and check which languages your MS dashboard supports (my results are from 1.00.5960.01 from Germany in NTSC mode):
<pre>
TitleName=#Known locale - (fallback, same as [default])
[ZW]
TitleName=#Unknown locale [zw]
[ZA]
TitleName=#Unknown locale [za]
[YE]
TitleName=#Unknown locale [ye]
[VN]
TitleName=#Unknown locale [vn]
[VE]
TitleName=#Unknown locale [ve]
[UZ]
TitleName=#Unknown locale [uz]
[UY]
TitleName=#Unknown locale [uy]
[US]
TitleName=#Unknown locale [us]
[UA]
TitleName=#Unknown locale [ua]
[TW]
TitleName=#Unknown locale [tw]
[TT]
TitleName=#Unknown locale [tt]
[TR]
TitleName=#Unknown locale [tr]
[TN]
TitleName=#Unknown locale [tn]
[TH]
TitleName=#Unknown locale [th]
[SY]
TitleName=#Unknown locale [sy]
[SV]
TitleName=#Unknown locale [sv]
[SK]
TitleName=#Unknown locale [sk]
[SI]
TitleName=#Unknown locale [si]
[SG]
TitleName=#Unknown locale [sg]
[SE]
TitleName=#Unknown locale [se]
[SA]
TitleName=#Unknown locale [sa]
[RU]
TitleName=#Unknown locale [ru]
[RO]
TitleName=#Unknown locale [ro]
[QA]
TitleName=#Unknown locale [qa]
[PY]
TitleName=#Unknown locale [py]
[PT]
TitleName=#Unknown locale [pt]
[PR]
TitleName=#Unknown locale [pr]
[PL]
TitleName=#Unknown locale [pl]
[PK]
TitleName=#Unknown locale [pk]
[PH]
TitleName=#Unknown locale [ph]
[PE]
TitleName=#Unknown locale [pe]
[PA]
TitleName=#Unknown locale [pa]
[OM]
TitleName=#Unknown locale [om]
[NZ]
TitleName=#Unknown locale [nz]
[NO]
TitleName=#Unknown locale [no]
[NL]
TitleName=#Unknown locale [nl]
[NI]
TitleName=#Unknown locale [ni]
[MY]
TitleName=#Unknown locale [my]
[MX]
TitleName=#Unknown locale [mx]
[MV]
TitleName=#Unknown locale [mv]
[MO]
TitleName=#Unknown locale [mo]
[MN]
TitleName=#Unknown locale [mn]
[MK]
TitleName=#Unknown locale [mk]
[MC]
TitleName=#Unknown locale [mc]
[MA]
TitleName=#Unknown locale [ma]
[LY]
TitleName=#Unknown locale [ly]
[LV]
TitleName=#Unknown locale [lv]
[LU]
TitleName=#Unknown locale [lu]
[LT]
TitleName=#Unknown locale [lt]
[LI]
TitleName=#Unknown locale [li]
[LB]
TitleName=#Unknown locale [lb]
[KZ]
TitleName=#Unknown locale [kz]
[KW]
TitleName=#Unknown locale [kw]
[KR]
TitleName=#Unknown locale [kr]
[KG]
TitleName=#Unknown locale [kg]
[KE]
TitleName=#Unknown locale [ke]
[JP]
TitleName=#Unknown locale [jp]
[JO]
TitleName=#Unknown locale [jo]
[JM]
TitleName=#Unknown locale [jm]
[IT]
TitleName=#Unknown locale [it]
[IS]
TitleName=#Unknown locale [is]
[IR]
TitleName=#Unknown locale [ir]
[IQ]
TitleName=#Unknown locale [iq]
[IN]
TitleName=#Unknown locale [in]
[IL]
TitleName=#Unknown locale [il]
[IE]
TitleName=#Unknown locale [ie]
[ID]
TitleName=#Unknown locale [id]
[HU]
TitleName=#Unknown locale [hu]
[HR]
TitleName=#Unknown locale [hr]
[HN]
TitleName=#Unknown locale [hn]
[HK]
TitleName=#Unknown locale [hk]
[GT]
TitleName=#Unknown locale [gt]
[GR]
TitleName=#Unknown locale [gr]
[GE]
TitleName=#Unknown locale [ge]
[GB]
TitleName=#Unknown locale [gb]
[FR]
TitleName=#Unknown locale [fr]
[FO]
TitleName=#Unknown locale [fo]
[FI]
TitleName=#Unknown locale [fi]
[ES]
TitleName=#Unknown locale [es]
[EG]
TitleName=#Unknown locale [eg]
[EE]
TitleName=#Unknown locale [ee]
[EC]
TitleName=#Unknown locale [ec]
[DZ]
TitleName=#Unknown locale [dz]
[DO]
TitleName=#Unknown locale [do]
[DK]
TitleName=#Unknown locale [dk]
[DE]
TitleName=#Unknown locale [de]
[CZ]
TitleName=#Unknown locale [cz]
[CR]
TitleName=#Unknown locale [cr]
[CO]
TitleName=#Unknown locale [co]
[CN]
TitleName=#Unknown locale [cn]
[CL]
TitleName=#Unknown locale [cl]
[CH]
TitleName=#Unknown locale [ch]
[CA]
TitleName=#Unknown locale [ca]
[BZ]
TitleName=#Unknown locale [bz]
[BY]
TitleName=#Unknown locale [by]
[BR]
TitleName=#Unknown locale [br]
[BO]
TitleName=#Unknown locale [bo]
[BN]
TitleName=#Unknown locale [bn]
[BH]
TitleName=#Unknown locale [bh]
[BG]
TitleName=#Unknown locale [bg]
[BE]
TitleName=#Unknown locale [be]
[AZ]
TitleName=#Unknown locale [az]
[AU]
TitleName=#Unknown locale [au]
[AT]
TitleName=#Unknown locale [at]
[AR]
TitleName=#Unknown locale [ar]
[AM]
TitleName=#Unknown locale [am]
[AL]
TitleName=#Unknown locale [al]
[AE]
TitleName=#Unknown locale [ae]
[default]
TitleName=#Known locale [default] - (fallback)
[EN]
TitleName=#Known locale [EN] - english
[JA]
TitleName=#Known locale [JA] - (japanese)
[DE]
TitleName=#Known locale [DE] - deutsch
[FR]
TitleName=#Known locale [FR] - francais
[ES]
TitleName=#Known locale [ES] - espanol
[IT]
TitleName=#Known locale [IT] - italiano
[KO]
TitleName=#Known locale [KO] - (korean)
[TW]
TitleName=#Known locale [TW] - (taiwanese)
[BR]
TitleName=#Known locale [BR] - (portugues)
</pre>
== THPS2X Syslink crash ==
Happens if too many servers are present (this is where data is written to driver?):
<pre>
Hardware watchpoint 1: *(int*)0xD004D048
Old value = 1065353216
New value = 1500647462
0x00215adf in ?? ()
(gdb) pint $eip
Undefined command: "pint". Try "help".
(gdb) print $eip
$1 = (void (*)()) 0x215adf
</pre>
And this seems to copy server to database (this in particular copied string?):
<pre>
Hardware watchpoint 1: *(int*)0xf47944
Old value = 926102321
New value = 858992984
0x00156cc3 in ?? ()
(gdb) print $eip
$2 = (void (*)()) 0x156cc3
(gdb) info reg
eax 0xd0043260 -805031328
ecx 0x1d 29
edx 0x0 0
ebx 0xf20ce0 15863008
esp 0xd004324c 0xd004324c
ebp 0xf20ce0 0xf20ce0
esi 0xd00432a0 -805031264
edi 0xf47948 16021832
eip 0x156cc3 0x156cc3
eflags 0x246 [ PF ZF IF ]
cs 0x8 8
ss 0x10 16
ds 0x10 16
es 0x10 16
fs 0x20 32
gs 0x0 0
(gdb) x/10i $eip
=> 0x156cc3: rep movsl %ds:(%esi),%es:(%edi)
0x156cc5: call 0x1b9db6
0x156cca: mov 0x29b44(%ebx),%ecx
0x156cd0: mov 0x10(%esp),%edx
0x156cd4: imul $0x78,%ecx,%ecx
0x156cd7: mov %edx,0x26ca8(%ecx,%ebx,1)
0x156cde: mov 0x14(%esp),%eax
0x156ce2: mov %eax,0x26cac(%ecx,%ebx,1)
0x156ce9: mov 0x29b44(%ebx),%eax
0x156cef: mov (%ebx),%edx
</pre>
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
* CPU cycles: X > 0
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
f850038888961bdb1c3074614b13a0749dce4222
6791
6790
2019-10-21T00:08:57Z
JayFoxRox
2
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== TitleMeta.xbx locales ==
Put this into a file and move it to "E:/UDATA/13371337/TitleMeta.xbx" and check which languages your MS dashboard supports (my results are from 1.00.5960.01 from Germany in NTSC mode):
<pre>
TitleName=#Known locale - (fallback, same as [default])
[ZW]
TitleName=#Unknown locale [zw]
[ZA]
TitleName=#Unknown locale [za]
[YE]
TitleName=#Unknown locale [ye]
[VN]
TitleName=#Unknown locale [vn]
[VE]
TitleName=#Unknown locale [ve]
[UZ]
TitleName=#Unknown locale [uz]
[UY]
TitleName=#Unknown locale [uy]
[US]
TitleName=#Unknown locale [us]
[UA]
TitleName=#Unknown locale [ua]
[TW]
TitleName=#Unknown locale [tw]
[TT]
TitleName=#Unknown locale [tt]
[TR]
TitleName=#Unknown locale [tr]
[TN]
TitleName=#Unknown locale [tn]
[TH]
TitleName=#Unknown locale [th]
[SY]
TitleName=#Unknown locale [sy]
[SV]
TitleName=#Unknown locale [sv]
[SK]
TitleName=#Unknown locale [sk]
[SI]
TitleName=#Unknown locale [si]
[SG]
TitleName=#Unknown locale [sg]
[SE]
TitleName=#Unknown locale [se]
[SA]
TitleName=#Unknown locale [sa]
[RU]
TitleName=#Unknown locale [ru]
[RO]
TitleName=#Unknown locale [ro]
[QA]
TitleName=#Unknown locale [qa]
[PY]
TitleName=#Unknown locale [py]
[PT]
TitleName=#Unknown locale [pt]
[PR]
TitleName=#Unknown locale [pr]
[PL]
TitleName=#Unknown locale [pl]
[PK]
TitleName=#Unknown locale [pk]
[PH]
TitleName=#Unknown locale [ph]
[PE]
TitleName=#Unknown locale [pe]
[PA]
TitleName=#Unknown locale [pa]
[OM]
TitleName=#Unknown locale [om]
[NZ]
TitleName=#Unknown locale [nz]
[NO]
TitleName=#Unknown locale [no]
[NL]
TitleName=#Unknown locale [nl]
[NI]
TitleName=#Unknown locale [ni]
[MY]
TitleName=#Unknown locale [my]
[MX]
TitleName=#Unknown locale [mx]
[MV]
TitleName=#Unknown locale [mv]
[MO]
TitleName=#Unknown locale [mo]
[MN]
TitleName=#Unknown locale [mn]
[MK]
TitleName=#Unknown locale [mk]
[MC]
TitleName=#Unknown locale [mc]
[MA]
TitleName=#Unknown locale [ma]
[LY]
TitleName=#Unknown locale [ly]
[LV]
TitleName=#Unknown locale [lv]
[LU]
TitleName=#Unknown locale [lu]
[LT]
TitleName=#Unknown locale [lt]
[LI]
TitleName=#Unknown locale [li]
[LB]
TitleName=#Unknown locale [lb]
[KZ]
TitleName=#Unknown locale [kz]
[KW]
TitleName=#Unknown locale [kw]
[KR]
TitleName=#Unknown locale [kr]
[KG]
TitleName=#Unknown locale [kg]
[KE]
TitleName=#Unknown locale [ke]
[JP]
TitleName=#Unknown locale [jp]
[JO]
TitleName=#Unknown locale [jo]
[JM]
TitleName=#Unknown locale [jm]
[IT]
TitleName=#Unknown locale [it]
[IS]
TitleName=#Unknown locale [is]
[IR]
TitleName=#Unknown locale [ir]
[IQ]
TitleName=#Unknown locale [iq]
[IN]
TitleName=#Unknown locale [in]
[IL]
TitleName=#Unknown locale [il]
[IE]
TitleName=#Unknown locale [ie]
[ID]
TitleName=#Unknown locale [id]
[HU]
TitleName=#Unknown locale [hu]
[HR]
TitleName=#Unknown locale [hr]
[HN]
TitleName=#Unknown locale [hn]
[HK]
TitleName=#Unknown locale [hk]
[GT]
TitleName=#Unknown locale [gt]
[GR]
TitleName=#Unknown locale [gr]
[GE]
TitleName=#Unknown locale [ge]
[GB]
TitleName=#Unknown locale [gb]
[FR]
TitleName=#Unknown locale [fr]
[FO]
TitleName=#Unknown locale [fo]
[FI]
TitleName=#Unknown locale [fi]
[ES]
TitleName=#Unknown locale [es]
[EG]
TitleName=#Unknown locale [eg]
[EE]
TitleName=#Unknown locale [ee]
[EC]
TitleName=#Unknown locale [ec]
[DZ]
TitleName=#Unknown locale [dz]
[DO]
TitleName=#Unknown locale [do]
[DK]
TitleName=#Unknown locale [dk]
[DE]
TitleName=#Unknown locale [de]
[CZ]
TitleName=#Unknown locale [cz]
[CR]
TitleName=#Unknown locale [cr]
[CO]
TitleName=#Unknown locale [co]
[CN]
TitleName=#Unknown locale [cn]
[CL]
TitleName=#Unknown locale [cl]
[CH]
TitleName=#Unknown locale [ch]
[CA]
TitleName=#Unknown locale [ca]
[BZ]
TitleName=#Unknown locale [bz]
[BY]
TitleName=#Unknown locale [by]
[BR]
TitleName=#Unknown locale [br]
[BO]
TitleName=#Unknown locale [bo]
[BN]
TitleName=#Unknown locale [bn]
[BH]
TitleName=#Unknown locale [bh]
[BG]
TitleName=#Unknown locale [bg]
[BE]
TitleName=#Unknown locale [be]
[AZ]
TitleName=#Unknown locale [az]
[AU]
TitleName=#Unknown locale [au]
[AT]
TitleName=#Unknown locale [at]
[AR]
TitleName=#Unknown locale [ar]
[AM]
TitleName=#Unknown locale [am]
[AL]
TitleName=#Unknown locale [al]
[AE]
TitleName=#Unknown locale [ae]
[default]
TitleName=#Known locale [default] - (fallback)
[EN]
TitleName=#Known locale [EN] - english
[JA]
TitleName=#Known locale [JA] - (japanese)
[DE]
TitleName=#Known locale [DE] - deutsch
[FR]
TitleName=#Known locale [FR] - francais
[ES]
TitleName=#Known locale [ES] - espanol
[IT]
TitleName=#Known locale [IT] - italiano
[KO]
TitleName=#Known locale [KO] - (korean)
[TW]
TitleName=#Known locale [TW] - (taiwanese)
[BR]
TitleName=#Known locale [BR] - portugues
</pre>
== THPS2X Syslink crash ==
Happens if too many servers are present (this is where data is written to driver?):
<pre>
Hardware watchpoint 1: *(int*)0xD004D048
Old value = 1065353216
New value = 1500647462
0x00215adf in ?? ()
(gdb) pint $eip
Undefined command: "pint". Try "help".
(gdb) print $eip
$1 = (void (*)()) 0x215adf
</pre>
And this seems to copy server to database (this in particular copied string?):
<pre>
Hardware watchpoint 1: *(int*)0xf47944
Old value = 926102321
New value = 858992984
0x00156cc3 in ?? ()
(gdb) print $eip
$2 = (void (*)()) 0x156cc3
(gdb) info reg
eax 0xd0043260 -805031328
ecx 0x1d 29
edx 0x0 0
ebx 0xf20ce0 15863008
esp 0xd004324c 0xd004324c
ebp 0xf20ce0 0xf20ce0
esi 0xd00432a0 -805031264
edi 0xf47948 16021832
eip 0x156cc3 0x156cc3
eflags 0x246 [ PF ZF IF ]
cs 0x8 8
ss 0x10 16
ds 0x10 16
es 0x10 16
fs 0x20 32
gs 0x0 0
(gdb) x/10i $eip
=> 0x156cc3: rep movsl %ds:(%esi),%es:(%edi)
0x156cc5: call 0x1b9db6
0x156cca: mov 0x29b44(%ebx),%ecx
0x156cd0: mov 0x10(%esp),%edx
0x156cd4: imul $0x78,%ecx,%ecx
0x156cd7: mov %edx,0x26ca8(%ecx,%ebx,1)
0x156cde: mov 0x14(%esp),%eax
0x156ce2: mov %eax,0x26cac(%ecx,%ebx,1)
0x156ce9: mov 0x29b44(%ebx),%eax
0x156cef: mov (%ebx),%edx
</pre>
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
* CPU cycles: X > 0
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
7df753feec12f39e446bf9aaf5f82fd3f18460dd
6792
6791
2019-10-21T00:12:22Z
JayFoxRox
2
Add more info about locales
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== TitleMeta.xbx locales ==
Put this into a file and move it to "E:/UDATA/13371337/TitleMeta.xbx" and check which languages your MS dashboard supports.
I have dumped the locales from a list in xboxdash.xbe in dashboard version 1.00.5960.01 from Germany.
I've then tried all languages that my Xbox dashboard supported in NTSC mode.
<pre>
TitleName=#Known locale - (fallback, same as [default])
[ZW]
TitleName=#Unknown locale [zw]
[ZA]
TitleName=#Unknown locale [za]
[YE]
TitleName=#Unknown locale [ye]
[VN]
TitleName=#Unknown locale [vn]
[VE]
TitleName=#Unknown locale [ve]
[UZ]
TitleName=#Unknown locale [uz]
[UY]
TitleName=#Unknown locale [uy]
[US]
TitleName=#Unknown locale [us]
[UA]
TitleName=#Unknown locale [ua]
[TW]
TitleName=#Unknown locale [tw]
[TT]
TitleName=#Unknown locale [tt]
[TR]
TitleName=#Unknown locale [tr]
[TN]
TitleName=#Unknown locale [tn]
[TH]
TitleName=#Unknown locale [th]
[SY]
TitleName=#Unknown locale [sy]
[SV]
TitleName=#Unknown locale [sv]
[SK]
TitleName=#Unknown locale [sk]
[SI]
TitleName=#Unknown locale [si]
[SG]
TitleName=#Unknown locale [sg]
[SE]
TitleName=#Unknown locale [se]
[SA]
TitleName=#Unknown locale [sa]
[RU]
TitleName=#Unknown locale [ru]
[RO]
TitleName=#Unknown locale [ro]
[QA]
TitleName=#Unknown locale [qa]
[PY]
TitleName=#Unknown locale [py]
[PT]
TitleName=#Unknown locale [pt]
[PR]
TitleName=#Unknown locale [pr]
[PL]
TitleName=#Unknown locale [pl]
[PK]
TitleName=#Unknown locale [pk]
[PH]
TitleName=#Unknown locale [ph]
[PE]
TitleName=#Unknown locale [pe]
[PA]
TitleName=#Unknown locale [pa]
[OM]
TitleName=#Unknown locale [om]
[NZ]
TitleName=#Unknown locale [nz]
[NO]
TitleName=#Unknown locale [no]
[NL]
TitleName=#Unknown locale [nl]
[NI]
TitleName=#Unknown locale [ni]
[MY]
TitleName=#Unknown locale [my]
[MX]
TitleName=#Unknown locale [mx]
[MV]
TitleName=#Unknown locale [mv]
[MO]
TitleName=#Unknown locale [mo]
[MN]
TitleName=#Unknown locale [mn]
[MK]
TitleName=#Unknown locale [mk]
[MC]
TitleName=#Unknown locale [mc]
[MA]
TitleName=#Unknown locale [ma]
[LY]
TitleName=#Unknown locale [ly]
[LV]
TitleName=#Unknown locale [lv]
[LU]
TitleName=#Unknown locale [lu]
[LT]
TitleName=#Unknown locale [lt]
[LI]
TitleName=#Unknown locale [li]
[LB]
TitleName=#Unknown locale [lb]
[KZ]
TitleName=#Unknown locale [kz]
[KW]
TitleName=#Unknown locale [kw]
[KR]
TitleName=#Unknown locale [kr]
[KG]
TitleName=#Unknown locale [kg]
[KE]
TitleName=#Unknown locale [ke]
[JP]
TitleName=#Unknown locale [jp]
[JO]
TitleName=#Unknown locale [jo]
[JM]
TitleName=#Unknown locale [jm]
[IT]
TitleName=#Unknown locale [it]
[IS]
TitleName=#Unknown locale [is]
[IR]
TitleName=#Unknown locale [ir]
[IQ]
TitleName=#Unknown locale [iq]
[IN]
TitleName=#Unknown locale [in]
[IL]
TitleName=#Unknown locale [il]
[IE]
TitleName=#Unknown locale [ie]
[ID]
TitleName=#Unknown locale [id]
[HU]
TitleName=#Unknown locale [hu]
[HR]
TitleName=#Unknown locale [hr]
[HN]
TitleName=#Unknown locale [hn]
[HK]
TitleName=#Unknown locale [hk]
[GT]
TitleName=#Unknown locale [gt]
[GR]
TitleName=#Unknown locale [gr]
[GE]
TitleName=#Unknown locale [ge]
[GB]
TitleName=#Unknown locale [gb]
[FR]
TitleName=#Unknown locale [fr]
[FO]
TitleName=#Unknown locale [fo]
[FI]
TitleName=#Unknown locale [fi]
[ES]
TitleName=#Unknown locale [es]
[EG]
TitleName=#Unknown locale [eg]
[EE]
TitleName=#Unknown locale [ee]
[EC]
TitleName=#Unknown locale [ec]
[DZ]
TitleName=#Unknown locale [dz]
[DO]
TitleName=#Unknown locale [do]
[DK]
TitleName=#Unknown locale [dk]
[DE]
TitleName=#Unknown locale [de]
[CZ]
TitleName=#Unknown locale [cz]
[CR]
TitleName=#Unknown locale [cr]
[CO]
TitleName=#Unknown locale [co]
[CN]
TitleName=#Unknown locale [cn]
[CL]
TitleName=#Unknown locale [cl]
[CH]
TitleName=#Unknown locale [ch]
[CA]
TitleName=#Unknown locale [ca]
[BZ]
TitleName=#Unknown locale [bz]
[BY]
TitleName=#Unknown locale [by]
[BR]
TitleName=#Unknown locale [br]
[BO]
TitleName=#Unknown locale [bo]
[BN]
TitleName=#Unknown locale [bn]
[BH]
TitleName=#Unknown locale [bh]
[BG]
TitleName=#Unknown locale [bg]
[BE]
TitleName=#Unknown locale [be]
[AZ]
TitleName=#Unknown locale [az]
[AU]
TitleName=#Unknown locale [au]
[AT]
TitleName=#Unknown locale [at]
[AR]
TitleName=#Unknown locale [ar]
[AM]
TitleName=#Unknown locale [am]
[AL]
TitleName=#Unknown locale [al]
[AE]
TitleName=#Unknown locale [ae]
[default]
TitleName=#Known locale [default] - (fallback)
[EN]
TitleName=#Known locale [EN] - english
[JA]
TitleName=#Known locale [JA] - (japanese)
[DE]
TitleName=#Known locale [DE] - deutsch
[FR]
TitleName=#Known locale [FR] - francais
[ES]
TitleName=#Known locale [ES] - espanol
[IT]
TitleName=#Known locale [IT] - italiano
[KO]
TitleName=#Known locale [KO] - (korean)
[TW]
TitleName=#Known locale [TW] - (taiwanese)
[BR]
TitleName=#Known locale [BR] - portugues
</pre>
== THPS2X Syslink crash ==
Happens if too many servers are present (this is where data is written to driver?):
<pre>
Hardware watchpoint 1: *(int*)0xD004D048
Old value = 1065353216
New value = 1500647462
0x00215adf in ?? ()
(gdb) pint $eip
Undefined command: "pint". Try "help".
(gdb) print $eip
$1 = (void (*)()) 0x215adf
</pre>
And this seems to copy server to database (this in particular copied string?):
<pre>
Hardware watchpoint 1: *(int*)0xf47944
Old value = 926102321
New value = 858992984
0x00156cc3 in ?? ()
(gdb) print $eip
$2 = (void (*)()) 0x156cc3
(gdb) info reg
eax 0xd0043260 -805031328
ecx 0x1d 29
edx 0x0 0
ebx 0xf20ce0 15863008
esp 0xd004324c 0xd004324c
ebp 0xf20ce0 0xf20ce0
esi 0xd00432a0 -805031264
edi 0xf47948 16021832
eip 0x156cc3 0x156cc3
eflags 0x246 [ PF ZF IF ]
cs 0x8 8
ss 0x10 16
ds 0x10 16
es 0x10 16
fs 0x20 32
gs 0x0 0
(gdb) x/10i $eip
=> 0x156cc3: rep movsl %ds:(%esi),%es:(%edi)
0x156cc5: call 0x1b9db6
0x156cca: mov 0x29b44(%ebx),%ecx
0x156cd0: mov 0x10(%esp),%edx
0x156cd4: imul $0x78,%ecx,%ecx
0x156cd7: mov %edx,0x26ca8(%ecx,%ebx,1)
0x156cde: mov 0x14(%esp),%eax
0x156ce2: mov %eax,0x26cac(%ecx,%ebx,1)
0x156ce9: mov 0x29b44(%ebx),%eax
0x156cef: mov (%ebx),%edx
</pre>
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
* CPU cycles: X > 0
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
c1738c6b67e146f7de6164276a1d0c7f817751e6
6794
6792
2019-10-24T15:53:11Z
JayFoxRox
2
Add more savegame notes
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Savegame notes ==
There's no database or anything for savegames - the directory-listing APIs are used to enumerate all savegames.
The data is obviously in E:/UDATA/.
Each XBE has a subdirectory for it's title-id.
Then each save is a subdirectory (I'm not sure about the name; but it's some 48-bit hex value).
XAPI would normally initialize title-images before `main()` of the XBE.
The data is copied from sections "$$XTIMAGE" (TitleImage.xbx) and "$XSIMAGE" (saveimage.xbx in savegame folder).
I believe the saveimage can differ for different save-games, which implies that they probably have another API.
I'm also not sure where it would put saveimages, because no savegame exists then.
The images are [[XPR]], and could theoretically be any format supported by the GPU.
The dashboard expects them to be swizzled (checks on load imply this), but linear textures might still work.
Metadata is stored in TitleMeta.xbx and SaveMeta.xbx (in savegame folder).
I'm not sure when / how they are initialized.
I'm not sure if they are already shown in the dashboard, even if metadata is missing.
Metadata are INI files, which are implicitly prefixed with `[default]`.
I don't think there's any comments allowed.
I believe that XAPI has a hardcoded emitter. Whereas the dashboard has some INI parser.
I'm not sure about the parser in XAPI (or if it even has one).
I believe metadata also supports keys without values.
When reading, it will try to read a localized version first, before reading from the `[default]` section.
I have looked at many savegames, but had never seen this. I'm not sure if this was ever used.
I believe the metadata files can be ASCII or Unicode (using [Unicode BOM prefix](https://en.wikipedia.org/wiki/Byte_order_mark))
Titledata in E:/TDATA is similar.
The user soundtrack / music collection is using a database file. See [[Soundtracks]].
=== TitleMeta.xbx locales ===
Put this into a file and move it to "E:/UDATA/13371337/TitleMeta.xbx" and check which languages your MS dashboard supports.
I have dumped the locales from a list in xboxdash.xbe in dashboard version 1.00.5960.01 from Germany.
I've then tried all languages that my Xbox dashboard supported in NTSC mode.
<pre>
TitleName=#Known locale - (fallback, same as [default])
[ZW]
TitleName=#Unknown locale [zw]
[ZA]
TitleName=#Unknown locale [za]
[YE]
TitleName=#Unknown locale [ye]
[VN]
TitleName=#Unknown locale [vn]
[VE]
TitleName=#Unknown locale [ve]
[UZ]
TitleName=#Unknown locale [uz]
[UY]
TitleName=#Unknown locale [uy]
[US]
TitleName=#Unknown locale [us]
[UA]
TitleName=#Unknown locale [ua]
[TW]
TitleName=#Unknown locale [tw]
[TT]
TitleName=#Unknown locale [tt]
[TR]
TitleName=#Unknown locale [tr]
[TN]
TitleName=#Unknown locale [tn]
[TH]
TitleName=#Unknown locale [th]
[SY]
TitleName=#Unknown locale [sy]
[SV]
TitleName=#Unknown locale [sv]
[SK]
TitleName=#Unknown locale [sk]
[SI]
TitleName=#Unknown locale [si]
[SG]
TitleName=#Unknown locale [sg]
[SE]
TitleName=#Unknown locale [se]
[SA]
TitleName=#Unknown locale [sa]
[RU]
TitleName=#Unknown locale [ru]
[RO]
TitleName=#Unknown locale [ro]
[QA]
TitleName=#Unknown locale [qa]
[PY]
TitleName=#Unknown locale [py]
[PT]
TitleName=#Unknown locale [pt]
[PR]
TitleName=#Unknown locale [pr]
[PL]
TitleName=#Unknown locale [pl]
[PK]
TitleName=#Unknown locale [pk]
[PH]
TitleName=#Unknown locale [ph]
[PE]
TitleName=#Unknown locale [pe]
[PA]
TitleName=#Unknown locale [pa]
[OM]
TitleName=#Unknown locale [om]
[NZ]
TitleName=#Unknown locale [nz]
[NO]
TitleName=#Unknown locale [no]
[NL]
TitleName=#Unknown locale [nl]
[NI]
TitleName=#Unknown locale [ni]
[MY]
TitleName=#Unknown locale [my]
[MX]
TitleName=#Unknown locale [mx]
[MV]
TitleName=#Unknown locale [mv]
[MO]
TitleName=#Unknown locale [mo]
[MN]
TitleName=#Unknown locale [mn]
[MK]
TitleName=#Unknown locale [mk]
[MC]
TitleName=#Unknown locale [mc]
[MA]
TitleName=#Unknown locale [ma]
[LY]
TitleName=#Unknown locale [ly]
[LV]
TitleName=#Unknown locale [lv]
[LU]
TitleName=#Unknown locale [lu]
[LT]
TitleName=#Unknown locale [lt]
[LI]
TitleName=#Unknown locale [li]
[LB]
TitleName=#Unknown locale [lb]
[KZ]
TitleName=#Unknown locale [kz]
[KW]
TitleName=#Unknown locale [kw]
[KR]
TitleName=#Unknown locale [kr]
[KG]
TitleName=#Unknown locale [kg]
[KE]
TitleName=#Unknown locale [ke]
[JP]
TitleName=#Unknown locale [jp]
[JO]
TitleName=#Unknown locale [jo]
[JM]
TitleName=#Unknown locale [jm]
[IT]
TitleName=#Unknown locale [it]
[IS]
TitleName=#Unknown locale [is]
[IR]
TitleName=#Unknown locale [ir]
[IQ]
TitleName=#Unknown locale [iq]
[IN]
TitleName=#Unknown locale [in]
[IL]
TitleName=#Unknown locale [il]
[IE]
TitleName=#Unknown locale [ie]
[ID]
TitleName=#Unknown locale [id]
[HU]
TitleName=#Unknown locale [hu]
[HR]
TitleName=#Unknown locale [hr]
[HN]
TitleName=#Unknown locale [hn]
[HK]
TitleName=#Unknown locale [hk]
[GT]
TitleName=#Unknown locale [gt]
[GR]
TitleName=#Unknown locale [gr]
[GE]
TitleName=#Unknown locale [ge]
[GB]
TitleName=#Unknown locale [gb]
[FR]
TitleName=#Unknown locale [fr]
[FO]
TitleName=#Unknown locale [fo]
[FI]
TitleName=#Unknown locale [fi]
[ES]
TitleName=#Unknown locale [es]
[EG]
TitleName=#Unknown locale [eg]
[EE]
TitleName=#Unknown locale [ee]
[EC]
TitleName=#Unknown locale [ec]
[DZ]
TitleName=#Unknown locale [dz]
[DO]
TitleName=#Unknown locale [do]
[DK]
TitleName=#Unknown locale [dk]
[DE]
TitleName=#Unknown locale [de]
[CZ]
TitleName=#Unknown locale [cz]
[CR]
TitleName=#Unknown locale [cr]
[CO]
TitleName=#Unknown locale [co]
[CN]
TitleName=#Unknown locale [cn]
[CL]
TitleName=#Unknown locale [cl]
[CH]
TitleName=#Unknown locale [ch]
[CA]
TitleName=#Unknown locale [ca]
[BZ]
TitleName=#Unknown locale [bz]
[BY]
TitleName=#Unknown locale [by]
[BR]
TitleName=#Unknown locale [br]
[BO]
TitleName=#Unknown locale [bo]
[BN]
TitleName=#Unknown locale [bn]
[BH]
TitleName=#Unknown locale [bh]
[BG]
TitleName=#Unknown locale [bg]
[BE]
TitleName=#Unknown locale [be]
[AZ]
TitleName=#Unknown locale [az]
[AU]
TitleName=#Unknown locale [au]
[AT]
TitleName=#Unknown locale [at]
[AR]
TitleName=#Unknown locale [ar]
[AM]
TitleName=#Unknown locale [am]
[AL]
TitleName=#Unknown locale [al]
[AE]
TitleName=#Unknown locale [ae]
[default]
TitleName=#Known locale [default] - (fallback)
[EN]
TitleName=#Known locale [EN] - english
[JA]
TitleName=#Known locale [JA] - (japanese)
[DE]
TitleName=#Known locale [DE] - deutsch
[FR]
TitleName=#Known locale [FR] - francais
[ES]
TitleName=#Known locale [ES] - espanol
[IT]
TitleName=#Known locale [IT] - italiano
[KO]
TitleName=#Known locale [KO] - (korean)
[TW]
TitleName=#Known locale [TW] - (taiwanese)
[BR]
TitleName=#Known locale [BR] - portugues
</pre>
== THPS2X Syslink crash ==
Happens if too many servers are present (this is where data is written to driver?):
<pre>
Hardware watchpoint 1: *(int*)0xD004D048
Old value = 1065353216
New value = 1500647462
0x00215adf in ?? ()
(gdb) pint $eip
Undefined command: "pint". Try "help".
(gdb) print $eip
$1 = (void (*)()) 0x215adf
</pre>
And this seems to copy server to database (this in particular copied string?):
<pre>
Hardware watchpoint 1: *(int*)0xf47944
Old value = 926102321
New value = 858992984
0x00156cc3 in ?? ()
(gdb) print $eip
$2 = (void (*)()) 0x156cc3
(gdb) info reg
eax 0xd0043260 -805031328
ecx 0x1d 29
edx 0x0 0
ebx 0xf20ce0 15863008
esp 0xd004324c 0xd004324c
ebp 0xf20ce0 0xf20ce0
esi 0xd00432a0 -805031264
edi 0xf47948 16021832
eip 0x156cc3 0x156cc3
eflags 0x246 [ PF ZF IF ]
cs 0x8 8
ss 0x10 16
ds 0x10 16
es 0x10 16
fs 0x20 32
gs 0x0 0
(gdb) x/10i $eip
=> 0x156cc3: rep movsl %ds:(%esi),%es:(%edi)
0x156cc5: call 0x1b9db6
0x156cca: mov 0x29b44(%ebx),%ecx
0x156cd0: mov 0x10(%esp),%edx
0x156cd4: imul $0x78,%ecx,%ecx
0x156cd7: mov %edx,0x26ca8(%ecx,%ebx,1)
0x156cde: mov 0x14(%esp),%eax
0x156ce2: mov %eax,0x26cac(%ecx,%ebx,1)
0x156ce9: mov 0x29b44(%ebx),%eax
0x156cef: mov (%ebx),%edx
</pre>
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
* CPU cycles: X > 0
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
25d1d8cec3c26c0e3edc17e2dea7ecce4f4ce627
XQEMU
0
3695
6793
6449
2019-10-23T16:38:13Z
JayFoxRox
2
Remove full compatiblity list and clarify the state of the existing list
wikitext
text/x-wiki
xqemu is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes[https://github.com/espes/xqemu/commit/d823f5802e7c4c84163aea8b4d924044951c705e].
The official homepage can be found at [http://xqemu.com xqemu.com]
== Compatiblity list ==
There is a temporary compatibility list that was almost entirely created by [https://www.youtube.com/user/pcmaker2 pcmaker (also known as John Godgames)] since 2015. The [https://docs.google.com/spreadsheets/d/1sVtQ9SNPathKAMCqfYtvJQP0bs0UeLzP9otPHvZDMwE/edit#gid=709879345 newest compatibility list from 2018] still has some problems though. You should not blindly trust these reports.
A major issue is that the version information for some reports is incorrect.
This means that some games are reported as working, when they don't work in official versions (yet).
They were tested with development versions build by developers, using incomplete features.
Some of those features might also not be public anymore, so you can't even repeat those tests.
XQEMU is also under development, new features in the official versions might have resolved some issues, or caused new ones.
You should only use these compatibility reports to get a rough idea about the state of XQEMU and where development is heading.
You can also search for XQEMU videos on YouTube (like "XQEMU Halo") and you'll usually find something.
Note that many of those videos are also made using development builds that aren't always public.
Typically, the video descriptions contain more information about the used builds.
== XQEMU-JFR ==
XQEMU-JFR is a now defunct fork of XQEMU by JayFoxRox.
Most of the changes have since been integrated back into the official version of XQEMU.
The archived version can be found at https://github.com/JayFoxRox/xqemu-jfr
3de52cfac763a407f4d3c07a6e41992bf52c8691
XPR
0
3991
6795
2019-10-24T16:32:44Z
JayFoxRox
2
Add some rough information about XPRs
wikitext
text/x-wiki
'''XPR''' probably stands for '''Xbox Packed Resource'''. It's a structure and file-format used by the [[Microsoft XDK]].
It is being used in parts of [[XAPI]].
XPRs can store a variety of different data types that are useful for Xbox D3D.
XPRs are storing data similar to internal structures in the D3D driver. So D3D has mechanisms to simply load such resources into D3D objects (by moving them into GPU accessible memory).
The structure is something like this{{FIXME|Untested pseudo-code}}:
<pre>
struct {
char magic[4]; // Always "XPR0" / 0x30525058
uint32_t size; // Size of XPR (including magic and this field)
uint32_t header_size; // Size of the following header (always 2048?)
} XPR;
</pre>
This is followed by:
<pre>
union {
struct {
union {
uint32_t flags; // Type information and who "owns" this resource
struct {
uint32_t ref_count:16; // (lowest bits)
uint32_t type:3;
uint32_t unk3:13; // (highest bits)
};
};
union { // Vertexbuffer (type 0x0)
...
} vertexbuffer;
union { // Indexbuffer (type 0x1)
...
} indexbuffer;
union { // Unknown (type 0x2)
...
} ...;
union { // Unknown (type 0x3)
...
} ...;
union { // Texture (type 0x4)
uint32_t unk0; // Always 0?
uint32_t unk1; // Always 0?
uint32_t format; // GPU register
uint32_t unk2; // Always 0?
uint32_t end; // Always 0xFFFFFFFF
} texture;
union { // Unknown (type 0x5)
...
} ...;
union { // Unknown (type 0x6)
...
} ...;
union { // Unknown (type 0x7)
...
} ...;
};
uint8_t pad[2048]; // Padded with 0xAD bytes
} XPR_header;
</pre>
{{FIXME|one of the unknowns in the texture is probably offset into data}}
The headers are then followed by the resource data.
ffd2253c90173a205f83dbc7f533130ebe1e7b46
File:LFRAME-for-v1 3-and-up.png
6
3992
6796
2019-10-26T18:29:16Z
Haxar
2485
Image extracted from LFRAME-for-v1_3-and-up.pdf
wikitext
text/x-wiki
Image extracted from LFRAME-for-v1_3-and-up.pdf
c3b8659c479fe3455c6abec502d632988a50ecc1
File:Dreimer-lframe-v1-3-reconnect.jpg
6
3993
6797
2019-10-26T18:33:31Z
Haxar
2485
Image provided by dreimer
wikitext
text/x-wiki
Image provided by dreimer
cca8a249e0d069c8004563a061e54942c058b766
File:Dreimer-lframe-v1-3-windbg.png
6
3994
6798
2019-10-26T18:34:18Z
Haxar
2485
Image provided by dreimer
wikitext
text/x-wiki
Image provided by dreimer
cca8a249e0d069c8004563a061e54942c058b766
LPC Debug Port
0
3909
6799
6764
2019-10-26T18:47:32Z
Haxar
2485
Embed LFRAME# reconnection images from external links
wikitext
text/x-wiki
{|class="wikitable" style="float:right;margin-left:10px;"
|+ Pin Layout
|-
! style="text-align:right" | Name !! style="text-align:right" | Pin !! Pin !! Name
|-
| style="text-align:right" | SERIRQ (v1.0) || style="text-align:right" | 16 || 15 || 3.3V
|-
| style="text-align:right" | SDA || style="text-align:right" | 14 || 13 || SCL
|-
| style="text-align:right" | GND || style="text-align:right" | 12 || 11 || LAD0
|-
| style="text-align:right" | LAD1 || style="text-align:right" | 10 || 9 || 3.3V
|-
| style="text-align:right" | LAD2 || style="text-align:right" | 8 || 7 || LAD3
|-
| style="text-align:right" | 5V || style="text-align:right" | 6 || 5 || LRESET#
|-
| style="text-align:right" | PWR (v1.6) || style="text-align:right" | 4 || 3 || LFRAME#
|-
| style="text-align:right" | GND || style="text-align:right" | 2 || 1 || LCLK
|}
The '''LPC Debug Port''' is an unpopulated 2x8 2.54mm (0.1") footprint on the Xbox motherboard that provides access to the system's [https://en.wikipedia.org/wiki/Low_Pin_Count Low Pin Count] Bus, as well as the [[SMBus]]. Throughout the Xbox's lifetime, Microsoft modified the LPC port in an attempt to prevent modding and, in some cases, it must be "rebuilt" to restore the port's full functionality. Rebuilding the LPC debug port involves soldering wires between it and very small vias on the motherboard.
The LPC bus is controlled by the [[MCPX|MCPX southbridge]], which conforms to the Intel Low Pin Count Specification 1.0.
== Pins ==
* '''3.3V''' (15 & 9) - Provides 3.3V while the Xbox is powered on. On 1.6 hardware, pin 9 is disconnected. Reconnect to pin 15 to restore the supply voltage.
* '''SDA''' (14) - [[SMBus]] data and address signal.
* '''SCL''' (13) - [[SMBus]] clock signal.
* '''GND''' (12 & 2) - Ground.
* '''LAD[3:0]''' (11, 10, 8, 7) - LPC address and data signals.
* '''5V''' (6) - Provides 5V while the Xbox is powered on or v1.6 always on when AC plugged in.
* '''LRESET#''' (5) - LPC reset signal; same as PCIRST#.
* '''PWR''' (4) - On pre-1.6 hardware, this pin does not physically exist. On 1.6 hardware, this pin is connected to the power button. Shorting it to ground will turn the Xbox on and off.
* '''LFRAME#''' (3) - LPC start-of-cycle signal. On 1.3-1.5 hardware, this pin is disconnected. See [[LPC_Debug_Port#LFRAME.23_reconnect|LFRAME# reconnect]] for a possible reconnection.
* '''LCLK''' (1) - 33MHz LPC clock signal; same as PCICLK.
The debug port lacks the optional LDRQ#, SERIRQ, CLKRUN#, PME#, LPCPD#, and LSMI# signals. This means peripherals connected to the debug port cannot utilize interrupt, DMA, bus mastering, or power management features.
== LFRAME# reconnect ==
[[File:LFRAME-for-v1_3-and-up.png|thumb|200px|Disconnected LFRAME# can be reconstructed with via found on all [[MCPX]] revisions]]
It is possible to reconnect the LFRAME# signal to the LPC port on 1.3-1.5 hardware by tapping the MCPX soldermask and soldering a jumper wire from the via to the disconnected pin on the LPC port.
Result should look similar to this:
[[File:Dreimer-lframe-v1-3-reconnect.jpg|500px|Image provided by dreimer]]
In the end, we can gain kernel debug output from Super I/O serial again:
[[File:Dreimer-lframe-v1-3-windbg.png|500px|Image provided by dreimer]]
This reconnection was tested on 1.3 hardware, and should also work with the later 1.4 and 1.5 revisions.
== References ==
* [https://web.archive.org/web/20140805105234/http://dwl.xbox-scene.com/~xbox/xbox-scene/tutorials/LFRAME-for-v1_3-and-up.pdf LFRAME-for-v1_3-and-up.pdf] An old manual from Xbox-Scene that explains how to reconnect '''LFRAME#''' (3) for a Cheapmod. This we don't care about, but is what we want for [[Kernel_Debug|kernel debugging]] via [[Super_I/O|Super I/O]]. Thanks to dreimer for finding and testing this documentation.
f08d7bd3d7d8cbb7d8b47f83e6a311566961c6bf
Microsoft XDK
0
12
6800
5845
2019-11-19T17:03:02Z
PatrickvL
2473
inserted 3944, moved (*) after version number
wikitext
text/x-wiki
The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times.
== List of known versions ==
{| class="wikitable"
! Version
! Comments
|-
! 3424
| April 2001 XDK and SDK (03.01.01 - New for April XDK release)
|-
! 3521
| May XDK 2001
|-
! 3911(*)
| August XDK 2001 (( Final Hardware Recovery) (build on WIN2000 5. 2134/2195 ? 5.1.2258.400)
|-
! 3925(*)
| Retail? XDK
|-
! 3936(*)
|
|-
! 3937(*)
|
|-
! 3941(*)
|
|-
! 3944(*)
| Seen in 5933 symbols folder
|-
! 3948(*)
|
|-
! 3950(*)
|
|-
! 4020(*)
| Seen on an official Xbox recovery tool
|-
! 4034(*)
|
|-
! 4039(*)
|
|-
! 4134(*)
| December 2001 XDK
|-
! 4242(*)
| February 2002 XDK
|-
! 4361
| March 2002 XDK
|-
! 4400
| rare
|-
! 4432
| April 2002 XDK
|-
! 4531
| May 2002 XDK
|-
! 4627
| June 2002 XDK
|-
! 4721
| July 2002 XDK
|-
! 4831
| August 2002 XDK
|-
! 4928
| September 2002 XDK
|-
! 5028
| October 2002 XDK
|-
! 5120
| November 2002 XDK
|-
! 5233
| December 2002 XDK
|-
! 5344
| February 2003 XDK
|-
! 5455
| April 2003 XDK
|-
! 5558
| June 2003 XDK
|-
! 5659
| August 2003 XDK
|-
! 5788
| November 2003 XDK
|-
! 5849
| December 2003 XDK
|-
! 5849
| .16
|-
! 5933
| uncertain number - Dxbx code mentions 5911 (wich seemed incorrect)
|-
! 5960
| last official dashboard
|}
(*) : Earlier XDK's contained libraries with different versions numbers. Before or around XDK version 4361, all libraries in the XDK were given the same version number.
Note : An even more complete listing can be found here : http://codeasm.com/xbox/files/Xbox%20Kernel_Dash_XDK%20versions.txt
26f16400282c2379d61f7ab890038418a98b1102
Exploits
0
3751
6801
6713
2019-12-11T14:25:36Z
Codeasm
2480
/* Frogger Beyond */ added source for Frogger (disappointingly not much)
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
be4111a5710e582d74ec2d5ef33f1e5de3942f9c
6809
6801
2019-12-23T22:21:04Z
JayFoxRox
2
Add analysis of 007 savegame exploit
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnnies book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
e19ad3a59c8db7a265a0422dd1f9fd7b174ca574
6832
6809
2020-02-07T20:40:25Z
Redherring32
2513
/* TEA attack (MCPX 1.1 only) */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnie's book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-R{{FIXME|reason=Add region / product codes and other DVDs you know of}}. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run homebrew from DVD-R.
|-
|'''Star Wars: Clone Wars - Volume Two'''
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
[[Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD with Demo'''
[[Lego Star Wars 2]]
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
[[Battlefront]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
[[Doom 3]]
Untested
|-
|'''Hulk (Special Edition)'''
[[Hulk]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
[[Van Helsing]]
Untested
|-
|'''Clone Wars Volume 1'''
[[Republic Commando]]
Untested
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
2baebb0a433d3297753219842c9ce8bdedcac66d
Development Kits
0
3822
6802
6461
2019-12-15T21:44:00Z
Redherring32
2513
Fixed various types, and adjusted some sentences to read easier/better.
wikitext
text/x-wiki
There are a few hardware differences and software differences between development kits, but generally the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are differences internally from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the development kits and debugkits.
Some rare boards are found with different MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unknown port) its been rumored that the blocked USB port (unblocked on DVT3) on the back of Development kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel.
The alpha hardware allowed kernel debugging to be done over one of the rs232 ports and standard WinDBG software can make these messages and control work.
This allows of careful debugging of the running kernel to diagnose occuring faults or errors.
At early boot of the recovery software, a network IP address is attempted, probably to setup for another way of diagnosing and remote control using the available software like later XDK software.
The Alpha is built with the following parts or software:
=== Alpha I ===
* Intel VC820, running a pre-release BIOS
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforce 2 GTS 64MB
* A xircom PCPGI2(OPTI 82C861) 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
* Hard drive is a WD205AA (20.5 Gb) or fujitsu MPF3204AT (20.4 Gb)
* ATNG 250w or a 300w powersupply
These were then programmed by use of a recovery disk that "recovered" the system.
The case is a customized globalwin ycc-802. (color silver and an added jewel)
=== Alpha II ===
The Alpha II was an upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN
* Nvidia Geforce3 NV20 (64MB ram) with a Pre-retail firmware (180-p0050-0000-a09)
A supplied Recovery made the necessary firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha.
Same hardware as a Alpha I/II, but you dont seem to need the pre-retail firmwares or BIOSes.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out sub-board isn't necessary, as VGA seems to work fine. color or different kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while intentionally incorrectly installing or configuring the computer.
These results may vary with official parts, configs, BIOS or firmware. Or due to differences in hardware.
These are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primary channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen connected (VGA or S-video)
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas or only for the particular motherboard that was being tested.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).DVT3 seems to have the back USB port to be uncovered and a slightly more glossy or shinier jewel on the top of the case. According to some sources, the DVT3 cannot be updated to further kernels/dashboards than 3911, the lowest/oldest being 3823.1(Borman said this?){{citation needed}}
All functions a debug with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
e9b6375b1c8845719d1cb9329b471d68e6240a5e
6803
6802
2019-12-15T21:45:10Z
Redherring32
2513
/* DVT3/DVT4 */
wikitext
text/x-wiki
There are a few hardware differences and software differences between development kits, but generally the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are differences internally from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the development kits and debugkits.
Some rare boards are found with different MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unknown port) its been rumored that the blocked USB port (unblocked on DVT3) on the back of Development kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel.
The alpha hardware allowed kernel debugging to be done over one of the rs232 ports and standard WinDBG software can make these messages and control work.
This allows of careful debugging of the running kernel to diagnose occuring faults or errors.
At early boot of the recovery software, a network IP address is attempted, probably to setup for another way of diagnosing and remote control using the available software like later XDK software.
The Alpha is built with the following parts or software:
=== Alpha I ===
* Intel VC820, running a pre-release BIOS
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforce 2 GTS 64MB
* A xircom PCPGI2(OPTI 82C861) 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
* Hard drive is a WD205AA (20.5 Gb) or fujitsu MPF3204AT (20.4 Gb)
* ATNG 250w or a 300w powersupply
These were then programmed by use of a recovery disk that "recovered" the system.
The case is a customized globalwin ycc-802. (color silver and an added jewel)
=== Alpha II ===
The Alpha II was an upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN
* Nvidia Geforce3 NV20 (64MB ram) with a Pre-retail firmware (180-p0050-0000-a09)
A supplied Recovery made the necessary firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha.
Same hardware as a Alpha I/II, but you dont seem to need the pre-retail firmwares or BIOSes.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out sub-board isn't necessary, as VGA seems to work fine. color or different kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while intentionally incorrectly installing or configuring the computer.
These results may vary with official parts, configs, BIOS or firmware. Or due to differences in hardware.
These are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primary channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen connected (VGA or S-video)
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas or only for the particular motherboard that was being tested.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).DVT3 seems to have the back USB port to be uncovered and a slightly more glossy or shinier jewel on the top of the case. According to some sources, the DVT3 cannot be updated to further kernels/dashboards than 3911, the lowest/oldest being 3823.1(Borman said this?){{citation needed}}
Has all the functions of a debug, with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
c8b71bba5892fe5642ef859a5cfdb9cd70de88e0
6804
6803
2019-12-15T21:46:16Z
Redherring32
2513
/* Posible solutions on fixing a (franken) alpha(2) */
wikitext
text/x-wiki
There are a few hardware differences and software differences between development kits, but generally the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more are differences internally from diferent MCP revisions, GPU revisions and board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the development kits and debugkits.
Some rare boards are found with different MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unknown port) its been rumored that the blocked USB port (unblocked on DVT3) on the back of Development kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel.
The alpha hardware allowed kernel debugging to be done over one of the rs232 ports and standard WinDBG software can make these messages and control work.
This allows of careful debugging of the running kernel to diagnose occuring faults or errors.
At early boot of the recovery software, a network IP address is attempted, probably to setup for another way of diagnosing and remote control using the available software like later XDK software.
The Alpha is built with the following parts or software:
=== Alpha I ===
* Intel VC820, running a pre-release BIOS
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforce 2 GTS 64MB
* A xircom PCPGI2(OPTI 82C861) 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
* Hard drive is a WD205AA (20.5 Gb) or fujitsu MPF3204AT (20.4 Gb)
* ATNG 250w or a 300w powersupply
These were then programmed by use of a recovery disk that "recovered" the system.
The case is a customized globalwin ycc-802. (color silver and an added jewel)
=== Alpha II ===
The Alpha II was an upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN
* Nvidia Geforce3 NV20 (64MB ram) with a Pre-retail firmware (180-p0050-0000-a09)
A supplied Recovery made the necessary firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha.
Same hardware as a Alpha I/II, but you dont seem to need the pre-retail firmwares or BIOSes.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out sub-board isn't necessary, as VGA seems to work fine. color or different kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while intentionally incorrectly installing or configuring the computer.
These results may vary with official parts, configs, BIOS or firmware. Or due to differences in hardware.
These are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primary channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen connected (VGA or S-video)
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas, or only for the particular motherboard that was being tested.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).DVT3 seems to have the back USB port to be uncovered and a slightly more glossy or shinier jewel on the top of the case. According to some sources, the DVT3 cannot be updated to further kernels/dashboards than 3911, the lowest/oldest being 3823.1(Borman said this?){{citation needed}}
Has all the functions of a debug, with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
b8fa2bc7779313a0f78e38349a5e05ddd5dc3aa4
6805
6804
2019-12-15T21:48:15Z
Redherring32
2513
wikitext
text/x-wiki
There are a few hardware differences and software differences between development kits, but generally the following hardware is known to be exist:
* Alpha I and II kits
* DVT3 Development Kits
* DVT4 Development Kits
* Debug kits
Further more there are differences internally from different MCPX revisions, and GPU revisions, to different board layouts. Sega Chihiro boards seem to be based on DVT4 Development/Debug kits. either using overproduction or on purpose produced MCPX-X2 as found in the development kits and debugkits.
Some rare boards are found with different MCPX chips that also have a special port near the CPU, and a extra USB port on the backside of the board (connected to the MCPX to unknown port) its been rumored that the blocked USB port (unblocked on DVT3) on the back of Development kits where either a leftover of these extra usb port or used for JVS development and/or testing.
== Alpha ==
{{FIXME| needs checking with real ALpha 1 and 2}}
Contructed using "off the shelf" hardware, probably before retail release from Intel.
The alpha hardware allowed kernel debugging to be done over one of the rs232 ports and standard WinDBG software can make these messages and control work.
This allows of careful debugging of the running kernel to diagnose occuring faults or errors.
At early boot of the recovery software, a network IP address is attempted, probably to setup for another way of diagnosing and remote control using the available software like later XDK software.
The Alpha is built with the following parts or software:
=== Alpha I ===
* Intel VC820, running a pre-release BIOS
* 128Mb RDRAM with an terminator
* 600Mhz CPU
* Nvidia Geforce 2 GTS 64MB
* A xircom PCPGI2(OPTI 82C861) 2 USB port PCI card
* Intel 82559(ic) Network card {{FIXME}}
* Hard drive is a WD205AA (20.5 Gb) or fujitsu MPF3204AT (20.4 Gb)
* ATNG 250w or a 300w powersupply
These were then programmed by use of a recovery disk that "recovered" the system.
The case is a customized globalwin ycc-802. (color silver and an added jewel)
=== Alpha II ===
The Alpha II was an upgrade kit or constructed the same as a Alpha I with the following upgrades:
* 733MHz CPU SL3XN
* Nvidia Geforce3 NV20 (64MB ram) with a Pre-retail firmware (180-p0050-0000-a09)
A supplied Recovery made the necessary firmware upgrades{{citation needed}} and updated the dashboard.
=== Franken Alpha ===
This is a listing of notes on how to make a Alpha I or II yourself, also known as a FrankenAlpha.
Same hardware as a Alpha I/II, but you dont seem to need the pre-retail firmwares or BIOSes.
Also, any Geforce3 is rumoured to work, as long as the GPU is of the NV20 series. The AV out sub-board isn't necessary, as VGA seems to work fine. color or different kinds of fans, cooling blocks or OEM vendor names doesnt seem to matter.
The Opti usb board can be green, yellow or black. as long as the IC sports the 82C861 wording.
if the VC820 sports any USB or Sound, it will not be used, the listed hardware boards are used instead, regardless of other hardware. (drivers arent in the kernel).
==== Posible solutions on fixing a (franken) alpha(2) ====
While fixing a frankenalpha, the following kernel errors occured while intentionally incorrectly installing or configuring the computer.
These results may vary with official parts, configs, BIOS or firmware. Or due to differences in hardware.
These are results from recovery 3521 as earlier ones did not work on the Alpha under test.
;IDEX hard disk not configured (status=51).
:HDD too small
;IDEX hard disk not configured (status=ff).
:HDD on the wrong bus, put on primary channel.(maybe wrong place on the cable itself) maybe add a jumper for master select?
;IDEX hard disk not found (status=7f).
:HDD not connected (or dead)
;MP No video output because you are using an older video card.
:Well, insert a Geforce3 card (NV20 based)
;WRN[XNET] EnetInitialize failed 0x801f0001
:Logo loads, with a halt when the sparkly bit is on the B of Xbox. The network card is missing, insert a GD82559 based intel network card FCC: EJMNPDALBANY (worked for me)
;[XNET] NicExecuteActionCmdAndWait failed!WRN[XNET] EnetInitialize failed 0x801f0001
:Network on wrong pci lane or no screen connected (VGA or S-video)
* Tested Slot 1 as good (real close to the GPU, would not recommend)
* Tested Slot 2 as not good
* Tested Slot 3 as not good (*** Assertion failed: hwres.ResourceData.Address[0].Type == CmResourceTypeMemory
* Tested Slot 4 as good
* Tested Slot 5 as not good
These might be wrong for official alphas, or only for the particular motherboard that was being tested.
== Debug ==
Shaped and main parts consist of retail hardware with the following differences:
* 128MB ram instead of default 64MB ram
* MCPX revision X2, thus capable of running only Debug signed code{{FIXME|reason= can it still run retail code?}}
* Hardisks loaded with retail and Debug shell files
== DVT3/DVT4 ==
Harddisk is said to be locked by default with a 16size byte 0x00 key, but allowing to run with an unlocked harddrive of any size(larger then 20GB{{citation needed}} for minimal OS).DVT3 seems to have the back USB port to be uncovered and a slightly more glossy or shinier jewel on the top of the case. According to some sources, the DVT3 cannot be updated to further kernels/dashboards than 3911, the lowest/oldest being 3823.1(Borman said this?){{citation needed}}
Has all the functions of a debug, with the addition of:
* [[DVD_Emulator | DVD emulation]]
* [[Kernel Debugging | Kernel_Debug]] over a dedicated [[Super_I/O | IO board ]]
f226a371507df1a6a381ff4edc2af09aa2fea522
Xbox DVD Movie Playback Kit
0
3768
6806
6687
2019-12-19T08:01:09Z
JayFoxRox
2
Add source for dongle having to do with licensing
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they didn't have to pay the [[wikipedia:DVD Forum|DVD Forum]] (and apparently also Dolby) for every Xbox sold, but just for every DVD Remote kit sold[https://www.youtube.com/watch?v=gquAV8f7OAY&t=2059]. This allowed them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used
// Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).
// A value close to 0x0040 is returned for continously holding a button.
// When holding, the value often goes back and forth between 0x0040 / 0x0041.
// It is unknown if the receiver / remote intentionally does this.
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit {{FIXME|reason=Document the protocol here}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
1bb84495821eb08b15a168d32049b3bd14280d66
Shrek
0
3720
6807
6518
2019-12-22T23:47:26Z
JayFoxRox
2
Add note about tweet which discusses Shrek
wikitext
text/x-wiki
{{Game}}
=== Deferred Rendering ===
[[File:shrek-albedo.png|thumb|Albedo]]
[[File:shrek-normals.png|thumb|Normals]]
[[File:shrek-unk0.png|thumb|Lighting pass{{FIXME|reason=Might be something else}}]]
[[File:shrek-unk1.png|thumb|Lighting pass{{FIXME|reason=Might be something else}}]]
[[File:shrek-final.png|thumb|Final composition]]
Shrek uses [[wikipedia:Deferred Rendering|Deferred Rendering]]. Rich Geldreich, a developer of the game, has written multiple articles about the topic[https://sites.google.com/site/richgel99/home].
=== Notes ===
* [https://twitter.com/richgel999/status/1208238264240361472 Tweet by Rich Geldreich about development in preparation for E3 demo of Shrek]
a86f617ce2f44ea99b3afc91a30c6d0115230fc3
Motherboard
0
3756
6808
6779
2019-12-23T17:51:38Z
JayFoxRox
2
Add links to existing PCB information
wikitext
text/x-wiki
For a list of differences between these mainboards, also see [[Hardware Revisions]].
== Xbox 1.0 ==
* [https://docs.google.com/spreadsheets/d/1oT4OtE95sguxA5KZrlwC_XEF3nlpzrql1ESycBGPtDA/edit#gid=0 Some measurements of passive components by Redherring32 (The Fish)]{{FIXME|reason=Taken from https://discordapp.com/channels/428359196719972353/428359434230693899/592363537343447040}}
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
The following table is based on an Xbox 1.0{{citation needed}} retail board.
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
=== USB Daughterboard ===
* [https://github.com/Teufelchen1/XBOX-USB-HUB Homemade PCB remake by Teufelchen]
[[File:USB_Daughterboard_front.png|100px|thumb|right|Xbox Version 1.0 USB Daughterboard]]
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== Xbox 1.1 ==
* [https://web.archive.org/web/20180210173816/http://diy.sickmods.net/Tutorials/Xbox1/Hi-Res_Scans/ PCB scan by SICKmods]{{FIXME|reason=Should live in some repo or something; we also have permission to this; https://discordapp.com/channels/428359196719972353/428359434230693899/561462101214756876 / https://media.discordapp.net/attachments/428359434230693899/561462101214756874/image0.png}}
{{FIXME}}
== Xbox 1.2 ==
{{FIXME}}
== Xbox 1.3 ==
{{FIXME}}
== Xbox 1.4 ==
* [https://drive.google.com/drive/folders/17s6jIVTE3YztuqDr-ZxkhhXRutcDdY9O PCB scan by LoveMHz]{{FIXME|reason=Should live in some repo or something}}
{{FIXME}}
== Xbox 1.5 ==
{{FIXME}}
== Xbox 1.6 ==
* [https://web.archive.org/web/20180210173816/http://diy.sickmods.net/Tutorials/Xbox1/Hi-Res_Scans/ PCB scan by SICKmods]{{FIXME|reason=Should live in some repo or something; we also have permission to this; https://discordapp.com/channels/428359196719972353/428359434230693899/561462101214756876 / https://media.discordapp.net/attachments/428359434230693899/561462101214756874/image0.png}}
{{FIXME}}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm Documentation by PiXEL8]
71b57b43b051482853ca5b2eb7712458e4e2326a
NV2A/Pixel Combiner
0
8
6810
6788
2019-12-30T18:05:59Z
JayFoxRox
2
Add some BRDF links
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|DOT_PRODUCT_DEPTH_REPLACE_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
=== 0x08: PS_TEXTUREMODES_BRDF / texbrdf ===
The BRDF texture shader is probably only exposed on original Xbox, but not in standard OpenGL or D3D drivers.
These are some generic resources about BRDFs:
* [https://math.nist.gov/~FHunt/appearance/brdf.html Collection of BRDF information]
* [http://www-graphics.stanford.edu/~smr/brdf/bv/ BRDF viewer]{{FIXME|reason=Find alternative; this one is hard to compile}}
* [https://www.merl.com/brdf/ BRDF Database by Mitsubishi]
{{FIXME|reason=Describe Xbox specific BRDF texture shader}}
{{FIXME|reason=Describe Xbox specific BRDF texture shader}}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the DISCARD and ZERO register are the same index: writes are discarded / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
dcd8e8ce32293f4af5361ea0399ad1b9e30ff0d6
6812
6810
2019-12-30T18:29:15Z
JayFoxRox
2
Add more nvidia BRDF links
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|DOT_PRODUCT_DEPTH_REPLACE_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
=== 0x08: PS_TEXTUREMODES_BRDF / texbrdf ===
The BRDF texture shader is probably only exposed on original Xbox, but not in standard OpenGL or D3D drivers.
These are some generic resources about BRDFs:
* [https://math.nist.gov/~FHunt/appearance/brdf.html Collection of BRDF information]
* [http://www-graphics.stanford.edu/~smr/brdf/bv/ BRDF viewer]{{FIXME|reason=Find alternative; this one is hard to compile}}
* [https://www.merl.com/brdf/ BRDF Database by Mitsubishi]
* nvidia resources ''(The code and technique is probably not using the texture shader that is described here)'':
** [http://www.nvidia.in/attach/6670 BRDFs.pdf] / [http://www.nvidia.in/attach/6669 BRDFs.ppt]
** [https://www.nvidia.com/attach/6568 BRDFIntro.pdf] / [https://www.nvidia.com/attach/6569 BRDFIntro.doc]
** [https://www.nvidia.com/attach/6567 BRDFSeparable.pdf] / [https://www.nvidia.com/attach/6566 BRDFSeparable.doc]
** [https://www.nvidia.com/attach/6570 brdfseparate.zip]
** [https://www.nvidia.com/attach/6571 brdfview.zip]
{{FIXME|reason=Describe Xbox specific BRDF texture shader}}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the DISCARD and ZERO register are the same index: writes are discarded / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
d2cc600e7a99a41e5a06e45659a735b13d07ad42
6817
6812
2020-01-01T20:58:59Z
JayFoxRox
2
BRDFSeparable.pdf currently not available through nvidia.com; use nvidia.co.uk
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|DOT_PRODUCT_DEPTH_REPLACE_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
=== 0x08: PS_TEXTUREMODES_BRDF / texbrdf ===
The BRDF texture shader is probably only exposed on original Xbox, but not in standard OpenGL or D3D drivers.
These are some generic resources about BRDFs:
* [https://math.nist.gov/~FHunt/appearance/brdf.html Collection of BRDF information]
* [http://www-graphics.stanford.edu/~smr/brdf/bv/ BRDF viewer]{{FIXME|reason=Find alternative; this one is hard to compile}}
* [https://www.merl.com/brdf/ BRDF Database by Mitsubishi]
* nvidia resources ''(The code and technique is probably not using the texture shader that is described here)'':
** [http://www.nvidia.in/attach/6670 BRDFs.pdf] / [http://www.nvidia.in/attach/6669 BRDFs.ppt]
** [https://www.nvidia.com/attach/6568 BRDFIntro.pdf] / [https://www.nvidia.com/attach/6569 BRDFIntro.doc]
** [https://www.nvidia.co.uk/attach/6567 BRDFSeparable.pdf] / [https://www.nvidia.com/attach/6566 BRDFSeparable.doc]
** [https://www.nvidia.com/attach/6570 brdfseparate.zip]
** [https://www.nvidia.com/attach/6571 brdfview.zip]
{{FIXME|reason=Describe Xbox specific BRDF texture shader}}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the DISCARD and ZERO register are the same index: writes are discarded / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
575c9b1e518aa3d701261948a59f1ad938a9e2a7
6819
6817
2020-01-04T02:12:33Z
JayFoxRox
2
Add works by Disney
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|DOT_PRODUCT_DEPTH_REPLACE_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
=== 0x08: PS_TEXTUREMODES_BRDF / texbrdf ===
The BRDF texture shader is probably only exposed on original Xbox, but not in standard OpenGL or D3D drivers.
These are some generic resources about BRDFs:
* [http://www.disneyanimation.com/technology/brdf.html Walt Disney BRDF Explorer]
* [https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf Walt Disney BRDF Paper]
* [https://math.nist.gov/~FHunt/appearance/brdf.html Collection of BRDF information]
* [http://www-graphics.stanford.edu/~smr/brdf/bv/ BRDF viewer]{{FIXME|reason=Find alternative; this one is hard to compile}}
* [https://www.merl.com/brdf/ BRDF Database by Mitsubishi]
* nvidia resources ''(The code and technique is probably not using the texture shader that is described here)'':
** [http://www.nvidia.in/attach/6670 BRDFs.pdf] / [http://www.nvidia.in/attach/6669 BRDFs.ppt]
** [https://www.nvidia.com/attach/6568 BRDFIntro.pdf] / [https://www.nvidia.com/attach/6569 BRDFIntro.doc]
** [https://www.nvidia.co.uk/attach/6567 BRDFSeparable.pdf] / [https://www.nvidia.com/attach/6566 BRDFSeparable.doc]
** [https://www.nvidia.com/attach/6570 brdfseparate.zip]
** [https://www.nvidia.com/attach/6571 brdfview.zip]
{{FIXME|reason=Describe Xbox specific BRDF texture shader}}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the DISCARD and ZERO register are the same index: writes are discarded / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
2d3ace46d39440693aa004286eed46f5dcc42ed4
Resources
0
3
6811
6604
2019-12-30T18:18:05Z
JayFoxRox
2
Add some more talks / links
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
=== Xbox Launch ===
* GDC2002: [https://www.powershow.com/download/6f1ff7-NmE2O/Xbox_Launch_Lessons_Learned_powerpoint_ppt_presentation Xbox Launch: Lessons Learned] ([https://www.gdcvault.com/play/1022522/Xbox-Launch-Lessons Audio])
=== Deferred Shading ===
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
== Background knowledge about related topics ==
* GDC2001: [http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf DirectX8 Pixel Shaders]
* [http://download.nvidia.com/developer/Papers/ Papers by nvidia from Xbox era]
* [http://download.nvidia.com/developer/presentations/ Presentation slides by nvidia from Xbox era]
* [http://download.nvidia.com/developer/movies/ Presentation recordings by nvidia from Xbox era]
* [http://download.nvidia.com/developer/NVTextureSuite/ Texturing tools by nvidia from Xbox era]
* [http://download.nvidia.com/developer/Tools/ Tools by nvidia from Xbox era]
* http://download.nvidia.com/developer/Third_Party/
1f5fe54fec97fe6466b2d651ba20a9d377c4a7a4
6814
6811
2019-12-30T19:00:10Z
JayFoxRox
2
Add more links about graphics programming
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
=== Xbox Launch ===
* GDC2002: [https://www.powershow.com/download/6f1ff7-NmE2O/Xbox_Launch_Lessons_Learned_powerpoint_ppt_presentation Xbox Launch: Lessons Learned] ([https://www.gdcvault.com/play/1022522/Xbox-Launch-Lessons Audio])
=== Deferred Shading ===
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
== Background knowledge about related topics and interesting effects ==
* Meltdown 2001 (Microsoft Game development conference): [https://web.archive.org/web/20060203201117/https://www.microsoft.com/mscorp/corpevents/meltdown2001/presentations.asp Presentation slides]
* GDC2001: [http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf DirectX8 Pixel Shaders]
* [http://download.nvidia.com/developer/Papers/ Papers by nvidia from Xbox era]
* [http://download.nvidia.com/developer/presentations/ Presentation slides by nvidia from Xbox era]
* [http://download.nvidia.com/developer/movies/ Presentation recordings by nvidia from Xbox era]
* [http://download.nvidia.com/developer/NVTextureSuite/ Texturing tools by nvidia from Xbox era]
* [http://download.nvidia.com/developer/Tools/ Tools by nvidia from Xbox era]
* http://download.nvidia.com/developer/Third_Party/
* http://iquilezles.org/www/index.htm
* https://web.archive.org/web/20150408045127/http://freespace.virgin.net/hugo.elias/
* http://www.mvps.org/directx/indexes/
* https://www.gdcvault.com/play/247/CRYSIS-Next-Gen ''(Contains some parts which are also applicable to original Xbox)''
* [https://www.valvesoftware.com/en/publications Publications by Valve Software]
* http://graphics.uni-konstanz.de/publikationen/Luft2006ImageEnhancementUnsharp/Luft2006ImageEnhancementUnsharp.pdf
c84083896552806f9bdbed3abcb111007acbed8e
6815
6814
2019-12-30T19:04:18Z
JayFoxRox
2
Add Wrecked links
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
=== Xbox Launch ===
* GDC2002: [https://www.powershow.com/download/6f1ff7-NmE2O/Xbox_Launch_Lessons_Learned_powerpoint_ppt_presentation Xbox Launch: Lessons Learned] ([https://www.gdcvault.com/play/1022522/Xbox-Launch-Lessons Audio])
=== Post processing ===
* CEDEC2002: [https://web.archive.org/web/20031212044938/http://www.daionet.gr.jp/~masa/column/2002-09-22.html DOUBLE-S.T.E.A.L techniques] ''(Japanese)''
* GDC2003: [https://web.archive.org/web/20031212140633/http://www.daionet.gr.jp/~masa/column/2003-03-21.html Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless)] ''(English)''
=== HDR rendering ===
* GDC2004: [https://web.archive.org/web/20060404103630/http://www.daionet.gr.jp/~masa/column/2004-04-04.html Practical Implementation of High Dynamic Range Rendering]
=== Deferred Shading ===
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
== Background knowledge about related topics and interesting effects ==
* Meltdown 2001 (Microsoft Game development conference): [https://web.archive.org/web/20060203201117/https://www.microsoft.com/mscorp/corpevents/meltdown2001/presentations.asp Presentation slides]
* GDC2001: [http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf DirectX8 Pixel Shaders]
* [http://download.nvidia.com/developer/Papers/ Papers by nvidia from Xbox era]
* [http://download.nvidia.com/developer/presentations/ Presentation slides by nvidia from Xbox era]
* [http://download.nvidia.com/developer/movies/ Presentation recordings by nvidia from Xbox era]
* [http://download.nvidia.com/developer/NVTextureSuite/ Texturing tools by nvidia from Xbox era]
* [http://download.nvidia.com/developer/Tools/ Tools by nvidia from Xbox era]
* http://download.nvidia.com/developer/Third_Party/
* http://iquilezles.org/www/index.htm
* https://web.archive.org/web/20150408045127/http://freespace.virgin.net/hugo.elias/
* http://www.mvps.org/directx/indexes/
* https://www.gdcvault.com/play/247/CRYSIS-Next-Gen ''(Contains some parts which are also applicable to original Xbox)''
* [https://www.valvesoftware.com/en/publications Publications by Valve Software]
* http://graphics.uni-konstanz.de/publikationen/Luft2006ImageEnhancementUnsharp/Luft2006ImageEnhancementUnsharp.pdf
26076b08ef4a090574d83524c6e0f8fedf1b6c73
6816
6815
2019-12-30T19:07:22Z
JayFoxRox
2
Add more links and categorize background knowledge
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
=== Xbox Launch ===
* GDC2002: [https://www.powershow.com/download/6f1ff7-NmE2O/Xbox_Launch_Lessons_Learned_powerpoint_ppt_presentation Xbox Launch: Lessons Learned] ([https://www.gdcvault.com/play/1022522/Xbox-Launch-Lessons Audio])
=== Post processing ===
* CEDEC2002: [https://web.archive.org/web/20031212044938/http://www.daionet.gr.jp/~masa/column/2002-09-22.html DOUBLE-S.T.E.A.L techniques] ''(Japanese)''
* GDC2003: [https://web.archive.org/web/20031212140633/http://www.daionet.gr.jp/~masa/column/2003-03-21.html Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless)] ''(English)''
=== HDR rendering ===
* GDC2004: [https://web.archive.org/web/20060404103630/http://www.daionet.gr.jp/~masa/column/2004-04-04.html Practical Implementation of High Dynamic Range Rendering]
=== Deferred Shading ===
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
== Background knowledge about related topics ==
=== Graphics programming ===
* Meltdown 2001 (Microsoft Game development conference): [https://web.archive.org/web/20060203201117/https://www.microsoft.com/mscorp/corpevents/meltdown2001/presentations.asp Presentation slides]
* GDC2001: [http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf DirectX8 Pixel Shaders]
* [http://download.nvidia.com/developer/Papers/ Papers by nvidia from Xbox era]
* [http://download.nvidia.com/developer/presentations/ Presentation slides by nvidia from Xbox era]
* [http://download.nvidia.com/developer/movies/ Presentation recordings by nvidia from Xbox era]
* [http://download.nvidia.com/developer/NVTextureSuite/ Texturing tools by nvidia from Xbox era]
* [http://download.nvidia.com/developer/Tools/ Tools by nvidia from Xbox era]
* http://download.nvidia.com/developer/Third_Party/
* http://iquilezles.org/www/index.htm
* https://web.archive.org/web/20150408045127/http://freespace.virgin.net/hugo.elias/
* http://www.mvps.org/directx/indexes/
* https://www.gdcvault.com/play/247/CRYSIS-Next-Gen ''(Contains some parts which are also applicable to original Xbox)''
* [https://www.valvesoftware.com/en/publications Publications by Valve Software]
* http://graphics.uni-konstanz.de/publikationen/Luft2006ImageEnhancementUnsharp/Luft2006ImageEnhancementUnsharp.pdf
* [https://web.archive.org/web/20090518092325/http://www.daionet.gr.jp:80/~masa/column/index.html Masa's Column (DOUBLE-S.T.E.A.L / Wrecked developer)]
* [https://fgiesen.wordpress.com/ Blog by ryg]
e65b59717463f601b1f09b207edc37074c0329ad
6818
6816
2020-01-03T21:49:11Z
JayFoxRox
2
Add Filmic Worlds as graphics resource
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
=== Xbox Launch ===
* GDC2002: [https://www.powershow.com/download/6f1ff7-NmE2O/Xbox_Launch_Lessons_Learned_powerpoint_ppt_presentation Xbox Launch: Lessons Learned] ([https://www.gdcvault.com/play/1022522/Xbox-Launch-Lessons Audio])
=== Post processing ===
* CEDEC2002: [https://web.archive.org/web/20031212044938/http://www.daionet.gr.jp/~masa/column/2002-09-22.html DOUBLE-S.T.E.A.L techniques] ''(Japanese)''
* GDC2003: [https://web.archive.org/web/20031212140633/http://www.daionet.gr.jp/~masa/column/2003-03-21.html Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless)] ''(English)''
=== HDR rendering ===
* GDC2004: [https://web.archive.org/web/20060404103630/http://www.daionet.gr.jp/~masa/column/2004-04-04.html Practical Implementation of High Dynamic Range Rendering]
=== Deferred Shading ===
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
== Background knowledge about related topics ==
=== Graphics programming ===
* Meltdown 2001 (Microsoft Game development conference): [https://web.archive.org/web/20060203201117/https://www.microsoft.com/mscorp/corpevents/meltdown2001/presentations.asp Presentation slides]
* GDC2001: [http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf DirectX8 Pixel Shaders]
* [http://download.nvidia.com/developer/Papers/ Papers by nvidia from Xbox era]
* [http://download.nvidia.com/developer/presentations/ Presentation slides by nvidia from Xbox era]
* [http://download.nvidia.com/developer/movies/ Presentation recordings by nvidia from Xbox era]
* [http://download.nvidia.com/developer/NVTextureSuite/ Texturing tools by nvidia from Xbox era]
* [http://download.nvidia.com/developer/Tools/ Tools by nvidia from Xbox era]
* http://download.nvidia.com/developer/Third_Party/
* http://iquilezles.org/www/index.htm
* https://web.archive.org/web/20150408045127/http://freespace.virgin.net/hugo.elias/
* http://www.mvps.org/directx/indexes/
* https://www.gdcvault.com/play/247/CRYSIS-Next-Gen ''(Contains some parts which are also applicable to original Xbox)''
* [https://www.valvesoftware.com/en/publications Publications by Valve Software]
* http://graphics.uni-konstanz.de/publikationen/Luft2006ImageEnhancementUnsharp/Luft2006ImageEnhancementUnsharp.pdf
* [https://web.archive.org/web/20090518092325/http://www.daionet.gr.jp:80/~masa/column/index.html Masa's Column (DOUBLE-S.T.E.A.L / Wrecked developer)]
* [https://fgiesen.wordpress.com/ Blog by ryg]
* [http://filmicworlds.com/blog/ Filmic Worlds]
8d1168d9e1b13b139da10f6cc783dc3df409b40b
6820
6818
2020-01-04T02:14:27Z
JayFoxRox
2
Add AMD CubeMapGen link
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
=== Xbox Launch ===
* GDC2002: [https://www.powershow.com/download/6f1ff7-NmE2O/Xbox_Launch_Lessons_Learned_powerpoint_ppt_presentation Xbox Launch: Lessons Learned] ([https://www.gdcvault.com/play/1022522/Xbox-Launch-Lessons Audio])
=== Post processing ===
* CEDEC2002: [https://web.archive.org/web/20031212044938/http://www.daionet.gr.jp/~masa/column/2002-09-22.html DOUBLE-S.T.E.A.L techniques] ''(Japanese)''
* GDC2003: [https://web.archive.org/web/20031212140633/http://www.daionet.gr.jp/~masa/column/2003-03-21.html Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless)] ''(English)''
=== HDR rendering ===
* GDC2004: [https://web.archive.org/web/20060404103630/http://www.daionet.gr.jp/~masa/column/2004-04-04.html Practical Implementation of High Dynamic Range Rendering]
=== Deferred Shading ===
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
== Background knowledge about related topics ==
=== Graphics programming ===
* Meltdown 2001 (Microsoft Game development conference): [https://web.archive.org/web/20060203201117/https://www.microsoft.com/mscorp/corpevents/meltdown2001/presentations.asp Presentation slides]
* GDC2001: [http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf DirectX8 Pixel Shaders]
* [http://download.nvidia.com/developer/Papers/ Papers by nvidia from Xbox era]
* [http://download.nvidia.com/developer/presentations/ Presentation slides by nvidia from Xbox era]
* [http://download.nvidia.com/developer/movies/ Presentation recordings by nvidia from Xbox era]
* [http://download.nvidia.com/developer/NVTextureSuite/ Texturing tools by nvidia from Xbox era]
* [http://download.nvidia.com/developer/Tools/ Tools by nvidia from Xbox era]
* http://download.nvidia.com/developer/Third_Party/
* http://iquilezles.org/www/index.htm
* https://web.archive.org/web/20150408045127/http://freespace.virgin.net/hugo.elias/
* http://www.mvps.org/directx/indexes/
* https://www.gdcvault.com/play/247/CRYSIS-Next-Gen ''(Contains some parts which are also applicable to original Xbox)''
* [https://www.valvesoftware.com/en/publications Publications by Valve Software]
* http://graphics.uni-konstanz.de/publikationen/Luft2006ImageEnhancementUnsharp/Luft2006ImageEnhancementUnsharp.pdf
* [https://web.archive.org/web/20090518092325/http://www.daionet.gr.jp:80/~masa/column/index.html Masa's Column (DOUBLE-S.T.E.A.L / Wrecked developer)]
* [https://fgiesen.wordpress.com/ Blog by ryg]
* [http://filmicworlds.com/blog/ Filmic Worlds]
* [https://gpuopen.com/archive/gamescgi/cubemapgen/ AMD CubeMapGen tool for mipmapping cubemaps]
f2548616e1c1a7337e2d16d39c39df5119f2a99f
NV2A/Vertex Shader
0
9
6813
6637
2019-12-30T18:51:10Z
JayFoxRox
2
Add an interesting nvidia paper which describes some vertex shader tricks
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
!Index
!GL Name
!D3D Name
!Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
!Meaning
!Word
!Offset (bits)
!Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
!Value
!Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
=== Functional units ===
==== Inverse Logic Unit (ILU) ====
{| class="wikitable"
|+ILU Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|RCP
|-
|3
|RCC
|-
|4
|RSQ
|-
|5
|EXP
|-
|6
|LOG
|-
|7
|LIT
|}
==== Multiply-Accumulate (MAC) ====
{| class="wikitable"
|+MAC Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|MUL
|-
|3
|ADD
|-
|4
|MAD
|-
|5
|DP3
|-
|6
|DPH
|-
|7
|DP4
|-
|8
|DST
|-
|9
|MIN
|-
|10
|MAX
|-
|11
|SLT
|-
|12
|SGE
|-
|13
|ARL
|}
== Related links ==
* nvidia resources
** [https://www.nvidia.com/attach/6559 WhereIsThatVertexShaderInstruction.pdf] / [https://www.nvidia.com/attach/6560 WhereIsThatVertexShaderInstruction.doc]
* [https://github.com/envytools/envytools/blob/master/nvhw/pgraph_celsius_xfrm.c Code which appears to implement bit-accurate emulation of some instructions]{{FIXME|reason=Unconfirmed, needs testing}}
[[Category:NV2A]]
c26df947694641d8f5413e7250675c3a7c6a7220
Hard Drive
0
3707
6821
6727
2020-01-05T02:55:17Z
LoveMHz
2521
/* Further Reading */
wikitext
text/x-wiki
The original Xbox hard disk drive was 8 GB in size. Later releases, 10 GB drives; however, only the first 8 GB of the drive was used. See [[Hardware Revisions]] for more information.
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter{{FIXME|reason=This is under control of running application / variation even in official products?}}
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| N/A
| [[Config Sector|Config Area]]
| 0x00000000
| 0x00080000
| Fixed Structure
| N/A
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition3
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition4
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition5
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
| \Device\Harddisk0\Partition2
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
| \Device\Harddisk0\Partition1
|}
::::::::::::::::::::::''side note: CD/DVD Drive "D:" <=> "\Device\CdRom0"''
::::::::::::::::::::::''and usually: added Drive "F:" <=> "\Device\Harddisk0\Partition6"''{{FIXME|reason=Mark as unofficial / homebrew}}
::::::::::::::::::::::::: ''added Drive "G:" <=> "\Device\Harddisk0\Partition7"''{{FIXME|reason=Mark as unofficial / homebrew}}
'''Debug/Devkit HDD:'''
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
|-
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking ==
The hard drives in the Xbox are locked with a key which is unique to the specific Xbox. The drive is unlocked by the kernel at boot.
=== Unlocking for Backups ===
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [https://web.archive.org/web/20150502210033/http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
* [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
b922a582a50cf5f77b37972c2bab87a527663ade
Xbox Game Disc
0
3700
6822
6784
2020-01-20T03:28:57Z
JayFoxRox
2
Add Samsung SH-D162C stock links
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{FIXME|reason=Link missing}} <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123082109/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator.
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
717c3b21d8bd1bea6d8075e138cce780012269c8
6823
6822
2020-01-20T03:30:04Z
JayFoxRox
2
Undo previous change - those were SH-D162D links
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator.
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
972c6a8a54b442e5642aac262068b9d645129e18
6824
6823
2020-01-20T03:53:25Z
JayFoxRox
2
Add more firmwares via https://web.archive.org/web/*/http://www.samsungodd.com/*
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|[https://web.archive.org/web/20091206023615/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200506021808200872_SH-D162C_TS02.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS02] <br> [https://web.archive.org/web/20090604123608/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509161625477201_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS03<sup>Korean</sup>] <br> [https://web.archive.org/web/20091105003814/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509261128121531_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS03] <br> [https://web.archive.org/web/20100217012245/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200512221448334972_SH-D162C_TS04.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS04<sup>Korean</sup>] <br> [https://web.archive.org/web/20110920084807/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701091709466301_SH-D162C_TS05.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS05]
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|[https://web.archive.org/web/20110921065924/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200505121909111802_TS-H352C_SC00.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ SC00<sup>Korean</sup>]
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|CH01{{FIXME|reason=http://samsungodd.com/korLib/download.asp?no=200904281542399901_TS-H352D_CH01.exe&fname=200904281542399901_TS-H352D_CH01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> CM01{{FIXME|reason=https://web.archive.org/web/20100105225621/http://samsungodd.com/korLib/download.asp?no=200904281539184301_TS-H352D_CM01.exe&fname=200904281539184301_TS-H352D_CM01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> [https://web.archive.org/web/20100105234118/http://samsungodd.com/korLib/download.asp?no=200910081442017201_TS-H352D_CM02.exe&fname=200910081442017201_TS-H352D_CM02.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ CM02]
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|[https://web.archive.org/web/20090402052540/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191824214901_SH-D163B_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20091204131429/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200910081448023301_SH-D163B_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|[https://web.archive.org/web/*/http://samsungodd.com/chn/globalLib/Download.asp?path=Info_FWDownload&fname=200904281544595271_TS-H353B_CH01.exe CH01]
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator.
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
da8b0e319c83c4c3b0868e4e7891fa7c7fc358ba
6825
6824
2020-01-20T04:16:09Z
JayFoxRox
2
TS-H353B CH01 link is dead
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|[https://web.archive.org/web/20091206023615/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200506021808200872_SH-D162C_TS02.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS02] <br> [https://web.archive.org/web/20090604123608/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509161625477201_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS03<sup>Korean</sup>] <br> [https://web.archive.org/web/20091105003814/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509261128121531_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS03] <br> [https://web.archive.org/web/20100217012245/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200512221448334972_SH-D162C_TS04.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS04<sup>Korean</sup>] <br> [https://web.archive.org/web/20110920084807/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701091709466301_SH-D162C_TS05.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS05]
|rowspan=2 |
* SB00 Kreon 0.60 (July 30th 2006)
* SB00 Kreon 0.80 (September 9th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|[https://web.archive.org/web/20110921065924/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200505121909111802_TS-H352C_SC00.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ SC00<sup>Korean</sup>]
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|CH01{{FIXME|reason=http://samsungodd.com/korLib/download.asp?no=200904281542399901_TS-H352D_CH01.exe&fname=200904281542399901_TS-H352D_CH01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> CM01{{FIXME|reason=https://web.archive.org/web/20100105225621/http://samsungodd.com/korLib/download.asp?no=200904281539184301_TS-H352D_CM01.exe&fname=200904281539184301_TS-H352D_CM01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> [https://web.archive.org/web/20100105234118/http://samsungodd.com/korLib/download.asp?no=200910081442017201_TS-H352D_CM02.exe&fname=200910081442017201_TS-H352D_CM02.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ CM02]
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|[https://web.archive.org/web/20090402052540/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191824214901_SH-D163B_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20091204131429/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200910081448023301_SH-D163B_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|CH01{{FIXME|reason=https://web.archive.org/web/*/http://samsungodd.com/chn/globalLib/Download.asp?path=Info_FWDownload&fname=200904281544595271_TS-H353B_CH01.exe dead}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator.
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
d5d2319c26df4e4a536be8e82a02f6f4016d9b43
6826
6825
2020-01-20T05:23:14Z
JayFoxRox
2
Listed more Kreon versions for SH-D162C
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|[https://web.archive.org/web/20091206023615/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200506021808200872_SH-D162C_TS02.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS02] <br> [https://web.archive.org/web/20090604123608/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509161625477201_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS03<sup>Korean</sup>] <br> [https://web.archive.org/web/20091105003814/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509261128121531_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS03] <br> [https://web.archive.org/web/20100217012245/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200512221448334972_SH-D162C_TS04.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS04<sup>Korean</sup>] <br> [https://web.archive.org/web/20110920084807/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701091709466301_SH-D162C_TS05.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS05]
|rowspan=2 |
* TS04 Kreon 0.5 (June 23rd 2006)
* TS04 Kreon 0.60 (July 30th 2006)
* TS04 Kreon 0.80 (September 9th 2006)
* TS04{{FIXME|reason=README claims SB00}} Kreon 0.81 (October 4th 2006)
* TS05{{FIXME|reason=README claims SB01}} Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|[https://web.archive.org/web/20110921065924/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200505121909111802_TS-H352C_SC00.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ SC00<sup>Korean</sup>]
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|CH01{{FIXME|reason=http://samsungodd.com/korLib/download.asp?no=200904281542399901_TS-H352D_CH01.exe&fname=200904281542399901_TS-H352D_CH01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> CM01{{FIXME|reason=https://web.archive.org/web/20100105225621/http://samsungodd.com/korLib/download.asp?no=200904281539184301_TS-H352D_CM01.exe&fname=200904281539184301_TS-H352D_CM01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> [https://web.archive.org/web/20100105234118/http://samsungodd.com/korLib/download.asp?no=200910081442017201_TS-H352D_CM02.exe&fname=200910081442017201_TS-H352D_CM02.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ CM02]
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|[https://web.archive.org/web/20090402052540/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191824214901_SH-D163B_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20091204131429/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200910081448023301_SH-D163B_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|CH01{{FIXME|reason=https://web.archive.org/web/*/http://samsungodd.com/chn/globalLib/Download.asp?path=Info_FWDownload&fname=200904281544595271_TS-H353B_CH01.exe dead}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* TSDNMAC for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* TSDNWIN for Microsoft Windows Vista and 7
* Dell SFDNDOS and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator.
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
39cc71f471fb5d02a41aaf5995717f4d50314c53
6827
6826
2020-01-20T19:30:19Z
JayFoxRox
2
Add more flashing software
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|[https://web.archive.org/web/20091206023615/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200506021808200872_SH-D162C_TS02.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS02] <br> [https://web.archive.org/web/20090604123608/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509161625477201_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS03<sup>Korean</sup>] <br> [https://web.archive.org/web/20091105003814/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509261128121531_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS03] <br> [https://web.archive.org/web/20100217012245/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200512221448334972_SH-D162C_TS04.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS04<sup>Korean</sup>] <br> [https://web.archive.org/web/20110920084807/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701091709466301_SH-D162C_TS05.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS05]
|rowspan=2 |
* TS04 Kreon 0.5 (June 23rd 2006)
* TS04 Kreon 0.60 (July 30th 2006)
* TS04 Kreon 0.80 (September 9th 2006)
* TS04{{FIXME|reason=README claims SB00}} Kreon 0.81 (October 4th 2006)
* TS05{{FIXME|reason=README claims SB01}} Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|[https://web.archive.org/web/20110921065924/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200505121909111802_TS-H352C_SC00.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ SC00<sup>Korean</sup>]
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|CH01{{FIXME|reason=http://samsungodd.com/korLib/download.asp?no=200904281542399901_TS-H352D_CH01.exe&fname=200904281542399901_TS-H352D_CH01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> CM01{{FIXME|reason=https://web.archive.org/web/20100105225621/http://samsungodd.com/korLib/download.asp?no=200904281539184301_TS-H352D_CM01.exe&fname=200904281539184301_TS-H352D_CM01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> [https://web.archive.org/web/20100105234118/http://samsungodd.com/korLib/download.asp?no=200910081442017201_TS-H352D_CM02.exe&fname=200910081442017201_TS-H352D_CM02.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ CM02]
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|[https://web.archive.org/web/20090402052540/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191824214901_SH-D163B_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20091204131429/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200910081448023301_SH-D163B_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|CH01{{FIXME|reason=https://web.archive.org/web/*/http://samsungodd.com/chn/globalLib/Download.asp?path=Info_FWDownload&fname=200904281544595271_TS-H353B_CH01.exe dead}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* [https://web.archive.org/web/20160904080433/http://www.tsstodd.com:80/TotalLib/popup/Download.asp?path=program&lang=eng&fname=TSDNMAC.ZIP TSDNMAC] for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* [https://web.archive.org/web/20100105230358/http://samsungodd.com/KorLib/File/Tsdnwin.exe TSDNWIN] for Microsoft Windows Vista and 7
* [https://web.archive.org/web/20060328075340/http://www.samsungodd.com/eng/information/Application/Files/sfdndos.exe SFDNDOS] [https://web.archive.org/web/20060328072528/http://www.samsungodd.com/eng/information/Application/Files/Sfdndosm.exe SNFDOSM] and the newer TSDNDOS for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator.
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
1f4021c2476023337e188ff4f3734169ad59a840
6831
6827
2020-01-24T18:19:19Z
JayFoxRox
2
Add TSDNDOS link and fix typo
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|[https://web.archive.org/web/20091206023615/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200506021808200872_SH-D162C_TS02.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS02] <br> [https://web.archive.org/web/20090604123608/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509161625477201_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS03<sup>Korean</sup>] <br> [https://web.archive.org/web/20091105003814/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509261128121531_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS03] <br> [https://web.archive.org/web/20100217012245/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200512221448334972_SH-D162C_TS04.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS04<sup>Korean</sup>] <br> [https://web.archive.org/web/20110920084807/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701091709466301_SH-D162C_TS05.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS05]
|rowspan=2 |
* TS04 Kreon 0.5 (June 23rd 2006)
* TS04 Kreon 0.60 (July 30th 2006)
* TS04 Kreon 0.80 (September 9th 2006)
* TS04{{FIXME|reason=README claims SB00}} Kreon 0.81 (October 4th 2006)
* TS05{{FIXME|reason=README claims SB01}} Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|[https://web.archive.org/web/20110921065924/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200505121909111802_TS-H352C_SC00.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ SC00<sup>Korean</sup>]
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|CH01{{FIXME|reason=http://samsungodd.com/korLib/download.asp?no=200904281542399901_TS-H352D_CH01.exe&fname=200904281542399901_TS-H352D_CH01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> CM01{{FIXME|reason=https://web.archive.org/web/20100105225621/http://samsungodd.com/korLib/download.asp?no=200904281539184301_TS-H352D_CM01.exe&fname=200904281539184301_TS-H352D_CM01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> [https://web.archive.org/web/20100105234118/http://samsungodd.com/korLib/download.asp?no=200910081442017201_TS-H352D_CM02.exe&fname=200910081442017201_TS-H352D_CM02.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ CM02]
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|[https://web.archive.org/web/20090402052540/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191824214901_SH-D163B_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20091204131429/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200910081448023301_SH-D163B_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|CH01{{FIXME|reason=https://web.archive.org/web/*/http://samsungodd.com/chn/globalLib/Download.asp?path=Info_FWDownload&fname=200904281544595271_TS-H353B_CH01.exe dead}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* [https://web.archive.org/web/20160904080433/http://www.tsstodd.com:80/TotalLib/popup/Download.asp?path=program&lang=eng&fname=TSDNMAC.ZIP TSDNMAC] for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* [https://web.archive.org/web/20100105230358/http://samsungodd.com/KorLib/File/Tsdnwin.exe TSDNWIN] for Microsoft Windows Vista and 7
* [https://web.archive.org/web/20060328075340/http://www.samsungodd.com/eng/information/Application/Files/sfdndos.exe SFDNDOS] [https://web.archive.org/web/20060328072528/http://www.samsungodd.com/eng/information/Application/Files/Sfdndosm.exe SFDNDOSM] and the newer TSDNDOS ([https://www.dell.com/support/home/de/de/debsdt1/drivers/driversdetails?driverid=r205571 included here]) for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator.
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
b5012077c8180974b6830aa37210eaaf63564d46
Hardware Revisions
0
3669
6828
6783
2020-01-21T20:03:48Z
JayFoxRox
2
Combine existing GDR-8050L DVD drive sections (also fixes structure of article)
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
==== PHILLIPS VAD6053 ====
Also named: VAD6011/21 apear to have no brand or partnumber on its large main controller,might be Cirrus Logic based on its size and use of a Philips secondary smaller mcu. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC dvdrom drive Pioneer 500M with the Philips firmware to be a Xbox dvdrom drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at Xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
3c4ceca02157eb06b9e022126dfcf0ebc013c7f8
6829
6828
2020-01-21T21:51:17Z
JayFoxRox
2
Add link to "djhuevo script"
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
==== PHILLIPS VAD6053 ====
Also named: VAD6011/21 apear to have no brand or partnumber on its large main controller,might be Cirrus Logic based on its size and use of a Philips secondary smaller mcu. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC dvdrom drive Pioneer 500M with the Philips firmware to be a Xbox dvdrom drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
239a761770d8b24bc114b9b5918c5c4148417b23
6830
6829
2020-01-21T22:36:36Z
JayFoxRox
2
Add note about Commodore4Eva firmwares
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILLIPS VAD6053 ====
Also named: VAD6011/21 apear to have no brand or partnumber on its large main controller,might be Cirrus Logic based on its size and use of a Philips secondary smaller mcu. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC dvdrom drive Pioneer 500M with the Philips firmware to be a Xbox dvdrom drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
5012285db9b28bcc3ed675d9b19d8208c11015f7
Xbox Input Devices
0
11
6833
6766
2020-02-09T06:00:25Z
DiscoStarslayer
2509
Add Microsoft Gamepad Hardware revision findings to Wiki
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest Known Model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S {{FIXME|Reason=Missing Sticker on sample, name extrapolated from other models}}
|Unknown{{FIXME|Reason=Missing Sticker}}
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|x800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B Descriptors ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 64 | 8
idProduct: 0x0202 | 0x0289
bcdDevice: 1.00 | 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.20 | 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
7c8bc0d2c1575e5a2023e9bb3fdd5007989b2c67
6834
6833
2020-02-09T17:27:40Z
DiscoStarslayer
2509
Fixed some typos
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest Known Model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S {{FIXME|Reason=Missing Sticker on sample, name extrapolated from other models}}
|Unknown{{FIXME|Reason=Missing Sticker}}
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|x800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B Descriptors ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
23cc8e85993b6424250c1c458c2d816ae431554c
6835
6834
2020-02-09T17:49:46Z
DiscoStarslayer
2509
Added new controller discovery, 23-0923A
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest Known Model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S {{FIXME|Reason=Missing Sticker on sample, name extrapolated from other models}}
|Unknown{{FIXME|Reason=Missing Sticker}}
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B Descriptors ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== 23-0923A ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
366be741fac69563b76ad724016526bc6174a7e5
6836
6835
2020-02-09T20:35:33Z
DiscoStarslayer
2509
Captured 23-0923A lsusb dump
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest Known Model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S {{FIXME|Reason=Missing Sticker on sample, name extrapolated from other models}}
|Unknown{{FIXME|Reason=Missing Sticker}}
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B Descriptors ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
745adb7a74b72bdb4e4ab26dbe5b4808b679938a
6837
6836
2020-02-09T21:39:04Z
DiscoStarslayer
2509
Add new duke discoveries
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S {{FIXME|Reason=Missing Sticker on sample, name extrapolated from other models}}
|Unknown{{FIXME|Reason=Missing Sticker}}
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B Descriptors ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
5d2e5ad8255542ddf22a1cb619cdc58fb35a2c71
6838
6837
2020-02-09T21:42:26Z
DiscoStarslayer
2509
Document USB Descriptor changes
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S {{FIXME|Reason=Missing Sticker on sample, name extrapolated from other models}}
|Unknown{{FIXME|Reason=Missing Sticker}}
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B Descriptors ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
e415ea90fe6d4ac166196d39fcdb716a83a63fd8
6839
6838
2020-02-09T21:58:10Z
DiscoStarslayer
2509
Found new source for 23-0923B stickers
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B Descriptors ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
2bbae8ec671586eceed2f5787d67dde0d494961c
6840
6839
2020-02-09T22:05:48Z
DiscoStarslayer
2509
Add link to hardware research spreadsheet
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B Descriptors ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
c6e1930ae6d5cc00ad78f205ced1a5c4910ad4ec
6841
6840
2020-02-09T22:06:11Z
DiscoStarslayer
2509
Title consistency
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
da43f523be87c30f4c9b7c7981770d3ed9c11876
6842
6841
2020-02-09T22:20:43Z
DiscoStarslayer
2509
Add transparent green revision details
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter. Decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
39f9c144abd49f4dabf77aef06e6840bd9594a14
Xbox 360 Backward Compatibility
0
3701
6843
6701
2020-04-07T22:06:18Z
Chipsnapper
2523
changed Symantec link to archive.org, pdf file has been removed
wikitext
text/x-wiki
Xbox 360 Backward Compatibility is Microsofts original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPRDT section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [https://web.archive.org/web/20070216172548/https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter? eax points to a zero terminated list of pointers into the kernel memory [7 elements]
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter? " [4 elements]
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter? Seems to be some call to that address?!
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter? " [3 elements]
|-
| colspan="3" | Cleaner list starts here {{FIXME}}
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x21 ||
|-
| 0x04 || 0x22 ||
|-
| 0x04 || 0x23 ||
|-
| 0x04 || 0x24 ||
|-
| 0x04 || 0x35 ||
|-
| 0x04 || 0x50 ||
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter? Memory is 0x00 filled before. location is 0x8002b420, size would be 0x3000
|-
| 0x06 || 0x02 ||
|-
| 0x06 || 0x20 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x21 ||
|-
| 0x06 || 0x22 ||
|-
| 0x06 || 0x23 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x24 ||
|-
| 0x06 || 0x25 ||
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x40 ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages (Microsoft) page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://randomascii.wordpress.com/2019/03/20/exercises-in-emulation-xbox-360s-fma-instruction/ Blog post about FMA math emulation by Bruce Dawson (Microsoft)]
* [https://www.youtube.com/watch?v=Da_ont-2AG0 Modern Vintage Gamer: Revisiting Original Xbox Backward Compatibility on the Xbox 360]
b26bca1cc409091d9ffac92d5780bb38afccde94
Fusion
0
3995
6844
2020-04-07T22:07:39Z
Chipsnapper
2523
Redirected page to [[Xbox 360 Backward Compatibility]]
wikitext
text/x-wiki
#REDIRECT[[Xbox 360 Backward Compatibility]]
558670c3443bc50dfde79fcef49ba13a183cc024
Main Page
0
1
6845
6763
2020-04-07T22:08:46Z
Chipsnapper
2523
/* Emulation */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Fusion]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
bd4f18d023b4e59e74d1a34408a5f13cca98c9a3
6847
6845
2020-04-07T22:25:15Z
Chipsnapper
2523
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
59f3601fd013c666f6c4cbd5f099f90bdaca8e03
Fission
0
3996
6846
2020-04-07T22:24:52Z
Chipsnapper
2523
Created page with "'''Fission''' is Microsoft's Xbox emulator for Xbox One. Games run at four times native resolution on Xbox One and sixteen times native resolution on Xbox One X. ==Reference..."
wikitext
text/x-wiki
'''Fission''' is Microsoft's Xbox emulator for Xbox One.
Games run at four times native resolution on Xbox One and sixteen times native resolution on Xbox One X.
==References and links==
* [https://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility The Untold Story of Xbox One Backwards Compatibility - IGN]
* [https://en.wikipedia.org/wiki/List_of_backward_compatible_games_for_Xbox_One#List_of_compatible_titles_from_Xbox Compatible game list]
d0941d8b4cd7149afe0355d132f69f5d9e3a1b6f
File:TestUploadPleaseIgnore.jpg
6
3997
6848
2020-04-14T23:17:44Z
Espes
2484
Test Upload Please Ignore
wikitext
text/x-wiki
Test Upload Please Ignore
ff5a8d0c9517080598a6135412de952bcd1c8258
User:JayFoxRox
2
3948
6849
6794
2020-04-16T12:50:36Z
JayFoxRox
2
/* Savegame notes */
wikitext
text/x-wiki
For contact details, see http://jannikvogel.de/
= Unfinished information =
== Savegame notes ==
''Most of this had already been documented in [[Xbox Savegame System]]''
There's no database or anything for savegames - the directory-listing APIs are used to enumerate all savegames.
The data is obviously in E:/UDATA/.
Each XBE has a subdirectory for it's title-id.
Then each save is a subdirectory (I'm not sure about the name; but it's some 48-bit hex value).
XAPI would normally initialize title-images before `main()` of the XBE.
The data is copied from sections "$$XTIMAGE" (TitleImage.xbx) and "$XSIMAGE" (saveimage.xbx in savegame folder).
I believe the saveimage can differ for different save-games, which implies that they probably have another API.
I'm also not sure where it would put saveimages, because no savegame exists then.
The images are [[XPR]], and could theoretically be any format supported by the GPU.
The dashboard expects them to be swizzled (checks on load imply this), but linear textures might still work.
Metadata is stored in TitleMeta.xbx and SaveMeta.xbx (in savegame folder).
I'm not sure when / how they are initialized.
I'm not sure if they are already shown in the dashboard, even if metadata is missing.
Metadata are INI files, which are implicitly prefixed with `[default]`.
I don't think there's any comments allowed.
I believe that XAPI has a hardcoded emitter. Whereas the dashboard has some INI parser.
I'm not sure about the parser in XAPI (or if it even has one).
I believe metadata also supports keys without values.
When reading, it will try to read a localized version first, before reading from the `[default]` section.
I have looked at many savegames, but had never seen this. I'm not sure if this was ever used.
I believe the metadata files can be ASCII or Unicode (using [https://en.wikipedia.org/wiki/Byte_order_mark Unicode BOM prefix])
Titledata in E:/TDATA is similar.
The user soundtrack / music collection is using a database file. See [[Soundtracks]].
=== NoCopy flag ===
https://www.reddit.com/r/originalxbox/comments/c6pvi2/modify_xbox_game_saves/esb7omf/
=== TitleMeta.xbx locales ===
Put this into a file and move it to "E:/UDATA/13371337/TitleMeta.xbx" and check which languages your MS dashboard supports.
I have dumped the locales from a list in xboxdash.xbe in dashboard version 1.00.5960.01 from Germany.
I've then tried all languages that my Xbox dashboard supported in NTSC mode.
<pre>
TitleName=#Known locale - (fallback, same as [default])
[ZW]
TitleName=#Unknown locale [zw]
[ZA]
TitleName=#Unknown locale [za]
[YE]
TitleName=#Unknown locale [ye]
[VN]
TitleName=#Unknown locale [vn]
[VE]
TitleName=#Unknown locale [ve]
[UZ]
TitleName=#Unknown locale [uz]
[UY]
TitleName=#Unknown locale [uy]
[US]
TitleName=#Unknown locale [us]
[UA]
TitleName=#Unknown locale [ua]
[TW]
TitleName=#Unknown locale [tw]
[TT]
TitleName=#Unknown locale [tt]
[TR]
TitleName=#Unknown locale [tr]
[TN]
TitleName=#Unknown locale [tn]
[TH]
TitleName=#Unknown locale [th]
[SY]
TitleName=#Unknown locale [sy]
[SV]
TitleName=#Unknown locale [sv]
[SK]
TitleName=#Unknown locale [sk]
[SI]
TitleName=#Unknown locale [si]
[SG]
TitleName=#Unknown locale [sg]
[SE]
TitleName=#Unknown locale [se]
[SA]
TitleName=#Unknown locale [sa]
[RU]
TitleName=#Unknown locale [ru]
[RO]
TitleName=#Unknown locale [ro]
[QA]
TitleName=#Unknown locale [qa]
[PY]
TitleName=#Unknown locale [py]
[PT]
TitleName=#Unknown locale [pt]
[PR]
TitleName=#Unknown locale [pr]
[PL]
TitleName=#Unknown locale [pl]
[PK]
TitleName=#Unknown locale [pk]
[PH]
TitleName=#Unknown locale [ph]
[PE]
TitleName=#Unknown locale [pe]
[PA]
TitleName=#Unknown locale [pa]
[OM]
TitleName=#Unknown locale [om]
[NZ]
TitleName=#Unknown locale [nz]
[NO]
TitleName=#Unknown locale [no]
[NL]
TitleName=#Unknown locale [nl]
[NI]
TitleName=#Unknown locale [ni]
[MY]
TitleName=#Unknown locale [my]
[MX]
TitleName=#Unknown locale [mx]
[MV]
TitleName=#Unknown locale [mv]
[MO]
TitleName=#Unknown locale [mo]
[MN]
TitleName=#Unknown locale [mn]
[MK]
TitleName=#Unknown locale [mk]
[MC]
TitleName=#Unknown locale [mc]
[MA]
TitleName=#Unknown locale [ma]
[LY]
TitleName=#Unknown locale [ly]
[LV]
TitleName=#Unknown locale [lv]
[LU]
TitleName=#Unknown locale [lu]
[LT]
TitleName=#Unknown locale [lt]
[LI]
TitleName=#Unknown locale [li]
[LB]
TitleName=#Unknown locale [lb]
[KZ]
TitleName=#Unknown locale [kz]
[KW]
TitleName=#Unknown locale [kw]
[KR]
TitleName=#Unknown locale [kr]
[KG]
TitleName=#Unknown locale [kg]
[KE]
TitleName=#Unknown locale [ke]
[JP]
TitleName=#Unknown locale [jp]
[JO]
TitleName=#Unknown locale [jo]
[JM]
TitleName=#Unknown locale [jm]
[IT]
TitleName=#Unknown locale [it]
[IS]
TitleName=#Unknown locale [is]
[IR]
TitleName=#Unknown locale [ir]
[IQ]
TitleName=#Unknown locale [iq]
[IN]
TitleName=#Unknown locale [in]
[IL]
TitleName=#Unknown locale [il]
[IE]
TitleName=#Unknown locale [ie]
[ID]
TitleName=#Unknown locale [id]
[HU]
TitleName=#Unknown locale [hu]
[HR]
TitleName=#Unknown locale [hr]
[HN]
TitleName=#Unknown locale [hn]
[HK]
TitleName=#Unknown locale [hk]
[GT]
TitleName=#Unknown locale [gt]
[GR]
TitleName=#Unknown locale [gr]
[GE]
TitleName=#Unknown locale [ge]
[GB]
TitleName=#Unknown locale [gb]
[FR]
TitleName=#Unknown locale [fr]
[FO]
TitleName=#Unknown locale [fo]
[FI]
TitleName=#Unknown locale [fi]
[ES]
TitleName=#Unknown locale [es]
[EG]
TitleName=#Unknown locale [eg]
[EE]
TitleName=#Unknown locale [ee]
[EC]
TitleName=#Unknown locale [ec]
[DZ]
TitleName=#Unknown locale [dz]
[DO]
TitleName=#Unknown locale [do]
[DK]
TitleName=#Unknown locale [dk]
[DE]
TitleName=#Unknown locale [de]
[CZ]
TitleName=#Unknown locale [cz]
[CR]
TitleName=#Unknown locale [cr]
[CO]
TitleName=#Unknown locale [co]
[CN]
TitleName=#Unknown locale [cn]
[CL]
TitleName=#Unknown locale [cl]
[CH]
TitleName=#Unknown locale [ch]
[CA]
TitleName=#Unknown locale [ca]
[BZ]
TitleName=#Unknown locale [bz]
[BY]
TitleName=#Unknown locale [by]
[BR]
TitleName=#Unknown locale [br]
[BO]
TitleName=#Unknown locale [bo]
[BN]
TitleName=#Unknown locale [bn]
[BH]
TitleName=#Unknown locale [bh]
[BG]
TitleName=#Unknown locale [bg]
[BE]
TitleName=#Unknown locale [be]
[AZ]
TitleName=#Unknown locale [az]
[AU]
TitleName=#Unknown locale [au]
[AT]
TitleName=#Unknown locale [at]
[AR]
TitleName=#Unknown locale [ar]
[AM]
TitleName=#Unknown locale [am]
[AL]
TitleName=#Unknown locale [al]
[AE]
TitleName=#Unknown locale [ae]
[default]
TitleName=#Known locale [default] - (fallback)
[EN]
TitleName=#Known locale [EN] - english
[JA]
TitleName=#Known locale [JA] - (japanese)
[DE]
TitleName=#Known locale [DE] - deutsch
[FR]
TitleName=#Known locale [FR] - francais
[ES]
TitleName=#Known locale [ES] - espanol
[IT]
TitleName=#Known locale [IT] - italiano
[KO]
TitleName=#Known locale [KO] - (korean)
[TW]
TitleName=#Known locale [TW] - (taiwanese)
[BR]
TitleName=#Known locale [BR] - portugues
</pre>
== THPS2X Syslink crash ==
Happens if too many servers are present (this is where data is written to driver?):
<pre>
Hardware watchpoint 1: *(int*)0xD004D048
Old value = 1065353216
New value = 1500647462
0x00215adf in ?? ()
(gdb) pint $eip
Undefined command: "pint". Try "help".
(gdb) print $eip
$1 = (void (*)()) 0x215adf
</pre>
And this seems to copy server to database (this in particular copied string?):
<pre>
Hardware watchpoint 1: *(int*)0xf47944
Old value = 926102321
New value = 858992984
0x00156cc3 in ?? ()
(gdb) print $eip
$2 = (void (*)()) 0x156cc3
(gdb) info reg
eax 0xd0043260 -805031328
ecx 0x1d 29
edx 0x0 0
ebx 0xf20ce0 15863008
esp 0xd004324c 0xd004324c
ebp 0xf20ce0 0xf20ce0
esi 0xd00432a0 -805031264
edi 0xf47948 16021832
eip 0x156cc3 0x156cc3
eflags 0x246 [ PF ZF IF ]
cs 0x8 8
ss 0x10 16
ds 0x10 16
es 0x10 16
fs 0x20 32
gs 0x0 0
(gdb) x/10i $eip
=> 0x156cc3: rep movsl %ds:(%esi),%es:(%edi)
0x156cc5: call 0x1b9db6
0x156cca: mov 0x29b44(%ebx),%ecx
0x156cd0: mov 0x10(%esp),%edx
0x156cd4: imul $0x78,%ecx,%ecx
0x156cd7: mov %edx,0x26ca8(%ecx,%ebx,1)
0x156cde: mov 0x14(%esp),%eax
0x156ce2: mov %eax,0x26cac(%ecx,%ebx,1)
0x156ce9: mov 0x29b44(%ebx),%eax
0x156cef: mov (%ebx),%edx
</pre>
== Reset ==
There are various methods to reset an Xbox or major parts of it (successfully or not).
=== SMC Cold Reboot ===
* CPU cycles: X > 0
=== SMC Warm Reboot ===
* CPU cycles: X > 0
=== PM26 ===
* CPU cycles: X > 0
=== RST_CNT (RST_CPU) ===
[https://www.intel.com/content/dam/doc/datasheet/82801ba-i-o-controller-hub-2-82801bam-i-o-controller-hub-2-mobile-datasheet.pdf equivalent docs?]
=== RST_CNT (RST_CPU + SYS_RST) ===
=== RST_CNT (RST_CPU + FULL_RST) ===
=== RST_CNT (RST_CPU + SYS_RST + FULL_RST) ===
* CPU cycles: 0
=== Triple fault ===
* CPU cycles: 0{{FIXME|reason=untested}}
=== PCI-to-PCI bridge secondary bus reset ===
* CPU cycles: X > 0
----
b348391a499083ed6d72d927b8c27c6670e33445
Xbox Input Devices
0
11
6850
6842
2020-04-29T18:55:34Z
Billy549
2520
/* USB Adapters */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
e449c90196db4c8f4c47dac09ee44ef6d757af20
6887
6850
2020-11-09T03:26:39Z
Ryzee119
2519
Add Steel Battalion bType
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
10cb57b992470ea7780a7600b0de117b5508d185
6888
6887
2020-11-09T03:45:43Z
Ryzee119
2519
Add Steel Battalion XID descriptor
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
34 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
92a1481b437cd2c17504893b633c8d09aedefc95
6889
6888
2020-11-09T03:47:20Z
Ryzee119
2519
Fix old error in Input report size for Steel Battalion
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
3725a1a81471df188b41762efb724eb15a2d7c72
6890
6889
2020-11-09T03:51:53Z
Ryzee119
2519
Add Controller-S XID Descriptor
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
Xbox games use the full range from 0x0000 to 0xFFFF for both the left and right actuators.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
bf12e58e2ac42e6f6a469995a9f8853a3f03c089
6895
6890
2020-11-22T21:33:52Z
Ryzee119
2519
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The lower 8 bits and the upper 8 bits of the rumble word are mirrored. i.e. for half rumble the console would send 0x80,0x80 to each actuator. Further testing is required to confirm this is true across all games.
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
65d75324858599be56120d451686954a1d02e475
6897
6895
2021-02-08T03:09:20Z
Ryzee119
2519
/* Xbox to Controller */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
67e3a1776294f756b06a2faa96588cacc2a80507
6898
6897
2021-03-03T15:26:45Z
RadWolfie
2528
add arcade stick bSubtype and list of known devices in existance
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
**; List of known devices in existence<nowiki>:</nowiki>
*** Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan
*** Street Fighter 15th Anniversary Edition Arcade Stick
*** Gamester Xbox Arcade Stick
*** Nuby Xbox Fighter Arcade Stick
*** Nuby Xbox Arcade Super Stick
****: Item#<nowiki>:</nowiki>36020
*** Naki Ultimate Fighting Stick
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
3c36163868769f6bf8e35644e003c91e01255ecc
NV2A/Pixel Combiner
0
8
6851
6819
2020-05-04T23:38:37Z
JayFoxRox
2
nvidia is having issues or taking files down; using archive.org links where possible
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|DOT_PRODUCT_DEPTH_REPLACE_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
=== 0x08: PS_TEXTUREMODES_BRDF / texbrdf ===
The BRDF texture shader is probably only exposed on original Xbox, but not in standard OpenGL or D3D drivers.
These are some generic resources about BRDFs:
* [http://www.disneyanimation.com/technology/brdf.html Walt Disney BRDF Explorer]
* [https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf Walt Disney BRDF Paper]
* [https://math.nist.gov/~FHunt/appearance/brdf.html Collection of BRDF information]
* [http://www-graphics.stanford.edu/~smr/brdf/bv/ BRDF viewer]{{FIXME|reason=Find alternative; this one is hard to compile}}
* [https://www.merl.com/brdf/ BRDF Database by Mitsubishi]
* nvidia resources ''(The code and technique is probably not using the texture shader that is described here)'':
** [http://www.nvidia.in/attach/6670 BRDFs.pdf]{{FIXME|reason=URL dead; not in archive.org!}} / [http://www.nvidia.in/attach/6669 BRDFs.ppt]{{FIXME|reason=URL dead; not in archive.org!}}
** [https://web.archive.org/web/20191214200801/https://www.nvidia.com/attach/6568 BRDFIntro.pdf] / [https://web.archive.org/web/20191214200809/https://www.nvidia.com/attach/6569 BRDFIntro.doc]
** [https://web.archive.org/web/20191214200757/https://www.nvidia.com/attach/6567 BRDFSeparable.pdf] / [https://web.archive.org/web/20191214200753/https://www.nvidia.com/attach/6566 BRDFSeparable.doc]
** [https://web.archive.org/web/20191214200813/https://www.nvidia.com/attach/6570 brdfseparate.zip]
** [https://web.archive.org/web/20191214200819/https://www.nvidia.com/attach/6571 brdfview.zip]
{{FIXME|reason=Describe Xbox specific BRDF texture shader}}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the DISCARD and ZERO register are the same index: writes are discarded / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
1d78cd45525a6c566247c74a8e82ffab23e492de
6853
6851
2020-05-06T03:37:19Z
JayFoxRox
2
Found another nvidia mirror for BRDFs.pdf; added to archive.org
wikitext
text/x-wiki
== Data types ==
NV_texture_shader suggests that: ''"The 8-bit and 16-bit signed fixed-point types are used for signed internal texture formats, while the 9-bit signed fixed-point type is used for register combiners computations."''
Here is a table from the GL extension:
{| class="wikitable"
! floating-point !! 8-bit fixed-point !! 9-bit fixed-point !! 16-bit fixed-point
|-
| 1.0 || n/a || 255 || n/a
|-
| 0.99996... || n/a || n/a || 32767
|-
| 0.99218... || 127 || n/a || n/a
|-
| 0.0 || 0 || 0 || 0
|-
| -1.0 || -128 || -255 || -32768
|-
| -1.00392... || n/a || -256 || n/a
|}
This means:
* 8-bit fixed-point: [-128, 127] → [-128/128, 127/128] → [-1.0, 0.99218...]
* 9-bit fixed-point: [-256, 255] → [-256/255, 255/255] → [-1.00392..., 1.0]
* 16-bit fixed-point: [-32768, 32767] → [-32768/32768, 32767/32768] → [-1.0, 0.99996...]
It is not known if the NV2A really implements these 3 datatypes.
It is also not yet known how exactly conversion or negation of these types would work.
== Texture Shaders ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader.txt NV_texture_shader]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader2.txt NV_texture_shader2]
* [https://www.khronos.org/registry/OpenGL/extensions/NV/NV_texture_shader3.txt NV_texture_shader3]{{citation needed}}
=== Texturing modes ===
{|class="wikitable"
!ID
!Name
!D3D name
!GL Name
!Stage 1
!Stage 2
!Stage 3
!Stage 4
!Notes
|-
|0x00
|PS_TEXTUREMODES_NONE
|
|NONE
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x01
|PS_TEXTUREMODES_PROJECT2D
|tex
|TEXTURE_2D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x02
|PS_TEXTUREMODES_PROJECT3D
|tex
|TEXTURE_3D
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x03
|PS_TEXTUREMODES_CUBEMAP
|tex
|TEXTURE_CUBE_MAP_ARB
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x04
|PS_TEXTUREMODES_PASSTHRU
|texcoord
|PASS_THROUGH_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x05
|PS_TEXTUREMODES_CLIPPLANE
|texkill
|CULL_FRAGMENT_NV
|{{yes}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x06
|PS_TEXTUREMODES_BUMPENVMAP
|texbem
|OFFSET_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x07
|PS_TEXTUREMODES_BUMPENVMAP_LUM
|texbeml
|OFFSET_TEXTURE_2D_SCALE_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x08
|PS_TEXTUREMODES_BRDF
|texbrdf
|
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x09
|PS_TEXTUREMODES_DOT_ST
|texm3x2tex
|DOT_PRODUCT_TEXTURE_2D_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0A
|PS_TEXTUREMODES_DOT_ZW
|texm3x2depth
|DOT_PRODUCT_DEPTH_REPLACE_NV
|{{no}}
|{{no}}
|{{yes}}
|{{yes}}
|
|-
|0x0B
|PS_TEXTUREMODES_DOT_RFLCT_DIFF
|texm3x3diff
|DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV{{citation needed}}
|{{no}}
|{{no}}
|{{yes}}
|{{no}}
|
|-
|0x0C
|PS_TEXTUREMODES_DOT_RFLCT_SPEC
|texm3x3vspec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0D
|PS_TEXTUREMODES_DOT_STR_3D
|texm3x3tex
|DOT_PRODUCT_TEXTURE_3D_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0E
|PS_TEXTUREMODES_DOT_STR_CUBE
|texm3x3vspec
|DOT_PRODUCT_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|-
|0x0F
|PS_TEXTUREMODES_DPNDNT_AR
|texreg2ar
|DEPENDENT_AR_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x10
|PS_TEXTUREMODES_DPNDNT_GB
|texreg2gb
|DEPENDENT_GB_TEXTURE_2D_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{yes}}
|
|-
|0x11
|PS_TEXTUREMODES_DOTPRODUCT
|texm3x3pad<br>texm3x2pad
|DOT_PRODUCT_NV
|{{no}}
|{{yes}}
|{{yes}}
|{{no}}
|
|-
|0x12
|PS_TEXTUREMODES_DOT_RFLCT_SPEC_CONST
|texm3x3spec
|DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV
|{{no}}
|{{no}}
|{{no}}
|{{yes}}
|
|}
=== 0x08: PS_TEXTUREMODES_BRDF / texbrdf ===
The BRDF texture shader is probably only exposed on original Xbox, but not in standard OpenGL or D3D drivers.
These are some generic resources about BRDFs:
* [http://www.disneyanimation.com/technology/brdf.html Walt Disney BRDF Explorer]
* [https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf Walt Disney BRDF Paper]
* [https://math.nist.gov/~FHunt/appearance/brdf.html Collection of BRDF information]
* [http://www-graphics.stanford.edu/~smr/brdf/bv/ BRDF viewer]{{FIXME|reason=Find alternative; this one is hard to compile}}
* [https://www.merl.com/brdf/ BRDF Database by Mitsubishi]
* nvidia resources ''(The code and technique is probably not using the texture shader that is described here)'':
** [https://web.archive.org/web/20200506033455/http://developer.download.nvidia.com/assets/gamedev/docs/BRDFs.pdf BRDFs.pdf] / [http://www.nvidia.in/attach/6669 BRDFs.ppt]{{FIXME|reason=URL dead; not in archive.org!}}
** [https://web.archive.org/web/20191214200801/https://www.nvidia.com/attach/6568 BRDFIntro.pdf] / [https://web.archive.org/web/20191214200809/https://www.nvidia.com/attach/6569 BRDFIntro.doc]
** [https://web.archive.org/web/20191214200757/https://www.nvidia.com/attach/6567 BRDFSeparable.pdf] / [https://web.archive.org/web/20191214200753/https://www.nvidia.com/attach/6566 BRDFSeparable.doc]
** [https://web.archive.org/web/20191214200813/https://www.nvidia.com/attach/6570 brdfseparate.zip]
** [https://web.archive.org/web/20191214200819/https://www.nvidia.com/attach/6571 brdfview.zip]
{{FIXME|reason=Describe Xbox specific BRDF texture shader}}
== Register combiners ==
The NV2A implements at least parts of the following OpenGL extensions:
* [https://www.opengl.org/registry/specs/NV/register_combiners.txt NV_register_combiners]
* [https://www.opengl.org/registry/specs/NV/register_combiners2.txt NV_register_combiners2]
There's some additional features and oddities.
=== DISCARD and ZERO are the same register ===
On NV2A the DISCARD and ZERO register are the same index: writes are discarded / reads return zero.
This is different from NV_register_combiners where 2 different constants are used.
=== Encoding of input swizzle ===
NV2A uses a single ALPHA flag to specify the swizzle of inputs:
* 0 for <code>.rgb</code> (RGB portion only) and <code>.b</code> (ALPHA portion only).
* 1 for <code>.aaa</code> (RGB portion only) and <code>.a</code> (ALPHA portion only).
This is different from NV_register_combiners where each swizzle has its own constant.
=== Per stage constant-colors ===
The combiner setup switches between using the same <code>const0</code> and <code>const1</code> for all stages (<code>FACTOR#_SAME_FACTOR_ALL</code>), or using different constant-colors per stage (<code>FACTOR#_EACH_STAGE</code>).
On NV2A, the final-combiner does always have unique constants (even using <code>FACTOR#_SAME_FACTOR_ALL</code>) from all other stages.
If <code>FACTOR#_SAME_FACTOR_ALL</code> is used, the constant-colors for all other stages are taken from the very first stage.
This setting can be controlled independently for <code>const0</code> and <code>const1</code>.
This is different from NV_register_combiners2. If that GL extension isn't available / enabled, then the constants are shared between general combiner stages and the final combiner (which doesn't have unique colors then). Additionally, the GL extension can only control this for both constant-colors at the same time.
=== Encoding of constant-colors ===
On NV2A, the constant-colors are encoded as 8-bit unsigned int values, packed into a 32-bit ARGB value (<code>(a<<24 | r<<16 | g<<8 | b)</code>).
This is different from NV_register_combiners where constant-colors are specified as floats in RGBA format.
=== BLUETOALPHA in RGB portion ===
NV2A has a special flag to write the blue result (RGB portion) of the A/B and C/D computations to the alpha channel of the RGB portion output register. There's no such option for the AB/CD result.
{{FIXME|reason=Document specifics, tests proposed on https://github.com/JayFoxRox/nxdk/pull/33}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the RGB portion always writes to <code>.rgb</code> of the output.
=== Special "or" operation (MUX) modifier ===
NV2A has a special flag to switch between MSB and LSB{{FIXME|reason=Unconfirmed / untested - doesn't make a lot of sense}} for the special "or" operation (MUX).
{{FIXME|reason=Check the comparison type}}
This feature isn't available in GL, probably.
This is different from NV_register_combiners where the special "or" operation (MUX) is always doing: <code>spare0_alpha >= 0.5 ? C*D : A*B</code>.
== Debugging ==
PIX from the Microsoft XDK provides great debugging capabilities.
=== References and links ===
* [http://developer.download.nvidia.com/assets/gamedev/docs/ProgrammableTextureBlending.pdf Overview about programmable texture blending] <!-- Mirror: https://www.nvidia.com/object/programmable_texture_blending.html -->
* [http://developer.download.nvidia.com/assets/gamedev/docs/combiners.pdf Overview of register combiners]
* [https://github.com/XboxDev/nxdk/blob/77b5de45f0c64e70f2ff68248873448d5edccc71/tools/fp20compiler/ps1.0_program.cpp#L227 Code from nvparse (NVIDIA SDK 9.52) in nxdk, which handles shader to OpenGL conversion]
* http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf
[[Category:NV2A]]
9ea8b893374f4861638e8731b213c2bf3269ab0c
NV2A/Vertex Shader
0
9
6852
6813
2020-05-04T23:42:50Z
JayFoxRox
2
nvidia is having issues or taking files down; using archive.org links where possible
wikitext
text/x-wiki
The Xbox implements the 2 GL extensions [https://www.opengl.org/registry/specs/NV/vertex_program.txt NV_vertex_program] and [https://www.opengl.org/registry/specs/NV/vertex_program1_1.txt NV_vertex_program1_1] (with some modifications).
This article will mainly focus on actual encoding on hardware as the behaviour is mostly outlined in those GL extensions already.
== Operating modes ==
* Fixed / Programmable
* Writeable / Read-Only constants
* Low-constants only / all constants
* Vertex processing / State program
== Registers ==
=== Input registers ===
There are 16 input registers v[0] to v[15].
They normally [[NV2A/Vertex attributes|map to the vertex attributes]]. However, in the case of vertex state programs, v[0] is fed from LAUNCH_DATA (PGRAPH Methods 0x1E80, 0x1E84, 0x1E88, 0x1E8C for XYZW respectively) instead.
=== Output registers ===
11 output registers o[<RegName>] (initialized to XYZ=0x00000000 W=0x3F800000).
{|class="wikitable"
|+Output registers
|-
!Index
!GL Name
!D3D Name
!Meaning
|-
|0
|HPOS
|oPos
|Homogeneous clip space position
|-
|3
|COL0
|oD0
|Primary color (front-facing)
|-
|4
|COL1
|oD1
|Secondary color (front-facing)
|-
|5
|FOGC
|oFog
|Fog coordinate
|-
|6
|PSIZ
|oPts
|Point size
|-
|7
|BFC0
|oB0
|Back-facing primary color
|-
|8
|BFC1
|oB1
|Back-facing secondary color
|-
|9
|TEX0
|oT0
|Texture coordinate set 0
|-
|10
|TEX1
|oT1
|Texture coordinate set 1
|-
|11
|TEX2
|oT2
|Texture coordinate set 2
|-
|12
|TEX3
|oT3
|Texture coordinate set 3
|}
=== Address register ===
A0.x exists as documented in the GL extension.
=== Temporary registers ===
There are 12 temporary registers: R0 to R11 (initialized to XYZW=0x00000000), as documented in the GL extension.
Additionally, o[HPOS] is mirrored as R12 and can be used as source operand; so effectively you have 13 temporaries
=== Constant space ===
There are 192 constant registers in two seperate blocks with 96 constants each.
They can be accessed through the PGRAPH RDI: select=0x17. Each constant slot is 4x DWORD, ordered as WZYX.
Alternatively they can be uploaded through PGRAPH method [FIXME], with 4x DWORD, ordered XYZW.
In nvidia vertex programs only 96 constants are normally accessible. Microsoft exposed the 96 additional constant registers in D3D shaders through c[-96] to c[-1].
This documentation uses the GL terminology instead and expose the new registers as c[96] to c[191]. This means c[0] to c[191] valid.
== Instructions ==
In total, there are 136 instruction slots.
Each slot consists of 16 bytes, we consider those as 4 seperate little-endian DWORDS describing the operation. Word 0 is inused.
{| class="wikitable"
|+Fields
|-
!Meaning
!Word
!Offset (bits)
!Size (bits)
|-
|ILU Operation
|1
|25
|3
|-
|MAC Operation
|1
|21
|4
|-
|Constant index
|1
|13
|8
|-
|Input index
|1
|9
|4
|-
|Source 1 negate
|1
|8
|1
|-
|Source 1 swizzle X
|1
|6
|2
|-
|Source 1 swizzle Y
|1
|4
|2
|-
|Source 1 swizzle Z
|1
|2
|2
|-
|Source 1 swizzle W
|1
|0
|2
|-
|Source 1 register
|2
|28
|4
|-
|Source 1 mux
|2
|26
|2
|-
|Source 2 negate
|2
|25
|1
|-
|Source 2 swizzle X
|2
|23
|2
|-
|Source 2 swizzle Y
|2
|21
|2
|-
|Source 2 swizzle Z
|2
|19
|2
|-
|Source 2 swizzle W
|2
|17
|2
|-
|Source 2 register
|2
|13
|4
|-
|Source 2 mux
|2
|11
|2
|-
|Source 3 negate
|2
|10
|1
|-
|Source 3 swizzle X
|2
|8
|2
|-
|Source 3 swizzle Y
|2
|6
|2
|-
|Source 3 swizzle Z
|2
|4
|2
|-
|Source 3 swizzle W
|2
|2
|2
|-
|Source 3 register (Hi)
|2
|0
|2
|-
|Source 3 register (Lo)
|3
|30
|2
|-
|Source 3 mux
|3
|28
|2
|-
|Destination MAC mask
|3
|24
|4
|-
|Destination temporary register
|3
|20
|4
|-
|Destination ILU mask
|3
|16
|4
|-
|Destination overall mask
|3
|12
|4
|-
|Destination select
|3
|11
|1
|-
|Destination output register
|3
|3
|8
|-
|Destination mux
|3
|2
|1
|-
|Relative constant addressing
|3
|1
|1
|-
|Final instruction marker (EOF)
|3
|0
|1
|}
{| class="wikitable"
|+Swizzle table
|-
!Value
!Meaning
|-
|0
|X
|-
|1
|Y
|-
|2
|Z
|-
|3
|W
|}
=== Functional units ===
==== Inverse Logic Unit (ILU) ====
{| class="wikitable"
|+ILU Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|RCP
|-
|3
|RCC
|-
|4
|RSQ
|-
|5
|EXP
|-
|6
|LOG
|-
|7
|LIT
|}
==== Multiply-Accumulate (MAC) ====
{| class="wikitable"
|+MAC Operations
|-
!Value
!Meaning
|-
|0
|NOP
|-
|1
|MOV
|-
|2
|MUL
|-
|3
|ADD
|-
|4
|MAD
|-
|5
|DP3
|-
|6
|DPH
|-
|7
|DP4
|-
|8
|DST
|-
|9
|MIN
|-
|10
|MAX
|-
|11
|SLT
|-
|12
|SGE
|-
|13
|ARL
|}
== Related links ==
* nvidia resources
** [https://web.archive.org/web/20191214200729/https://www.nvidia.com/attach/6559 WhereIsThatVertexShaderInstruction.pdf] / [https://web.archive.org/web/20191214200738/https://www.nvidia.com/attach/6560 WhereIsThatVertexShaderInstruction.doc]
* [https://github.com/envytools/envytools/blob/master/nvhw/pgraph_celsius_xfrm.c Code which appears to implement bit-accurate emulation of some instructions]{{FIXME|reason=Unconfirmed, needs testing}}
[[Category:NV2A]]
e725426fb612c2045318cf8ce484ac0f8ce1d0c3
Exploits
0
3751
6854
6832
2020-05-11T14:01:14Z
Derf
2525
/* Attack ideas */ Credit to /r/OriginalXbox wiki for DVD demo info.
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnie's book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-ROM. The XBE extracts the actual game XBE (which is signed to run from HDD) onto the cache drives. If we can find an exploit in one of them (loaded files), we could possibly take over the entire system and run a softmod from DVD+R. In order to make a bootable DVD+R, you must have a DVD burner that - either natively, or by custom firmware - can set booktype to DVD-ROM. From a small sample size, it appears that the drive must also be capable of setting the layertype on the disc to "read-only", which is a very rarely used security feature apparently only present for Xbox, Xbox 360, and an Audi navigation system. Layertype is a rather unknown thing, and it appears DVD burners were accidentally set with this from factory, but regular burner drives could potentially have the layertype modified using custom firmware (as the Burnermax payload does for dual layer DVDs).
|-
|'''Hulk (Special Edition)'''
UPC 2519224892
[[The Hulk]]
This DVD is unique and contains a partial dashboard (5860 with 4931? libraries) with an xboxdash.xbe signed to run from DVD-ROM. The default.xbe calls this dashboard XBE with parameters to play a video on the disc. By swapping this XBE with the default.xbe, you can boot the dashboard to a blank sphere. By placing dashboard 4920's mainmenu5.xip in the xboxdash folder, you can restore the orb and menu options, but selecting an option will show a blank sphere after the zoom animation.
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
UPC 2454317005
[[Republic Commando]]
Untested
|-
|'''Star Wars: Clone Wars - Volume Two'''
UPC 24543214137
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
UPC 5039036023238
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
UPC 24543123415 or 5039036017374
[[Star Wars Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD (Widescreen theatrical edition)'''
UPC 24543559856
[[Lego Star Wars 2]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
UPC 5050582274639
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
UPC 25192031229
[[Doom 3]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
UPC 786936265262
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
UPC 24543193845
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
UPC 25192326622 or 25192586125
[[Van Helsing]]
Untested
|-
|'''The Godfather'''
UPC not 5014437812834 nor 14633165401 nor 014633165401
SPPV and Atreyu187 claim this exists and contains an XBE capable of chainloading any signed game XBE. No evidence exists of this actually existing on the DVD or game bonus disc, but it is listed here for posterity.
[[The Godfather: The Game]]
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
c3c968cbadf2621df33a08a2ce9ab312f9ff8570
6855
6854
2020-05-11T14:04:50Z
Derf
2525
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnie's book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-ROM. The XBE extracts the actual game XBE (which is signed to run from HDD) onto the cache drives. If we can find a vulnerability in one of them (loaded files), we could possibly take over the entire system and run a softmod from DVD+R. In order to make a bootable DVD+R, you must have a DVD burner that - either natively, or by custom firmware - can set booktype to DVD-ROM. From a small sample size, it appears that the drive must also be capable of setting the layertype on the disc to "read-only", which is a very rarely used security feature apparently only present for Xbox, Xbox 360, and an Audi navigation system. Layertype is a rather unknown thing, and it appears DVD burners were accidentally set with this from factory, but regular burner drives could potentially have the layertype modified using custom firmware (as the Burnermax payload does for dual layer DVDs).
|-
|'''Hulk (Special Edition)'''
UPC 2519224892
[[The Hulk]]
This DVD is unique and contains a partial dashboard (5860 with 4931? libraries) with an xboxdash.xbe signed to run from DVD-ROM. The default.xbe calls this dashboard XBE with parameters to play a video on the disc. By swapping this XBE with the default.xbe, you can boot the dashboard to a blank sphere. By placing dashboard 4920's mainmenu5.xip in the xboxdash folder, you can restore the orb and menu options, but selecting an option will show a blank sphere after the zoom animation. All xips are loaded from DVD and are hash checked. Font/audio files are loaded from HDD and hash checked. Aside from xboxdash.xbe, default.xbe will load video_ts.ifo and an audio file from cdrom, so a vulnerability could be found in those.
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
UPC 2454317005
[[Republic Commando]]
Untested
|-
|'''Star Wars: Clone Wars - Volume Two'''
UPC 24543214137
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
UPC 5039036023238
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
UPC 24543123415 or 5039036017374
[[Star Wars Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD (Widescreen theatrical edition)'''
UPC 24543559856
[[Lego Star Wars 2]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
UPC 5050582274639
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
UPC 25192031229
[[Doom 3]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
UPC 786936265262
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
UPC 24543193845
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
UPC 25192326622 or 25192586125
[[Van Helsing]]
Untested
|-
|'''The Godfather'''
UPC not 5014437812834 nor 14633165401 nor 014633165401
SPPV and Atreyu187 claim this exists and contains an XBE capable of chainloading any signed game XBE. No evidence exists of this actually existing on the DVD or game bonus disc, but it is listed here for posterity.
[[The Godfather: The Game]]
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
394217521e9cd70d903ab28ce3911faa8dcba10f
6856
6855
2020-05-11T14:05:48Z
Derf
2525
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnie's book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-ROM. The XBE extracts the actual game XBE (which is signed to run from HDD) onto the cache drives. If we can find a vulnerability in one of them (loaded files), we could possibly take over the entire system and run a softmod from DVD+R. In order to make a bootable DVD+R, you must have a DVD burner that - either natively, or by custom firmware - can set booktype to DVD-ROM. From a small sample size, it appears that the drive must also be capable of setting the layertype on the disc to "read-only", which is a very rarely used security feature apparently only present for Xbox, Xbox 360, and an Audi navigation system. Layertype is a rather unknown thing, and it appears DVD burners were accidentally set with this from factory, but regular burner drives could potentially have the layertype modified using custom firmware (as the Burnermax payload does for dual layer DVDs).
|-
|'''Hulk (Special Edition)'''
UPC 2519224892
[[The Hulk]]
This DVD is unique and contains a partial dashboard (5860 with 4931? libraries) with an xboxdash.xbe signed to run from DVD-ROM. The default.xbe calls this dashboard XBE with parameters to play a video on the disc. By swapping this XBE with the default.xbe, you can boot the dashboard to a blank sphere. By placing dashboard 4920's mainmenu5.xip in the xboxdash folder, you can restore the orb and menu options, but selecting an option will show a blank sphere after the zoom animation. All xips are loaded from DVD and are hash checked. Font/audio files are loaded from HDD and hash checked. Aside from xboxdash.xbe, default.xbe will load video_ts.ifo and an audio file from cdrom, so a vulnerability could be found in those.
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
UPC 2454317005
[[Republic Commando]]
Untested
|-
|'''Star Wars: Clone Wars - Volume Two'''
UPC 24543214137
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
UPC 5039036023238
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
UPC 24543123415 or 5039036017374
[[Star Wars Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD (Widescreen theatrical edition)'''
UPC 24543559856
[[Lego Star Wars 2]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
UPC 5050582274639
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
UPC 25192031229
[[Doom 3]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
UPC 786936265262
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
UPC 24543193845
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
UPC 25192326622 or 25192586125
[[Van Helsing]]
Untested
|-
|'''The Godfather'''
UPC not 5014437812834 nor 14633165401 nor 014633165401
SPPV and Atreyu187 claim this exists and contains an XBE capable of chainloading any signed game XBE. No evidence exists of this actually existing on the DVD or game bonus disc, but it is listed here for posterity.
[[The Godfather: The Game]]
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
260df4098f139446740686907c3842c57d303b23
6857
6856
2020-05-11T14:06:09Z
Derf
2525
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnie's book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-ROM. The XBE extracts the actual game XBE (which is signed to run from HDD) onto the cache drives. If we can find a vulnerability in one of them (loaded files), we could possibly take over the entire system and run a softmod from DVD+R. In order to make a bootable DVD+R, you must have a DVD burner that - either natively, or by custom firmware - can set booktype to DVD-ROM. From a small sample size, it appears that the drive must also be capable of setting the layertype on the disc to "read-only", which is a very rarely used security feature apparently only present for Xbox, Xbox 360, and an Audi navigation system. Layertype is a rather unknown thing, and it appears DVD burners were accidentally set with this from factory, but regular burner drives could potentially have the layertype modified using custom firmware (as the Burnermax payload does for dual layer DVDs).
|-
|'''Hulk (Special Edition)'''
UPC 2519224892
[[The Hulk]]
This DVD is unique and contains a partial dashboard (5860 with 4931? libraries) with an xboxdash.xbe signed to run from DVD-ROM. The default.xbe calls this dashboard XBE with parameters to play a video on the disc. By swapping this XBE with the default.xbe, you can boot the dashboard to a blank sphere. By placing dashboard 4920's mainmenu5.xip in the xboxdash folder, you can restore the orb and menu options, but selecting an option will show a blank sphere after the zoom animation. All xips are loaded from DVD and are hash checked. Font/audio files are loaded from HDD and hash checked. Aside from xboxdash.xbe, default.xbe will load video_ts.ifo and an audio file from cdrom, so a vulnerability could be found in those.
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
UPC 2454317005
[[Republic Commando]]
Untested
|-
|'''Star Wars: Clone Wars - Volume Two'''
UPC 24543214137
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
UPC 5039036023238
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
UPC 24543123415 or 5039036017374
[[Star Wars Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD (Widescreen theatrical edition)'''
UPC 24543559856
[[Lego Star Wars 2]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
UPC 5050582274639
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
UPC 25192031229
[[Doom 3]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
UPC 786936265262
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
UPC 24543193845
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
UPC 25192326622 or 25192586125
[[Van Helsing]]
Untested
|-
|'''The Godfather'''
UPC not 5014437812834 nor 14633165401 nor 014633165401
SPPV and Atreyu187 claim this exists and contains an XBE capable of chainloading any signed game XBE. No evidence exists of this actually existing on the DVD or game bonus disc, but it is listed here for posterity.
[[The Godfather: The Game]]
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
fc60ff2ff3422de4f6902cca0b8c69ba7abce08e
6858
6857
2020-05-11T14:39:05Z
Derf
2525
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnie's book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-ROM. The XBE extracts the actual game XBE (which is signed to run from HDD) onto the cache drives. If we can find a vulnerability in one of them (loaded files), we could possibly take over the entire system and run a softmod from DVD+R. In order to make a bootable DVD+R, you must have a DVD burner that - either natively, or by custom firmware - can set booktype to DVD-ROM. From a small sample size, it appears that the drive must also be capable of setting the layertype on the disc to "read-only", which is a very rarely used security feature apparently only present for Xbox, Xbox 360, and an Audi navigation system. Layertype is a rather unknown thing, and it appears DVD burners were accidentally set with this from factory, but regular burner drives could potentially have the layertype modified using custom firmware (as the Burnermax payload does for dual layer DVDs).
|-
|'''Hulk (Special Edition)'''
UPC 2519224892
[[The Hulk]]
This DVD is unique and contains a partial dashboard (5860 with 4831 libraries) with an xboxdash.xbe signed to run from DVD-ROM. The default.xbe calls this dashboard XBE with parameters to play a video on the disc. By swapping this XBE with the default.xbe, you can boot the dashboard to a blank sphere. By placing dashboard 4920's mainmenu5.xip in the xboxdash folder, you can restore the orb and menu options, but selecting an option will show a blank sphere after the zoom animation. All xips are loaded from DVD and are hash checked. Font/audio files are loaded from HDD and hash checked. Aside from xboxdash.xbe, default.xbe will load video_ts.ifo and an audio file from cdrom, so a vulnerability could be found in those.
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
UPC 2454317005
[[Republic Commando]]
Untested
|-
|'''Star Wars: Clone Wars - Volume Two'''
UPC 24543214137
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
UPC 5039036023238
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
UPC 24543123415 or 5039036017374
[[Star Wars Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD (Widescreen theatrical edition)'''
UPC 24543559856
[[Lego Star Wars 2]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
UPC 5050582274639
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
UPC 25192031229
[[Doom 3]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
UPC 786936265262
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
UPC 24543193845
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
UPC 25192326622 or 25192586125
[[Van Helsing]]
Untested
|-
|'''The Godfather'''
UPC not 5014437812834 nor 14633165401 nor 014633165401
SPPV and Atreyu187 claim this exists and contains an XBE capable of chainloading any signed game XBE. No evidence exists of this actually existing on the DVD or game bonus disc, but it is listed here for posterity.
[[The Godfather: The Game]]
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
1fd369538fc6b59ed8f489b448743d32527c6278
Xbox Live Communicator
0
3829
6859
6557
2020-05-21T01:55:51Z
Billy549
2520
Add link to PCBs
wikitext
text/x-wiki
The Xbox Live Communicator is the headset which is used for Xbox Live.
[[File:Xbox_Live_Communicator.png|thumb|200px|Headset / Xbox Live Communicator]]
== Protocol ==
=== USB Descriptor ===
<pre>
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 45
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Microphone ===
{{FIXME}}
=== Speaker ===
{{FIXME}}
==== Links ====
* [https://github.com/JayFoxRox/xbox-tools/tree/4bc808e187311010f850d7fbd9af4b76bed90727/communicator-tool Code for accessing the communicator microphone and speaker]
* [https://imgur.com/gallery/mJmP5Ys Billy549's CC-BY-SA shots of the internal PCB]
d95748c2a7d37448a99d2116421ba0826917ef94
6860
6859
2020-05-21T02:19:20Z
Billy549
2520
Add data sheet for UAC 3556B
wikitext
text/x-wiki
The Xbox Live Communicator is the headset which is used for Xbox Live.
[[File:Xbox_Live_Communicator.png|thumb|200px|Headset / Xbox Live Communicator]]
== Protocol ==
=== USB Descriptor ===
<pre>
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 45
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Microphone ===
{{FIXME}}
=== Speaker ===
{{FIXME}}
==== Links ====
* [https://github.com/JayFoxRox/xbox-tools/tree/4bc808e187311010f850d7fbd9af4b76bed90727/communicator-tool Code for accessing the communicator microphone and speaker]
* [https://imgur.com/gallery/mJmP5Ys Billy549's CC-BY-SA shots of the internal PCB]
* [https://web.archive.org/web/20200521011406/http://www.kako.com/neta/2005-009/uac3556b.pdf Datasheet for UAC 3556B (close to the 3560B that the Xbox Communicator uses]
70a7ed02b35abd1a0101701c1f77ef6639796da3
6865
6860
2020-05-22T21:23:23Z
Billy549
2520
Add PCB images directly on-wiki, remove Imgur link
wikitext
text/x-wiki
The Xbox Live Communicator is the headset which is used for Xbox Live.
[[File:Xbox_Live_Communicator.png|thumb|200px|Headset / Xbox Live Communicator]]
[[File:XBCommunicator-front.jpg|thumb|200px|PCB Front]]
[[File:XBCommunicator-back.jpg|thumb|200px|PCB Back]]
== Protocol ==
=== USB Descriptor ===
<pre>
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 45
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Microphone ===
{{FIXME}}
=== Speaker ===
{{FIXME}}
==== Links ====
* [https://github.com/JayFoxRox/xbox-tools/tree/4bc808e187311010f850d7fbd9af4b76bed90727/communicator-tool Code for accessing the communicator microphone and speaker]
* [https://web.archive.org/web/20200521011406/http://www.kako.com/neta/2005-009/uac3556b.pdf Datasheet for UAC 3556B (close to the 3560B that the Xbox Communicator uses]
9b0d99c918ff4bc4b4de6123611614897f59bfff
Memory
0
3674
6861
6752
2020-05-21T06:18:17Z
Redherring32
2513
Editors to clarify that memory can only be upgrades on pre-1.6 boards.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
2e457ca3f878467ce62d55fcf7a0d91af0d9ca8e
6862
6861
2020-05-21T06:18:47Z
Redherring32
2513
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
47490bed95fdbd3481a5db2a14e4d265a4ade09f
File:XBCommunicator-back.jpg
6
3998
6863
2020-05-22T21:17:59Z
Billy549
2520
Back shot of the XBCommunicator - licensed by Billy549 under CC-BY-SA 4.0
wikitext
text/x-wiki
Back shot of the XBCommunicator - licensed by Billy549 under CC-BY-SA 4.0
f58ba70e75872bfc4cb387b79eb2c0d4b503c881
File:XBCommunicator-front.jpg
6
3999
6864
2020-05-22T21:20:06Z
Billy549
2520
Front shot of the XBCommunicator - licensed by Billy549 under CC-BY-SA 4.0
wikitext
text/x-wiki
Front shot of the XBCommunicator - licensed by Billy549 under CC-BY-SA 4.0
1106e6bab106d69bdfbefa04339e461d2ec4e79d
BIOS
0
3672
6866
6280
2020-05-26T14:31:12Z
JayFoxRox
2
Add skeptical note about 4132 / 4134
wikitext
text/x-wiki
The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MiB of the CPU's physical address space (0xFF000000 - 0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.
On a standard Xbox, the BIOS image is stored in the [[Flash ROM]]. The BIOS image is actually 256 kiB, duplicated 4 times to fill the 1 MiB ROM chip. You can verify this by running:
<pre>
$ split -n 4 xbox.bin
$ md5sum xa*
542c62cb976a4993c8c5027dff9638ce xaa
542c62cb976a4993c8c5027dff9638ce xab
542c62cb976a4993c8c5027dff9638ce xac
542c62cb976a4993c8c5027dff9638ce xad
</pre>
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1 MiB and some are 256 kiB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256 kiB of data is repeated 64 times.
== Components ==
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.
{| class="wikitable"
!
! 3944 !! 4034 !! 4134{{FIXME|reason=Some sources claim there is 4132; however, neither 4134 or 4132 are listed in redump. So this might not be a real MS bios}} !! 4817 !! 5101 !! 5530 !! 5713 !! 5838
|-
! NV2A Initialization Table
| 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000 || 0x00000
|-
! MCPX Initialization Table
| 0x00070 || 0x00070 || 0x00070 || 0x00070 || 0x00070 || 0x00070 || 0x00070 || 0x00070
|-
! X-Codes
| 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080 || 0x00080
|-
! Copyright String
| 0x00CFA || 0x00CFA || 0x00CFA || 0x00DB9 || 0x00E49 || 0x00E59 || 0x00E59 || 0x00DCC
|-
! Kernel
| 0x0619C || || || || || || ||
|-
! Kernel Data Segment
| 0x3944C || || || || || || ||
|-
! 2BL <br> ''Always 0x6000 bytes''
| 0x39E00 || 0x39E00 || 0x39E00 || || || || ||
|-
! FBL <br> ''Always 0x2880 bytes''
| || || || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400 || 0x3D400
|-
! Decoy Boot Loader
| 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00 || 0x3FE00
|}
For information how these sections are used, see [[Boot Process]].
=== NV2A Initialization Table ===
The first DWORD is a pointer to a table of values that the NV2A northbridge uses to initialize itself, but with the least-significant bit always set to 1 (likely some sort of sanity check). The second DWORD is the unmodified table pointer. On all Xbox BIOS, the NV2A initialization table is always at file offset 8, virtual address 0xFF000008.
The first DWORD of the NV2A initialization table is the magic number 0x2B16D065 (called the "boot header"). The purpose of the remaining values in the table is unknown{{FIXME}}.
=== MCPX Initialization Table ===
This is a table of values used to initialize the MCPX southbridge. It ''must'' be placed at offset 0x70 in the ROM image.
=== xcodes ===
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:
<code>04 10 08 00 80 01 80 00 00</code>
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:
<code>04 84 08 00 80 01 80 00 00</code>
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 BIOS has considerably more xcodes than the 3944 BIOS.
=== Copyright String ===
Literally contains the ASCII encoded text: "<code>Copyright (c) Microsoft Corporation. All rights reserved.</code>" (57 bytes long).
=== Decoy bootloader ===
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.
== See Also ==
[[BIOS Dumping]]
== References ==
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]
1a0e1189797243a9bdaa6ac9bcd608585fa8e5a0
Xtf
0
3831
6867
6415
2020-06-02T09:12:32Z
Teufelchen
2518
Fix 404 GitHub link
wikitext
text/x-wiki
XTF is a font file format used in the [[Dashboard]].
It became famous for being [[Exploits#Font hacks|exploited]].
== Dashboard fonts ==
The fonts were designed by [[Wikipedia:Steve Matteson|Steve Matteson]] for use in the Xbox [[Dashboard]] as well as for promotional materials.
The XTF versions of these fonts contain 7365 glyphs each.
=== Xbox.xtf ===
[[File:Xbox-dashboard-font-specimen.png|thumb|200px|Xbox Font Specimen]]
A monospace font.
<div style="display: inline-block;">[[File:Xbox-xtf.png|800px|thumb|Xbox.xtf from [[Dashboard]].]]</div>
=== XBox Book.xtf ===
<div style="display: inline-block;">[[File:XBox Book-xtf.png|800px|thumb|XBox Book.xtf from [[Dashboard]].]]</div>
== File format ==
* 4 byte (magic)
* 4 byte (length prefix for following string)
* zero-terminated string with given buffer length (font-name)
* [https://msdn.microsoft.com/en-us/library/dd144956%28v=vs.85%29.aspx GLYPHSET] (List of supported glyphs)
* For each cGlyphsSupported:
** [https://msdn.microsoft.com/en-us/library/windows/desktop/dd374209(v=vs.85).aspx GLYPHMETRICSFLOAT] (Metrics for each glyph)
** 4 byte (Offset of glyph in file)
* For each GLYPHSET range
** For each glyph in this range
*** 2 byte (Index count)
*** 2 byte (Vertex count)
*** For each index:
**** 2 byte (Vertex index)
*** For each vertex:
**** 4 byte float (X-coordinate)
**** 4 byte float (Y-coordinate)
The mesh data is stored as triangle list. 3 indices per triangle.
{{FIXME|reason=Confirm these findings and format them better}}
== Links ==
* [https://github.com/XboxDev/xtf-converter A tool to convert XTF fonts to SVG fonts]
[[Category:Fileformats]]
419d8fd8b21811f0253434bfa52ef78cb2a0c6a7
EEPROM
0
3742
6868
6731
2020-06-19T06:23:32Z
Ernegien
2491
/* Checksum Algorithm */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
* 0x00080000 = 480p
* 0x00020000 = 720p
* 0x00040000 = 1080i
* 0x00010000 = Widescreen{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00100000 = Letterbox{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00400000 = 60Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
* 0x00800000 = 50Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
|-
| 0x98
| 0x9B
| Audio Settings
* 0x00000000 = Stereo
* 0x00000001 = Mono
* 0x00000002 = Surround
* 0x00010000 = Enable AC3
* 0x00020000 = Enable DTS
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC HDD Key ==
The HMAC HDD Key is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
return *(uint32_t*)&checksum;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
4dedd3d35a8cf7c6a19f883f71e4ca169044a186
6869
6868
2020-06-19T06:25:25Z
Ernegien
2491
/* Checksum Algorithm */
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
* 0x00080000 = 480p
* 0x00020000 = 720p
* 0x00040000 = 1080i
* 0x00010000 = Widescreen{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00100000 = Letterbox{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00400000 = 60Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
* 0x00800000 = 50Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
|-
| 0x98
| 0x9B
| Audio Settings
* 0x00000000 = Stereo
* 0x00000001 = Mono
* 0x00000002 = Surround
* 0x00010000 = Enable AC3
* 0x00020000 = Enable DTS
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC HDD Key ==
The HMAC HDD Key is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
return *(uint32_t*)&crc;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip with a Raspberry Pi]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
65a166518e5d3c74150521c18e5945769716b6e8
6876
6869
2020-08-12T21:33:37Z
JayFoxRox
2
Added VGA port dumping method
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
* 0x00080000 = 480p
* 0x00020000 = 720p
* 0x00040000 = 1080i
* 0x00010000 = Widescreen{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00100000 = Letterbox{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00400000 = 60Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
* 0x00800000 = 50Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
|-
| 0x98
| 0x9B
| Audio Settings
* 0x00000000 = Stereo
* 0x00000001 = Mono
* 0x00000002 = Surround
* 0x00010000 = Enable AC3
* 0x00020000 = Enable DTS
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC HDD Key ==
The HMAC HDD Key is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
return *(uint32_t*)&crc;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip using a Raspberry Pi]
* [https://mehmedbasic.dk/post/xbox-eeprom/ Read/Write an original Xbox EEPROM using a VGA port]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
3824bc2fe9d017100a8e2dfd9c9aa04dcfb43463
6877
6876
2020-08-20T01:22:37Z
KaosEngineer
2482
/* The HMAC SHA1 Hash */ It's not the HMAC HDD Key but the HMAC SHA1 Hash computed across the first 48 bytes which includes the RC4 encrypted HDD Key, etc.
wikitext
text/x-wiki
The Xbox EEPROM is a 256 byte non-volatile storage device which contains device-specific information. It is connected via I²C and located on address 0x54.
Parts of the EEPROM are encrypted using [[Kernel/XboxEEPROMKey]].
== Contents ==
{| class="wikitable"
! Start !! End !! Notes
|-
| 0x00
| 0x13
| HMAC_SHA1 Hash
|-
| 0x14
| 0x1B
| RC4 Encrypted Confounder ??
|-
| 0x1C
| 0x2B
| RC4 Encrypted HDD key
|-
| 0x2C
| 0x2F
| RC4 Encrypted Region code
* 0x00000001 = North America
* 0x00000002 = Japan
* 0x00000004 = Europe & Australia
* 0x80000000 = Manufacturing plant
|-
| 0x30
| 0x33
| Checksum2 - Checksum of next 44 (0x2C) bytes (0x34 - 0x5F)<sup>*</sup>
|-
| 0x34
| 0x3F
| Xbox serial number - (ASCII chars 0x30 - 0x39 to match each digit in SN)
|-
| 0x40
| 0x45
| Ethernet MAC address (Microsoft Xbox - 00:50:F2:xx:xx:xx)
This is the MAC address of the Ethernet hardware, which has been [https://web.archive.org/web/20100617020733/http://standards.ieee.org/regauth/oui/oui_public.txt issued by the IEEE].
|-
| 0x46
| 0x47
| Unknown Padding ?
|-
| 0x48
| 0x57
| Online Key ?
|-
| 0x58
| 0x5B
| Video Standard
* 0x00000000 = not set (INVALID)
* 0x00400100 = NTSC-M
* 0x00400200 = NTSC-J
* 0x00800300 = PAL-I
* 0x00400400 = PAL-M
|-
| 0x5C
| 0x5F
| Unknown Padding ?
|-
| 0x60
| 0x63
| Checksum3 - Checksum of the next 92 (0x5C) bytes (0x64 - 0xBF)<sup>*</sup>
|-
| 0x64
| 0x67
| Zone Bias - Offset in # minutes to subtract from GMT time
(e.g., for GMT-06 Central; 6hr = 360min = 0x00000168)
|-
| 0x68
| 0x6B
| Standard Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CST\0, ACST)
|-
| 0x6C
| 0x6F
| Daylight Timezone Name: 4 characters, NULL fill remainder if shorter (e.g., CDT\0, ACDT)
|-
| 0x70
| 0x77
| Unknown Padding ?
|-
| 0x78
| 0x7B
| Standard Time Starts 10-05-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x7C
| 0x7F
| Daylight Savings Time Starts 04-01-00-02 (Month-Day-DayOfWeek-Hour)
|-
| 0x80
| 0x87
| Unknown Padding ?
|-
| 0x88
| 0x8B
| Standard Timezone Bias; if not DST, 0 (0x00000000) minute time adjust
|-
| 0x8C
| 0x8F
| Daylight Savings Time Bias; if DST, -60 (0xFFFFFFC4) minute time adjust
|-
| 0x90
| 0x93
| Language ID (0 = not set)
* 0x00000001 = English
* 0x00000002 = Japanese
* 0x00000003 = German
* 0x00000004 = French
* 0x00000005 = Spanish
* 0x00000006 = Italian
* 0x00000007 = Korean
* 0x00000008 = Chinese
* 0x00000009 = Portuguese
|-
| 0x94
| 0x97
| Video Settings
* 0x00080000 = 480p
* 0x00020000 = 720p
* 0x00040000 = 1080i
* 0x00010000 = Widescreen{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00100000 = Letterbox{{FIXME|reason=What happens if Widescreen and letterbox are enabled at the same time? Can this happen?}}
* 0x00400000 = 60Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
* 0x00800000 = 50Hz{{FIXME|reason=Unconfirmed; Also, what happens if both refresh rates are disabled?}}
|-
| 0x98
| 0x9B
| Audio Settings
* 0x00000000 = Stereo
* 0x00000001 = Mono
* 0x00000002 = Surround
* 0x00010000 = Enable AC3
* 0x00020000 = Enable DTS
|-
| 0x9C
| 0x9F
| Games Parental Control (0 = Max rating)
* 0x00000000 = Rating Pending (RP)
* 0x00000001 = Adults Only (AO)
* 0x00000002 = Mature (M)
* 0x00000003 = Teen (T)
* 0x00000004 = Everyone (E)
* 0x00000005 = Kids to Adults (K-A)
* 0x00000006 = Early Childhood (EC)
|-
| 0xA0
| 0xA3
| Parental Control Passcode; 4 button sequence (each key stored in a nibble)
* 0x1 = {{input-dy+}} or {{input-ly+}}
* 0x2 = {{input-dy-}} or {{input-ly-}}
* 0x3 = {{input-dx-}} or {{input-lx-}}
* 0x4 = {{input-dx+}} or {{input-lx+}}
* 0x5 = {{input-a}}
* 0x6 = {{input-b}}
* 0x7 = {{input-x}}
* 0x8 = {{input-y}}
* 0xB = {{input-lt}}
* 0xC = {{input-rt}}
* 0x0 = Disabled{{FIXME|reason=Is this 0x00000000 only, or are shorter codes possible? can a middle section be 0x00 or would that end the sequence?}}
''Note'':
* A passcode 0x00001423 is D-pad directions up (0x1), right (0x4), down (0x2), left (0x3).
* Pass code only uses the lower 16 bits; each button is stored as a nibble in the word. First button in the most significant nibble and last in the least significant nibble.
|-
| 0xA4
| 0xA7
| Movies Parental Control (0 = Max rating)
* 0x00000001 = Adults Only (NC-17)
* 0x00000002 = Restricted (R)
* 0x00000004 = Parents Strongly Cautioned (PG-13)
* 0x00000005 = Parental Guidance Suggested (PG)
* 0x00000007 = General Audiences (G)
|-
| 0xA8
| 0xAB
| XBOX Live IP Address..
|-
| 0xAC
| 0xAF
| XBOX Live DNS Server..
|-
| 0xB0
| 0xB3
| XBOX Live Gateway Address..
|-
| 0xB4
| 0xB7
| XBOX Live Subnet Mask..
|-
| 0xB8
| 0xBB
| Other XBLive settings ?
|-
| 0xBC
| 0xBF
| DVD Playback Kit Zone
* 0x00000000 = None
* 0x00000001 = Region 1
* ...
* 0x00000006 = Region 6{{FIXME|reason=We should document which regions were actually sold in stores}}
|-
| 0xC0
| 0xFF
| Unknown Codes / History ? do not change any values in this range
|-
|}
Note: Info in above table comes from XKUtils [https://svn.exotica.org.uk:8443/xbmc4xbox/tags/3.5.3/xbmc/xbox/XKEEPROM.h XKEEPROM.h].
<sup>*</sup>Configmagic-FINAL-1.6 uses the wrong size when computing Checksum2 (40 instead of 44 bytes) and Checksum3 (96 instead of 92 bytes). Checksum2 value computed was correct only because the extra 4 bytes not used in the CRC computation were all 0's which does not change the CRC value. However, a similiar problem with computation of Checksum3 is present. The CRC computed for v1.6 Xbox's is incorrect as the 4 extra bytes are not 0's as on earlier versions.
== Reading/Writing the EEPROM ==
=== Software Method ===
This is the easiest way to dump an Xbox EEPROM. Use your alternative dashboard to dump the EEPROM to a file and download it over FTP.
=== Hardware Method ===
If you cannot dump the EEPROM using software, you can dump it using hardware. You have several options: use an I2C host adapter (see [http://dangerousprototypes.com/blog/bus-pirate-manual/ here]
or [https://www.totalphase.com/products/aardvark-i2cspi/ here]), build an [https://www.youtube.com/watch?v=UcK6nKyKGVQ I2C-Serial cable], or use a device like a RaspberryPi which has an I2C interface. Connect SDA/SCL/ground to the LPC pinout on the board. See [https://github.com/grimdoomer/PiPROM here] for pinout information. Then use the corresponding software to read/write the EEPROM.
== The HMAC SHA1 Hash ==
The HMAC SHA1 Hash is generated{{FIXME|reason=Stored? Derived? At factory?}} out of the first 48 bytes{{FIXME|reason=..first 48 EEPROM bytes? Encrypted / Decrypted?}}. This section has been identified clearly{{FIXME|reason=What does this mean?}}.
== Checksum Algorithm ==
Checksum2 and Checksum3 values can be calculated by running the following code snippet over the area the checksum covers:
<pre> /* The EepromCRC algorithm was obtained from the XKUtils 0.2 source released by
* TeamAssembly under the GNU GPL.
* Specifically, from XKCRC.cpp
*
* Rewritten to ANSI C by David Pye (dmp@davidmpye.dyndns.org)
*
* Adapted for XboxDevWiki
*/
uint32_t EepromCRC(unsigned char *data, long dataLen) {
// Initialize result to zero
uint8_t crc[4] = { 0x00, 0x00, 0x00, 0x00 };
//Circle shift input data one byte right
unsigned char* CRC_Data = (unsigned char *)malloc(dataLen + 4);
memset(CRC_Data, 0x00, dataLen + 4);
memcpy(CRC_Data + 0x01 , data, dataLen - 1);
memcpy(CRC_Data, data + dataLen - 1, 0x01);
// Calculate checksum
for (unsigned int i = 0; i < 4; i++) {
unsigned short CRCPosVal = 0xFFFF;
for (unsigned long l = i; l < dataLen; l += 4) {
CRCPosVal -= *(unsigned short*)(&CRC_Data[l]);
}
CRCPosVal &= 0xFF00;
crc[i] = (unsigned char) (CRCPosVal >> 8);
}
free(CRC_Data);
return *(uint32_t*)&crc;
}
</pre>
== Read Checksum Algorithm ==
When the Xbox reads from the FACTORY_SETTINGS or the USER_SETTINGS section of the EEPROM, this algorithm is ran over the entire section accessed (including the CRC checksum mentioned above) to ensure that the data is valid. If the result of the checksum algorithm does not equal 0xFFFFFFFF, STATUS_DEVICE_DATA_ERROR is returned from the Kernel.
<pre>static uint32_t eeprom_section_checksum(
const uint32_t* section_data,
uint32_t section_data_length
)
{
const uint32_t bitmask = 0xFFFFFFFF;
uint64_t checksum = 0;
uint32_t carry_count = 0;
// Process the data in 32 bit steps
for(unsigned int i = 0; i < section_data_length / 4; i++) {
checksum += *section_data;
if(checksum > bitmask) {
carry_count++;
checksum &= bitmask;
}
section_data++;
}
checksum += carry_count;
if(checksum > bitmask) {
checksum += 1;
}
return (uint32_t)(checksum & bitmask);
}
</pre>
== Further Reading ==
* [https://web.archive.org/web/20040604013125/http://console-dev.com:80/eeprom.htm Information about EEPROM contents]
* [https://github.com/grimdoomer/PiPROM Read/Write an original Xbox EEPROM chip using a Raspberry Pi]
* [https://mehmedbasic.dk/post/xbox-eeprom/ Read/Write an original Xbox EEPROM using a VGA port]
* [https://www.youtube.com/watch?v=UcK6nKyKGVQ How To Make Xbox EEPROM Reader / Write (Video)]
* [https://www.youtube.com/watch?v=uzrljlHDr9w How To Extract Xbox EEPROM Easy (Video)]
5cab388c81e404edbb44db44e96335c670604dc2
Hard Drive
0
3707
6870
6821
2020-08-05T23:41:42Z
Velocet
2505
Used the old Xbox Hard Drive Locking Mechanism article and cleaned everything a bit
wikitext
text/x-wiki
The original Xbox hard disk drive was 8 GB in size. Later releases, 10 GB drives; however, only the first 8 GB of the drive was used. See [[Hardware Revisions]] for more information.
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter{{FIXME|reason=This is under control of running application / variation even in official products?}}
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| N/A
| [[Config Sector|Config Area]]
| 0x00000000
| 0x00080000
| Fixed Structure
| N/A
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition3
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition4
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition5
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
| \Device\Harddisk0\Partition2
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
| \Device\Harddisk0\Partition1
|}
::::::::::::::::::::::''side note: CD/DVD Drive "D:" <=> "\Device\CdRom0"''
::::::::::::::::::::::''and usually: added Drive "F:" <=> "\Device\Harddisk0\Partition6"''{{FIXME|reason=Mark as unofficial / homebrew}}
::::::::::::::::::::::::: ''added Drive "G:" <=> "\Device\Harddisk0\Partition7"''{{FIXME|reason=Mark as unofficial / homebrew}}
'''Debug/Devkit HDD:'''
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
|-
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking Mechanism and Basics ==
The hard drives in the Xbox are standard IDE drives locked with a key (referred to as the HDKey). The drive is unlocked by the Kernel at boot. The XBox uses a User Password with the Maximum security mode (see below).
The password is generated in two distinct phases:
* Extract the HDKey from the [[EEPROM]] which is unique to each Xbox making this phase dependent only on the [[EEPROM]].
* Generate a drive specific password (keyed to the model and serial number of the drive) with the extracted HDKey from the [[EEPROM]].
The security feature of the hard drive can be enabled and disabled by sending special ATA commands to the drive. If a device is locked, it will refuse all access until it is unlocked.
=== Locking Mechanism ===
The ATA/ATAPI Command Set - 2 (ACS-2) specification <ref>[http://www.t13.org/documents/UploadedDocuments/docs2011/d2015r7-ATAATAPI_Command_Set_-_2_ACS-2.pdf Draft: ATA/ATAPI Command Set - 2 (ACS-2) - T13/2015-D - Revision 7, June 22, 2011] (t13.org); Note: T13 drafts are freely available, only the final standards are behind a paywall.</ref> defines an optional ''SECURITY'' feature subset (chapter 7.43 - 7.48) which allows to limit access to the drive's data behind a hardware implemented locking mechanism:
* SECURITY DISABLE PASSWORD (Chapter 7.43)
* SECURITY ERASE PREPARE (Chapter 7.44)
* SECURITY ERASE UNIT (Chapter 7.45)
* SECURITY FREEZE LOCK (Chapter 7.46)
* SECURITY SET PASSWORD (Chapter 7.47)
* SECURITY UNLOCK (Chapter 7.48)
==== The Password ====
A device can have two passwords; either or both may be set with a maximum of 32 byte each. A device can be locked in two modes: High security mode or Maximum security mode. If the User password is not available, the only remaining way to get at least the bare hardware back to a usable state is to issue the SECURITY ERASE PREPARE command, immediately followed by SECURITY ERASE UNIT. In Maximum security mode, the SECURITY ERASE UNIT command requires the Master password and will completely erase all data on the disk.
===== User Password =====
If a ''User Password'' is set (SECURITY SET PASSWORD), the drive blocks the access on a reboot again so you have to re-enter the password (SECURITY UNLOCK). Setting the ''User Password'' will also set the ''Master Password Capability''.
===== Master Password =====
If the ''Master Password Capability'' is set the drive could be locked in one of two modes. Bit 8 in word 128 of the IDENTIFY response shows which mode the drive is in:
* 0 = High: the ''Master Password'' could be used to unlock (SECURITY UNLOCK) just like the ''User Password'' or to deactivate the ''User Password'' (SECURITY DISABLE PASSWORD).
* 1 = Maximum: the ''Master Password'' could only be used to wipe the drive (SECURITY ERASE UNIT). This makes the drive usable again but all data on it is lost.
=== Drive Data ===
During the second phase, the serial and model numbers are needed. These values are available in the response data from the DEVICE_IDENTITY ATA command. However, the data needs to be reorganized. It is read in Big Endian words, and needs to be byte swapped first to get the byte ordering correct. Then, starting from the end of the data (serial == 20 bytes, model == 40 bytes) ignore ASCII spaces (byte value of 0x20) at the end of the data. Zeros are *not* trimmed, *only* spaces. Do not be fooled into believing that this data is a string. On some drives this is the case, but on others there are non-ASCII values in the fields.
=== Basic Security Algorithms ===
There are three primary cryptography routines/functions needed when generating an XBox drive password:
* SHA1: Hashing algorithm. It's primary purpose is to take an input message and create a (relatively) small signature (called a digest) which is unique to the original message. One of the goals of SHA1 is to make it difficult to alter the input message in such a way as to result in the same output digest.
* RC4: Symmetric cipher. This means that the algorithm for encryption is the same as that for decryption. The purpose is to make one key work in both directions.
* HMAC: Uses a hashing algorithm (in this case SHA1) to generate a cryptographically "strong" signature.
==== Password Algorithm ====
- Key data is shown entering functions from the side
- Data is shown entring from above or below in order of presentation from left to right
<pre> RC4_key >--(second)-->--,
/|\ |
| |
.-<--|__eeprom_key__|-->-----------> HMAC_SHA1 |
| /|\ |
| | |
| .--->-----------' |
| | |
| eeprom_data = |__data_hash___|__enc_conf__|__enc_data__| |
| | | | |
| | \|/ | |
| | rc4_decrypt <----|---------<|
| | | | |
| \|/ | | |
| (must be equal) | \|/ |
| /|\ | rc4_decrypt <---'
| | | |
| | \|/ \|/
| | |_confounder_|____data____|
| | / / |
| | / / |
| | / / |
| | / / |
| | \|/ / \|/
`--->-----------------> HMAC_SHA1 / |__HDKey__|__|
/|\ / |
\______/ |
|
.-------------------------<--------'
|
| model_number serial_number
| \ /
| \ /
`--->-----------------> HMAC_SHA1
|
\|/
HD_password
</pre>
This seems to be the easiest way to show the required calculations.
Basically there are several intermediate steps. First, generate the RC4_key from the eeprom_key and the data_hash (first 20 bytes of eeprom_data). Use the RC4_key to decrypt the encrypted confounder (8 bytes 20 bytes into eeprom_data) and the encrypted data (20 bytes 28 bytes into eeprom_data). Now generate an HMAC_SHA1 hash from the eeprom_key and the decrypted confounder and data. Verify that this hash matches the data_hash stored in the eeprom. If they don't match then the eeprom data is not correct. If the hashes match then the first 16 bytes of the decrypted data field is the HDKey.
Once you have the HDKey get the model and serial number from the drive. Generate an HMAC_SHA1 hash from the HDKey, model and serial numbers. The resulting 20 bytes are the HD password. The remaining 12 bytes needed for the password are zeros.
== Unlocking ==
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
=== Unlock via Serial for Seagate drives ===
Look here: http://www.os2museum.com/wp/seagate-serial-talk/
=== Universal Unlock Method(s) ===
'''TODO'''
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [https://web.archive.org/web/20150502210033/http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
* [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
eb324b4d210c930fc97e02dd6f167b897daf58d2
Xbox Memory Unit
0
3790
6871
6211
2020-08-07T08:44:11Z
Ryzee119
2519
Added offical memory unit USB descriptor
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || 8MB || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || 8MB || Green logo Xbox and white "Trustmaster
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || 8MB || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit. (It is rumored that the capacity should not exceed 4GB)
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
|BESTRUNNER 256MB Speicherstick || 0xABCD || 0x1234 || 256MB ||
|-
|USB Mass Storage Device || 0x058F || 0x9381 || 64MB || Generic Mass Storage Device
|}
== Protocol ==
=== USB Descriptor (Offical Memory Unit) ===
<pre>
Bus 002 Device 003: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0020
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
== References ==
* [http://imgur.com/a/8QmDA Thrustmaster XBOX Memory Unit images by DarkGabz]
* [http://imgur.com/gallery/M0PZ6 3 XBOX memory units images by CodeAsm]
d69f35a7230538cda0d0ee4996b257e95ef931c4
Network
0
3692
6872
6700
2020-08-08T13:45:57Z
KaosEngineer
2482
many misspelled words corrected and a couple of punctuation changes made
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventually, an official wireless adapter was released based on a "D-Link 108AG Gaming Adapter" in the end of 2003.
The XDK provides a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
The IANA registered port 3074 (UDP / TCP) is reserved for Xbox communications (See [[System Link]] and [[Xbox Live]]).
== Integrated network adapter ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips.
The Xbox MAC address is stored in the [[EEPROM]].
The network driver, including the protocol stack is contained in the XDK.
The kernel only contains a small number of exports to reset and get the state of the NIC.
The Xbox Linux team used the binary drivers from Nvidia{{citation needed}}{{FIXME|reason=Wasn't the open-source forcedeth driver used?}}.
==== Heartbeat ====
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Wireless adapter ==
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with an Xbox setup disc (which would update the dashboard if necessary).
It was also [https://web.archive.org/web/20040508051958/http://www.xbox.com/en-US/live/connect/msmn740.htm described on Micosofts website].
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some EEPROM which hold the MAC address (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 LEDs are Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what appears to be Serial test pins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
The latest firmware is separated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
There were at least 2 firmware updates for download:
* [https://web.archive.org/web/20031210155952/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_101.htm MN740 1.01]
* [https://web.archive.org/web/20040602231929/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_102.htm MN740 1.02]
Judging by the firmware filenames above, there should also be an MN-740 1.00 and MN740 1.03.
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or web browser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
600be9d5f1a22c8ba9bfbcfca85043c0e4095b71
6873
6872
2020-08-08T13:49:43Z
KaosEngineer
2482
/* Wireless adapter */ missed a typo Micosofts > Microsoft's
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventually, an official wireless adapter was released based on a "D-Link 108AG Gaming Adapter" in the end of 2003.
The XDK provides a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
The IANA registered port 3074 (UDP / TCP) is reserved for Xbox communications (See [[System Link]] and [[Xbox Live]]).
== Integrated network adapter ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips.
The Xbox MAC address is stored in the [[EEPROM]].
The network driver, including the protocol stack is contained in the XDK.
The kernel only contains a small number of exports to reset and get the state of the NIC.
The Xbox Linux team used the binary drivers from Nvidia{{citation needed}}{{FIXME|reason=Wasn't the open-source forcedeth driver used?}}.
==== Heartbeat ====
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Wireless adapter ==
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with an Xbox setup disc (which would update the dashboard if necessary).
It was also [https://web.archive.org/web/20040508051958/http://www.xbox.com/en-US/live/connect/msmn740.htm described on Microsoft's website].
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some EEPROM which hold the MAC address (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 LEDs are Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what appears to be Serial test pins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the"ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
The latest firmware is separated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
There were at least 2 firmware updates for download:
* [https://web.archive.org/web/20031210155952/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_101.htm MN740 1.01]
* [https://web.archive.org/web/20040602231929/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_102.htm MN740 1.02]
Judging by the firmware filenames above, there should also be an MN-740 1.00 and MN740 1.03.
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or web browser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
8033603d04f29fc1ae80474a0310c79a5ec01073
6874
6873
2020-08-08T13:53:58Z
KaosEngineer
2482
/* Firmware */
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventually, an official wireless adapter was released based on a "D-Link 108AG Gaming Adapter" in the end of 2003.
The XDK provides a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
The IANA registered port 3074 (UDP / TCP) is reserved for Xbox communications (See [[System Link]] and [[Xbox Live]]).
== Integrated network adapter ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips.
The Xbox MAC address is stored in the [[EEPROM]].
The network driver, including the protocol stack is contained in the XDK.
The kernel only contains a small number of exports to reset and get the state of the NIC.
The Xbox Linux team used the binary drivers from Nvidia{{citation needed}}{{FIXME|reason=Wasn't the open-source forcedeth driver used?}}.
==== Heartbeat ====
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Wireless adapter ==
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with an Xbox setup disc (which would update the dashboard if necessary).
It was also [https://web.archive.org/web/20040508051958/http://www.xbox.com/en-US/live/connect/msmn740.htm described on Microsoft's website].
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some EEPROM which hold the MAC address (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 LEDs are Power, Wireless and Xbox(called Ethernet on the PCB).
The board seems to have Jtag and what appears to be Serial test pins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the "ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
The latest firmware is separated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
There were at least 2 firmware updates for download:
* [https://web.archive.org/web/20031210155952/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_101.htm MN740 1.01]
* [https://web.archive.org/web/20040602231929/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_102.htm MN740 1.02]
Judging by the firmware filenames above, there should also be an MN-740 1.00 and MN740 1.03.
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or web browser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
d98865aef5eda12cd1c258573521e772d627655b
6875
6874
2020-08-08T13:56:00Z
KaosEngineer
2482
/* Hardware */
wikitext
text/x-wiki
The Xbox contains an Ethernet module and one RJ45 connector. Additionally, separate modem and wireless accessories were considered when developing the console. Eventually, an official wireless adapter was released based on a "D-Link 108AG Gaming Adapter" in the end of 2003.
The XDK provides a TCP/IP protocol stack complete with a DNS PPTP, DHCP clients.
The IANA registered port 3074 (UDP / TCP) is reserved for Xbox communications (See [[System Link]] and [[Xbox Live]]).
== Integrated network adapter ==
Integrated in the Nvidia Southbridge MCPX chip which is similar to the nForce chips.
The Xbox MAC address is stored in the [[EEPROM]].
The network driver, including the protocol stack is contained in the XDK.
The kernel only contains a small number of exports to reset and get the state of the NIC.
The Xbox Linux team used the binary drivers from Nvidia{{citation needed}}{{FIXME|reason=Wasn't the open-source forcedeth driver used?}}.
==== Heartbeat ====
Ethernet II, Src: Microsof_f2:00:00 (00:50:f2:f2:00:00), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
MS Network Load Balancing
Signature: Unknown (0x584f4258)
Version: 1.1
Unique Host ID: 3118682055
Cluster IP: 167.102.81.132 (167.102.81.132)
Host IP: 4.89.169.109 (4.89.169.109)
Signature Data - Unknown (1481589336)
== Wireless adapter ==
based on the "D-Link 108AG Gaming Adapter", the Xbox MN-740 Wireless Bridge bundled with an Xbox setup disc (which would update the dashboard if necessary).
It was also [https://web.archive.org/web/20040508051958/http://www.xbox.com/en-US/live/connect/msmn740.htm described on Microsoft's website].
==== Hardware ====
* AR5312 CPU (MIPS 4Kc core?{{citation needed}})
* AR5212 RoC (Radio on Chip){{citation needed}} for 2.4 Ghz 802.11b/g{{citation needed}}.
* KS8721B physical layer transciever
* some EEPROM which hold the MAC address (based of FCC pictures and Firmware analysis){{citation needed}}
* IC42S16400 8Mb ram
* SST39LF0?0A (1 or 2 Mb) (the FCC picture is unclear on the size part due to writing) {{citation needed}}
The onboard 3 LEDs are Power, Wireless and Xbox (called Ethernet on the PCB).
The board seems to have Jtag and what appears to be Serial test pins exposed.
===== Firmware =====
This wireless bridge runs a closed source version of the "ThreadX JADE/Green Hills Version G4.0.4.0" RTOS.
The firmware contains a copyright string of: "Copyright (c) Microsoft Corporation All Rights Reserved Device is Xbox Compatible"
The latest firmware is separated by a boot and runtime firmware {{citation needed}} :
* MN740_01.03.00.0005_BOOT.bin, "Xbox Wireless Adapter (MN-740) boot firmware"
* MN740_01.00.02.0022_RUNTIME.bin, "Xbox Wireless Adapter (MN-740) runtime firmware"
There were at least 2 firmware updates for download:
* [https://web.archive.org/web/20031210155952/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_101.htm MN740 1.01]
* [https://web.archive.org/web/20040602231929/http://www.microsoft.com/hardware/broadbandnetworking/readme/readme_mn740_102.htm MN740 1.02]
Judging by the firmware filenames above, there should also be an MN-740 1.00 and MN740 1.03.
====== WPA2 support ======
The shipped firmware does not support WPA or WPA2.
A "firmware" hack based on the D-Link firmware adds WPA support, rendering Dashboard support unfunctional and changing settings require connecting to the LAN port using a PC (or web browser capable application).
==== Software (Xbox setup disc) ====
The setup disc is a CD[http://redump.org/disc/53586/]. It contains an XISO filesystem that contains only a "default.xbe" which contains a dashboard updater.
== References and links ==
* [https://xboxlivehacking.blogspot.de/ https://xboxlivehacking.blogspot.de/]
* [https://www.google.com/patents/US20040009815 Patent: Managing access to content]
* [https://www.google.com/patents/US20030093669 Patent: Network architecture for secure communications between two console-based gaming systems]
* [https://www.google.com/patents/US20030093668 Patent: Architecture for manufacturing authenticatable gaming systems ]
* [https://www.google.com/patents/US7803052 Patent: Discovery and distribution of game session information ]
* [https://www.google.com/patents/US20030229779 Patent: Security gateway for online console-based gaming ]
* [https://www.google.com/patents/US20030233537 Patent: Presence and notification system for maintaining and communicating information ]
* [https://www.google.com/patents/US7218739 Patent: Multiple user authentication for online console-based gaming ]
* [https://web.archive.org/web/20040831091347/http://www.xbox.com:80/assets/en-us/HardwareManuals/Xnewt.pdf Xbox Wireless adapter manual]
* [https://www.hanselman.com/blog/FlashingTheFirmwareOfAnXboxMN740WirelessAdapterToADLink108AGToSupportWPASecurity.aspx Flashing the Firmware of an Xbox MN-740 Wireless Adapter to a D-Link 108AG to support WPA Security ]
* [https://fccid.io/C3KMN740/Internal-Photos/Internal-Photos-360373.iframe FCC entry of Xbox MN-740 Wireless Adapter (with IC writing intact) ]
b6b1250333344208545fcc21522aaedda8983db0
Emulators
0
3703
6878
6696
2020-09-01T13:39:14Z
Espes
2484
add xemu
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|xemu
|[https://xemu.app/][https://github.com/mborgerson/xemu]
|mborgerson
|Windows/macOS/Linux
|
|xemu is a fork of XQEMU but more usable
|-
|{{Yes|Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{No|Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{No|Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid
|{{No}}
|StrikeBox
|[https://github.com/StrikerX3/StrikeBox]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{No|Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|[https://github.com/LoveMHz/XBENext]
|LoveMHz
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{No|Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{No|Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
676117800d4c7cdb80fadbcf37250a1085d1b2da
6879
6878
2020-09-01T13:42:08Z
Espes
2484
Sort the more notable ones to the top
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|xemu
|[https://xemu.app/][https://github.com/mborgerson/xemu]
|mborgerson
|Windows/macOS/Linux
|
|xemu is a fork of XQEMU but more usable
|-
|{{Yes|Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|Fusion[http://michaelbrundage.com/project/xbox-360-emulator/] ([[Xbox 360 Backward Compatibility]])
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|Fission[http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility] ([[Xbox One Backward Compatibility]])
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|
|-
|{{No|Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{No|Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid
|{{No}}
|StrikeBox
|[https://github.com/StrikerX3/StrikeBox]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{No|Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|[https://github.com/LoveMHz/XBENext]
|LoveMHz
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{No|Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
ac324e05888248700156d0eca68d3d49ff2021e3
6880
6879
2020-09-01T13:43:52Z
Espes
2484
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|xemu
|[https://xemu.app/][https://github.com/mborgerson/xemu]
|mborgerson
|Windows/macOS/Linux
|
|xemu is a fork of XQEMU but more usable
|-
|{{Yes|Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[[Fusion]][http://michaelbrundage.com/project/xbox-360-emulator/]
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|[[Fission]][http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility]
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|
|-
|{{No|Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{No|Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid
|{{No}}
|StrikeBox
|[https://github.com/StrikerX3/StrikeBox]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{No|Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|[https://github.com/LoveMHz/XBENext]
|LoveMHz
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{No|Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
9b37c4d43fe014f59471f7949a23ac847f8267a0
Hardware Revisions
0
3669
6881
6830
2020-09-17T05:12:16Z
KaosEngineer
2482
/* PHILIPS VAD6053 */ Only 1 L in this brand name - Philips, not 2.
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILIPS VAD6053 ====
Also named: VAD6011/21 apear to have no brand or partnumber on its large main controller,might be Cirrus Logic based on its size and use of a Philips secondary smaller mcu. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC dvdrom drive Pioneer 500M with the Philips firmware to be a Xbox dvdrom drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
4f502a6e8af6c90f0b36e3692ca68058a04e8b9f
6882
6881
2020-09-17T05:14:58Z
KaosEngineer
2482
/* PHILIPS VAD6035 */ 6035 not 6053, and fixed some typos.
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILIPS VAD6035/21 ====
Also named: VAD6011/21 appears to have no brand or part number on its large main controller, might be Cirrus Logic based on its size and use of a Philips secondary smaller MCU. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC DVD-ROM drive Pioneer 500M with the Philips firmware to be an Xbox DVD-ROM drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
8d8c79cd02a9fc029da3a05b7f62227b5eef9c4c
DVD Emulator
0
3821
6883
6734
2020-09-23T00:31:15Z
GoTeamScotch
2526
Added photos of DVD emulation board and a separate photo of it next to the debugging board
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding which files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and possibly potential faults that could occur.
The Hardware required for this was a Developement kit, (with the DVD emulation board) some sort of scsi cable, and an XDK-Raptor card.{{citation needed}}
The complete kit, a Raptor PCI Scsi card and Hardisk was numbered: 940-75004 Rev.01
two or more versions of the PCI scsi card are known:
* 700-75307 Rev.01
* 700-75307 Rev 03 [https://assemblergames.com/threads/sealed-xbox-raptor-card-for-xdk-dvd-emu.41763/ Assemblergames](posibly same as rev1?)
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
This wasn't the fastest way to get an executable to the Xbox for development, and is useless for Homebrew.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
Picture: [[File:https://i.imgur.com/VNFxuya.jpg]]
Next to serial debugging board: [[File:https://i.imgur.com/OZqxKyH.jpg]]
0827bcaf9850998eb7fdad5443ad97505a1ce035
File:Xbox DVT DevPCBs 1197.jpg
6
4000
6884
2020-09-23T00:33:19Z
GoTeamScotch
2526
DVD emulation and serial debugging boards
wikitext
text/x-wiki
DVD emulation and serial debugging boards
194f68a587b172c6abbb4f018abe8f3e03470741
Xbox Live
0
3693
6885
6703
2020-10-24T06:30:38Z
Billy549
2520
wikitext
text/x-wiki
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of Kerberos-based authentication tickets, with a Secure Gateway used to then access services (such as Matchmaking, Statistics/Leaderboards, and custom game servers)
=== Authentication servers ===
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customisations for the Xbox.
The first time an Xbox connects to Xbox Live from the factory, it'll connect to MACS.XBOXLIVE.COM and use a pre-shared key based from the Online Key, HDD Key, and a unique key present in all Xbox Live binaries.
The server would then return a machine account that is then used for all further authentication (for example, to authenticate for the service to create a new Xbox Live user account).
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
=== Matchmaking servers ===
=== Game servers ===
=== XDK Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon. It will return XONLINETASK_S_RUNNING while the login process has not been completed.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|Will return XONLINE_S_LOGON_CONNECTION_ESTABLISHED when the task is successfully completed. Otherwise it will return an error code.
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|}
== Discontinuation of service ==
The service was officially discontinued on April 15th, 2010.
12 players decided to stay in a lobby of ''Halo 2'' 24/7 to keep a server running.
The final player, Apache N4SIR was streaming the entire event, as the player count of 12 twindeled down to just him. At 11:40 PM PDT, on May 11th 2010, Apache N4SIR was booted from the game[http://i.imgur.com/oQw6k5H.jpg].
68838ad6a8282839b15b4ef8884efab241847da1
17 Mistakes Microsoft Made in the Xbox Security System
0
3781
6886
5625
2020-10-30T19:29:52Z
Billy549
2520
Change URLs - remove web archive (CCC keeps their data up for old congresses) and change Google Video links to YouTube (asked in Discord)
wikitext
text/x-wiki
{{retrieved|https://web.archive.org/web/20100617003620/http://www.xbox-linux.org/wiki/17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System}}
by [https://web.archive.org/web/20100617003620/http://www.xbox-linux.org/wiki/User:Michael_Steil Michael Steil]
{| class="wikitable"
|-
|
This [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf paper], dated 2005-10-25, has been submitted to the [http://events.ccc.de/congress/2005/ 22nd Chaos Communication Congress] and has been on [https://events.ccc.de/congress/2005/fahrplan/events/559.en.html December 29th 2005, 18:00], at the Berliner Congress Center, Berlin, Germany.
A '''recording''' of the presentation is available here: [https://www.youtube.com/watch?v=VdeciDTCCLQ YouTube: Team Xbox-Linux at 22C3].
'''Another recording''' of a slightly updated talk is available here: [https://www.youtube.com/watch?v=9NqLljaHc80 YouTube: Deconstructing The Xbox Security System]
|}
== Introduction ==
The Xbox is a gaming console, which has been introduced by Microsoft Corporation in late 2001 and competed with the Sony Playstation 2 and the Nintendo GameCube. Microsoft wanted to prevent the Xbox from being used with copied games, unofficial applications and alternative operating systems, and therefore designed and implemented a security system for this purpose.
This article is about the security system of the Xbox and the mistakes Microsoft made. It will not explain basic concepts like buffer exploits, and it will not explain how to construct an effective security system, but it will explain how ''not'' to do it: This article is about how easy it is to make terrible mistakes and how easily people seem to overestimate their skills. So this article is also about how to avoid the most common mistakes.
For every security concept, this article will first explain the design from Microsoft's perspective, and then describe the hackers' efforts to break the security. If the reader finds the mistakes in the design, this proves that Microsoft has weak developers. If, on the other hand, the reader doesn't find the mistakes, this proves that constructing a security system is indeed hard.
=== The Xbox Hardware ===
Because Microsoft had a very tight time frame for the development of the Xbox, they used off-the-shelf PC hardware and their Windows and DirectX technologies as the basis of the console. The Xbox consists of a Pentium III Celeron mobile 733 MHz CPU, 64 MB of RAM, a GeForce 3 MX with TV out, a 10 GB IDE hard disk, an IDE DVD drive, Fast Ethernet, as well as USB for the gamepads. It runs a simplified Windows 2000 kernel, and the games include adapted versions of Win32, libc and DirectX statically linked to them.
Although this sounds a lot more like a PC than, for example, a GameCube with its PowerPC processor, custom optical drive and custom gamepad connectors, it is important to point out that, from a hardware point of view, the Xbox shares ''all'' properties of a PC: It has LPC, PCI and AGP busses, it has IDE drives, it has a Northbridge and a Southbridge, and it includes all the legacy PC features such as the "PIC" interrupt controller, the "PIT" timer and the A20 gate. nVidia sold a slightly modified Southbridge and a Northbridge with another graphics core embedded for the PC market as the "nForce" chipset between 2001 and 2002.
=== Motivation for the Security System ===
The Xbox being a PC, it should be trivial to install Linux on it in order to have a cheap and, for that time, powerful PC. Even today, a small and silent 733 MHz PC with TV connectivity for 149 USD/EUR is still attractive. But this is not the only thing Microsoft wanted to prevent. There are three uses that should not have been possible:
* '''Linux''': The hardware is subsidized and money is gained with the games, therefore people should not be able to buy an Xbox without the intent to buy any games. Microsoft apparently feels that allowing the Xbox to be used as a (Linux) computer would be too expensive for them.
* '''Homebrew/Unlicensed''': Microsoft wants the software monopoly on the Xbox platform. Nobody should be able to publish unlicensed software, because Microsoft wants to gain money with the games to amortize the hardware losses, and because they do not want anyone to release non-Internet Explorer browsers and non-Windows Media Player multimedia software.
* '''Copies''': Obviously it is important to Microsoft that it is not possible to run copied games on the Xbox.
Microsoft decided to design a single security system that was supposed to make Linux, homebrew/unlicensed software and copies impossible. The idea to accomplish this was by simply locking out all software that is either not on the intended (original) medium or not by Microsoft.
On the one hand, this idea makes the security system easier and there are less possible points off attack. But on the other hand, 3 times more attackers have a single security system to hack: Although Open Source and Linux people, homebrew developers, game companies as well as crackers have little common interests, they could unite in this case and jointly hack the Xbox security system.
Of the three consoles of its generation, Xbox, Playstation 2 and GameCube, the Xbox is the one whose security system has been compromised first, the one that is now easiest to modify for a hobbyist, the one with the most security system workarounds, and the one with the most powerful hacks. This may be, because the Xbox security is the weakest one of the three, but also because Open Source people, homebrew people and crackers attacked the Xbox, while the Open Source people did not attack the Playstation 2, as Linux had been officially supported by Sony, so the total number of hackers was lower, buying them time.
=== Idea of the Security System ===
In order to allow only licensed and authentic code to run, it is necessary to build a TCPA/Palladium-like chain of trust, which reaches from system boot to the actual execution of the game. The first link is from the CPU to the code in ROM, which includes the Windows kernel, and the second link is from the kernel to the game.
There are several reasons that the operating system is contained in ROM (256 KB) instead of being stored on hard disk, like on a PC. First, it allows a faster startup, as the kernel can initialize while the hard disk is spinning up, furthermore, there is one link less in the chain of trust, and in case verification of the kernel gets compromised, it is harder to overwrite a ROM chip than modify data on a hard disk.
== Startup Security ==
When turned on, x86-compatible CPUs start at the address 0xFFFFFFF0 in the address space, which is usually flash memory. For the Xbox, this is obviously no good idea, as flash memory can be
* replaced, by removing the chip, fitting a socket and inserting a replacement chip.
* overridden, by adding another flash memory chip to the LPC bus. This override functionality is necessary, because during manufacturing, an empty flash memory chip gets soldered onto the board, an override LPC ROM chip gets connected to the board and the system boots from the external ROM, which then programs the internal flash memory. This procedure is significantly cheaper than preprogramming the flash memory chips.
* reprogrammed, because flash memory can be written to many times. It would be possible to use ROM instead of flash memory, but ROM is more expensive than flash memory.
Thus, the machine must not start from flash memory.
=== Microsoft's Perspective ===
It would be possible to make two of the attacks impossible, by using ROM chips instead of flash. There would be no way to reprogram them, and it would be possible to disable the LPC override functionality in the chipset, because it is not needed for the manufacturing process any more.
==== The Hidden ROM ====
There is a solution between flash memory and ROM that combines advantages of both these approaches. This trick is rather old and had already been used in previous gaming consoles like the Nintendo 64: Use a tiny non-replaceable startup ROM, and put the bulk of the firmware data (i.e. the Windows kernel) into flash memory. The "internal" ROM checks whether the contents of the flash memory are authentic, and if yes, it passes execution to it.
This way, there will be another link in the chain of trust, but the ROM code can be trusted (if it is non-replaceable), and if, in addition, it is non-accessible, an attacker may not even have a clue how verification works.
==== Location of the ROM ====
But where can this ROM be put? It cannot be a separate chip, as it would be replaceable. It would have to be included into another chip. The CPU would be ideal, as the ROM contents would not travel over any visible bus, but then it would be impossible to use cheap off-the-shelf Celerons. Including it in any other chip would make it non-replaceable, but data would travel over a bus. It seems to be a good compromise to store the ROM data in the Southbridge ("MCPX"), as it is connected via the ''very'' fast HyperTransport bus, so it is very hard to sniff. A former Microsoft employee confirmed that the developers tought that nobody was able to sniff HyperTransport.
==== Verification Algorithm ====
This secret ROM stored in the Southbridge must verify the Windows kernel in the external flash memory before executing it. One idea would be to checksum (hash) the flash contents using an algorithm like MD5 or SHA-1, but this would mean that the hash of the kernel has to be stored in the secret ROM as well, which would make it imposible to ship updated versions of the kernel in future Xboxes without also updating the ROM contents - which would be very expensive.
A digital signature algorithm like RSA would be better: It would be possible to update the kernel without changing the ROM, but an RSA implementation takes up a lot of space, and embedded ROM in the Southbridge is expensive. It would be ideal if the algorithm fit in only 512 bytes, which is impossible for RSA.
==== Second Bootloader ("2bl") ====
A solution for this problem is again to introduce another link in the chain of trust: The ROM only hashes a small loader ("2bl", "second bootloader") in flash memory, which can never be changed. It is then the job of this loader to verify the rest of flash, and as the second loader can be any size, there are no restrictions.
So the final chain of trust looks like this: The CPU boots from the secret ROM embedded into the Southbridge, which cannot be changed. The secret ROM verifies the second bootloader in flash memory using a hash algorithm, and if it is authentic, runs it. The second bootloader checks the kernel, and if authentic, runs it.
Now the second bootloader and the Windows kernel would be stored in flash memory in plain text, which is a bad idea: An attacker can immediately see how the second bootloader verifies the integrity of the kernel, and even analyze the complex kernel for possible exploits. Encrypting all the flash contents will not solve possible vulnerability problems, but it will buy us time until the decryption of the flash contents is understood by hackers.
The decryption key would have to be stored in the secret ROM, and the 2bl verification code would also have to decrypt the flash contents into RAM while reading it.
==== RAM Initialization ====
Decrypting flash memory contents into RAM is a challenge if we are living inside the first few hundred bytes of code after the machine has started up: At this point, RAM might not be stable yet. The reason for this is that Microsoft bought cheap RAM chips; they just took everything Samsung could give them to lower the price, even faulty ones, i.e. chips that will be unstable when clocked at the highest frequencies specified.
The Xbox is supposed to find out the highest clock speed the RAM chips can go and run them at this frequency - this is the reason why some games don't run as smoothly on some Xboxes as on others. So the startup code in the secret ROM has to do a memory test, and if it fails, clock down the RAM, do another memory test, and if it fails again, clock down again, and so on, until the test succeeds or the RAM cannot be clocked down any further.
The problem now is that it is impossible to do complex RAM initialization, data decryption and hashing in 512 bytes. This code would need at least 2 KB, which would be significantly more expensive, if embedded into the Southbridge.
We could put the RAM initialization code, which is the biggest part of what the startup code needs to do, into flash memory, and call it from the secret ROM, but this would kill security, as an attacker could easily see the unencrypted code in flash, modify it and have the control of the machine right at the startup.
The developers at Microsoft had a brilliant idea how to solve this problem: They designed an interpreter for a virtual machine that can read and write memory, access the PCI config space, do "AND" and "OR" calculations, jump conditionally etc. The instruction code has one byte instructions and two 32 bit operands, it can use immediate values as well as an accumulator.
The interpreter for the virtual machine is stored in the secret ROM, and its code ("xcodes") is stored in flash memory. This code does the memory initialization (plus extra hardware initialization, which would not be necessary). This program cannot be encrypted, as there is again no space for it in the secret ROM, but as the virtual machine is unknown to the hacker, encryption should not be that important. It also cannot be hashed, as this would make it impossible to change the xcodes for later revisions of the Xbox hardware. Therefore we have to make sure that, if the hacker knows how the virtual machine works, it is impossible to do anything malicious with the xcodes.
==== The Virtual Machine ====
There are several ways an attacker could exploit the xcodes, which are by definition untrusted, because they reside in "external" flash memory. Microsoft included some code to make sure there were no possible exploits.
===== Read the Secret ROM =====
The xcodes can read memory and access I/O ports. This way an attacker could place xcodes into flash memory that dump the secret ROM, which must be mapped into the address space somewhere, to a slow bus, like the LPC or the I2C bus, or write it into CMOS or the EEPROM, so that we can read it later.
The xcode interpreter has to make sure that the xcodes cannot read the secret ROM, which is located at the upper 512 bytes of the address space. The simplest way to accomplish this is to mask the address when reading from memory:
<pre> and ebx, 0FFFFFFFh ; clear upper 4 bits
mov edi, [ebx] ; read from memory location op1 into di
jmp next_instruction
</pre>
This way, the xcodes can only ready from the lower 256 MB, which is no problem, as there are only 64 MB of RAM, and memory mapped I/O can be mapped into this region using PCI config cycles.
===== Turn off the Secret ROM =====
The xcodes may also not turn off the secret ROM, or else the CPU, while executing the xcode interpreter, would "fall down" from the secret ROM into the underlying flash ROM, which is also mapped to the top end of the address space. The turn off functionality is important: As soon as the second bootloader takes over, the secret ROM has to be turned off, or else an attack against a game, which makes it possible to run arbitrary code, could dump the secret ROM, making additional attacks against it possible.
The secret ROM can be turned off by writing a value with bit #1 set to the PCI config space of device 0:1:0, register 0x80. So the xcode interpreter always clears this bit in case there is a write to this PCI config space register:
<pre> cmp ebx, 80000880h ; ISA Bridge, MCPX disable?
jnz short not_mcpx_disable ; no
and ecx, not 2 ; clear bit 1
not_mcpx_disable:
mov eax, ebx
mov dx, 0CF8h
out dx, eax ; PCI configuration address
add dl, 4
mov eax, ecx
out dx, eax ; PCI configuration data
jmp short next_instruction
</pre>
==== Encryption and Hashing ====
For the decryption of the second bootloader, Microsoft chose the RC4 algorithm, which is pretty small, as it fits into 150 bytes. It uses a 16 bytes key, which is also stored in the secret ROM. Microsoft's engineers also chose to use RC4 as a hash, so that no additional algorithm had to be implemented for this. Differential decryption algorithms feed the decrypted data into the generator of the decryption key stream, so if the encrypted code is changed at one byte, all the following bytes will decrypted incorrectly, up to the last bytes. This way, it is possible to only test the last few bytes. If they have been decrypted correctly, then the encrypted code has been authentic. (If you are getting suspicious now - read on!)
In practice, the secret ROM in the Xbox compares the last decrypted 32 bit value with the constant of 0x7854794A. If it is incorrect, the Xbox has to panic.
==== Panic Code ====
So far, the code in the secret ROM does this:
* Enter protected mode, and set up segment descriptors, so that we have access to the complete flat 32 bit address space.
* Interpret the xcodes.
* Decrypt and hash the second bootloader, store it in RAM
* If the hash is correct, jump to the decrypted second bootloader in RAM, else panic.
There is another possible attack here: A hacker could deliberately make the hash fail. If the Xbox then halts and flashes its lights to indicate an error, the attacker can attach a device to dump the secret ROM after the CPU has shut down and the bus is idle. Although HyperTransport is fast, it would be a lot easier to attach a device that actively requests the data from the Southbridge than sniffing it when the CPU requests it.
One solution would be not to halt but to shut down the Xbox in case of a problem. The support chips have this functionality. But incorrect flash memory does not necessarily mean that there has been an attack, it could also be a malfunction, and the machine should use the LED to blink an error code.
So we should leave the Xbox running, but just turn off the secret ROM, so that it cannot be read any more. But there is a problem: We have to do this inside the secret ROM. So if we disable the ROM, we cannot have the "hlt" instruction after that, because the CPU will "fall down" into flash memory - where an attacker could put code. On the other hand, if we halt the CPU, we cannot turn off the secret ROM afterwards.
We cannot put the disable and halt code into RAM and jump there, because RAM might not be stable, and might even have been tampered with by an attacker (e.g. by turning off the memory controller using the xcodes) so that the secret ROM does not get turned off. We cannot put the disable and halt code into flash either, as again, an attacker could simply put arbitrary code to circumvent the complete system there.
The Microsoft engineers used yet another brilliant trick: They jump to the very end of the address space (which is covered by the secret ROM) and turn off the secret ROM in the very last instruction inside the address space. This is a simplified version of the idea:
<pre>FFFFFFF1 mov eax, 80000880h
FFFFFFF6 mov dx, 0CF8h
FFFFFFF9 out dx, eax
FFFFFFFB add dl, 4
FFFFFFFC mov al, 2
FFFFFFFE out dx, al
</pre>
After the last instruction, the program counter (EIP) will overflow to 00000000, which, according to the CPU documentation, causes an exception, and as there is no exception handler set up, it causes a double fault, which will effectively halt the machine.
=== The Hacker Perspective ===
So much for the theory. The design looked pretty good, although the trade off between cost and security as it has been decided, might give some people headaches. Let us now have a look at the Xbox from the hackers' point of view.
It has been well known that the Xbox chipset is a modified version of nVidia's nForce chipset, so we knew that it was standard IDE, USB, there was an internal PCI bus and so on. Two hackers from Great Britain, Luke and Andy, checked the hard disk and found out that it uses a custom partitioning scheme, a FAT-like filesystem, that there is no kernel on the hard disk, but there is the Xbox Dashboard on the fourth partition, the main program that gets executed if there is no game in the DVD drive, which allows changing settings, playing audio CDs and managing savegames.
==== Extracting the Secret ROM ====
Andrew "bunnie" Huang, then a PhD student at the MIT, disassembled his Xbox, saw the flash memory, de-soldered it, extracted the contents, put it on his website and got a phone call from one of Microsoft's lawyers.
The flash memory image was obviously encrypted, but there was x86 binary code in the upper 512 bytes! Obviously, there should be no code in the upper 512 bytes, as this gets overridden by the secret ROM, which contains the actual machine setup and flash decryption code.
Bunnie found out that this code was an interpreter for tables in flash memory, plus a decryption function that looked like RC4. He rewrote the crypto code in C and tried it on the data - but the resulting data was random, obviously something was wrong. The interpreter didn't make much sense either. The code used opcodes that were unknown to the interpreter.
In order to find out what was wrong, bunnie rewrote the top of flash with his own code, and later even completely erased the upper 512 bytes, but the Xbox still booted! So it was obvious to him that this region gets overridden by some internal code. As it turned out later, the code in the upper 512 bytes of the flash image was a very old version of the secret ROM code, which had been unintentionally linked to the image by the build tools. It seems like nobody had looked at the resulting image at the end, before they shipped the consoles. This mistake was very close to a fatal one, and Microsoft was lucky that they didn't link the actual version of the secret ROM.
But it didn't make that much of a difference, as bunnie sniffed the busses, and eventually dumped the complete secret ROM, including the RC4 key from HyperTransport, using a custom built sniffer - after all, he was working on his PhD degree about high performance computing, and he could use the excellent resources of the MIT hardware lab.
When he published his findings, other people found out quite quickly that the validity check did nothing at all: The combination of decryption and hash with a cypher that feeds back the decrypted data into the key stream is a good idea, but unfortunately, RC4 is no such cypher. It decrypts bytes independently, so if one byte is wrong, all the following bytes will still be decrypted correctly. So checking the last four bytes has no effect: There is no hash.
It turned out that the cypher used in the old version of the secret ROM as found in flash memory used the RC5 cypher. In contrast to RC4, RC5 does feed the decrypted stream back into the key stream. So they seem to have replaced RC5 with RC4 without understanding that RC4 cannot be used as a hash. Bunnie's theory why they abandoned RC5 is that RC5 was still a work in progress, and that Microsoft wasn't supposed to have it, so they went for the closest relative - RC4.
==== Modchips ====
Now that the encryption key was known and there was effectively no hash over the second bootloader, it was possible to patch this code: People added code to the second bootloader to patch the kernel after decryption (and decompression) to accept executables even if on the wrong media (DVD-R instead of original) or if the RSA signature of the executables was broken (i.e. unsigned homebrew software).
Modchips appeared: Some of them had a complete replacement flash memory chip on them, others only patches a few bytes and passed most reads down to the original flash chip. All these modchips had to be soldered in parallel to the original flash chip, using 31 wires.
Now other people found out that, if the flash chip is completely missing, the Xbox wants to read from a (non-existant) ROM chip connected to the (serial) LPC bus. This is of course because of the manufacturing process: As it has been explained before, the flash chip gets programmed in-system, the first time they are turned on, using an external LPC ROM chip. Modchip makers soon developed chips that only needed 9 wires and connected to the LPC bus. It was enough to ground the data line D0 to make the Xbox think that flash memory is empty.
Lots of these "cheapermods" appeared, as they only consisted of a single serial flash memory chip. They could be installed within minutes, especially after some companies started shipping chips that used pogo pins, so that no soldering was required.
Some groups wrote applications like boot menus that made it possible to copy games to hard disk and run them from there. Patched Xbox kernels appeared that supported bigger hard disks. Making the Xbox run copies from DVD-R or hard disk as well as homebrew applications written with the official Xbox SDK was now easy.
==== Backdoors ====
The Xbox Linux Project was working on two ways to start Linux: Either run the Linux kernel from a CD/DVD as if it was a game, or run it directly from flash memory, or from HD/DVD using a Linux bootloader in flash memory, so that the Xbox behaved like a PC. For the latter, Xbox Linux was working on a replacement firmware.
It would have been no problem to write a replacement firmware that took over execution instead of the second bootloader, as it was possible to completely replace this second bootloader, as well as encrypt it, using the well-known key from the secret ROM. But the firmware developers felt very uncomfortable with the idea of using this secret key in their GPL code. Other hackers felt the same, and thus were looking for bugs and backdoors in the secret ROM code, in order to find a way to be able to implement a replacement firmware without having to deal with encryption.
===== The Visor Backdoor =====
A hacker named visor, who never revealed his real name, wondered whether the rollover to 00000000 in case of an incorrect 2bl "hash" really caused a double fault and halted the CPU. He used the xcodes to write the assembly instruction for "jmp 0xFFFF0000" to the memory location 00000000 in RAM and changed the last four bytes in 2bl, in order to make the secret ROM run the panic code. The Xbox happily continued executing code at 00000000 and took the jump into flash.
When appending these instructions to the existing xcodes, he could make sure that RAM had been properly initialized and was thus stable. So there was no need to encrypt the Xbox Linux bootloader firmware with the secret key any more. It was enough to add the memory write instruction to the end of the xcodes and make sure that 2bl decryption fails - which will automatically happen, if the firmware replacement does not contain the 2bl code.
Now why is there no double fault? Hackers from the Xbox Linux team checked with AMD employees and they explained that AMD CPUs ''do'' throw an exception in case of EIP overflows, but Intel CPUs don't.
The reason that Intel CPUs don't is because of... 1970s stuff. Execution on x86 CPUs starts at the top of the address space (minus 16 bytes), but some computer makers wanted to have their ROM at the bottom of the address space, i.e. at 0, so Intel implemented the instruction with the encoding 0xFFFF, which is what you get when reading from addresses not connected to any chip, as a No-Operation ("nop") and made the CPU throw no exception in case of the address space wraparound. This way, the CPU would "nop" its way up to the top, and finally execute the code at 0.
AMD did not implement this behavior, as it had not been necessary any more by the time AMD entered the x86 market with it own designs, and because they felt that this behavior was a security risk and fixing it would not mean a significant incompatibility.
But why did Microsoft do it wrong? This can be explained with the history of the Xbox: AMD offered to design and manufacture both the CPU and the motherboard (including the chipset), and nVidia was contracted to contribute the graphics hardware. The first developer systems, even outside of Microsoft, were Athlon-based, but then Intel came in and offered their chips for less money, as well as the complementary redesign of the existing AMD chipset to work with their CPU. Consequently, nVidia licensed the AMD chipset so that the AMD name vanished. This also means, that nVidia nForce chipset is essentially AMD technology, closely related to the AMD-760 chipset.
So when Microsoft switched from AMD to Intel, they apparently forgot to test their security code again with the new hardware, or to read the Intel datasheets.
===== The MIST Hack =====
Soon after the visor hack, another vulnerability was found in the secret ROM code, attacking the code that checks whether an xcode wants to disable the secret ROM. Let us look at this code again:
<pre> cmp ebx, 80000880h ; ISA Bridge, MCPX disable?
jnz short not_mcpx_disable ; no
and ecx, not 2 ; clear bit 1
not_mcpx_disable:
mov eax, ebx
mov dx, 0CF8h
out dx, eax ; PCI configuration address
add dl, 4
mov eax, ecx
out dx, eax ; PCI configuration data
jmp short next_instruction
</pre>
The PCI config address is stored in the EBX register in the beginning. This address has to be sent to I/O port 0x0CF8, and the 32 bit data has to be sent to I/O port 0x0CFC. The address is encoded like this:
<pre>0-7 reg
8-10 func
11-15 device
16-23 bus
24-30 reserved
31 always 1
</pre>
The attack is pretty obvoius: there are seven reserved bits in the address, and the code tests for a single exact value. What happens if we write to an alias of the same address, by using an address with only some of the bits 24 to 30 changed? While the instruction
<pre>POKEPCI(80000880h, 2)
</pre>
will be caught, the instruction
<pre>POKEPCI(C0000880h, 2)
</pre>
will not be caught - and works just as well, because the PCI bus controller just ignores the unused bits.
This instruction disables the secret ROM, that is, the interpreter disables itself when sending the value to port 0x0CFC, and the CPU falls down to flash memory. We can put a "landing zone" into flash, by filling all of the top 512 bytes with "nop" instructions, and putting a jump to the beginning of flash into the last instruction, so that we do not have to care where exactly the CPU lands after falling down, and we are independent of possibly hard to reproduce caching effects.
It is hard to find a good reason for this bug other than carelessness. It might be attributed to not reading the documentation closely enough, as well as not looking at it from the perspective of a hacker well enough. After all, this code had been written with a specific attack in mind - but the code made hacking easier, by giving hackers a hint how to attack.
===== Another PCI Config Space Attack =====
There is a second sequence of xcode instructions that can disable the secret ROM just as well, which are not caught by the interpreter: The interpreter supports writing bytes to I/O ports, so it is possible to put together the code to disable the secret ROM using 8 bit I/O writes:
<pre>OUTB(0xcf8), 0x80
OUTB(0xcf9), 0x08
OUTB(0xcfa), 0x00
OUTB(0xcfb), 0x80
OUTB(0xcfc), 0x02
</pre>
This hack has been unreleased until now. It has been found not long after the MIST hack, but kept secret, in case Microsoft fixed the MIST bug. In the meantime, they have implemented a fix that makes all hacks impossible that are based on turning off the secret ROM. This will be described in detail later.
===== More Ideas =====
There have been more ideas, but few of them have been pursued, as long as other existing backdoor existed. One possible idea is to base a hack on caching...
== Startup Security, Take Two ==
When bunnie hacked the secret ROM, Microsoft reacted by updating the ROM. Thousands of already manufactured Southbridges were trashed, new ones made. The hacker community called these Xboxes "version 1.1" machines.
=== Microsoft's Perspective ===
Microsoft had now understood that RC4 cannot be used as a hash, so they implemented an additional hash algorithm, which was to be executed after decryption. As there were only few bytes left, the hash algorithm had to be tiny - so the "Tiny Encryption Algorithm" ("TEA") was used. Every encryption algorithm can be changed to be used as a hash, and TEA seemed to be a good choice, as it is really small. While they were at it, they also changed the RC4 key in the secret ROM, so that hackers would not be able to decrypt 2bl and the kernel without dumping the new secret ROM.
=== The Hacker Perspective ===
The extraction of the secret ROM was done by members of the Xbox Linux Project this time, only days after they got their hands on the new 1.1 boxes, and only two weeks after they first appeared.
==== The A20 Hack ====
To date, Microsoft does not know how the Xbox Linux Project did it. But since there will most probably be no future revisions of the Xbox, as the Xbox 360 has already taken over, we can release this now.
Let us start with some PC history. The 8086/8088, the first CPU in the x86 line, was supposed to be as closely compatible to the 8080, which was very successful on the CP/M market. The memory model therefore was similar to the 8080, which could access only 64 KB, by dividing memory into 64 KB blocks. Intel decided that the 8086/8088 could have a maximum of 1 MB of RAM, which would have meant 16 "segments" of 64 KB each. But instead of doing it this way, they decided to let the 64 KB segments overlap, and have 65536 of these segments, starting every 16 bytes.
An address was therefore specified by a segment and an offset. The segment would be multiplied by 16, and the offset would be added, to result in the effective address. As an example, 0x0040:0x006C would be 0x40*0x10+0x6C=0x46C. An interesting side effect of this method is that it is possible to have addresses above 1 MB: The segment 0xFFFF starts at the effective address 0xFFFF0, so it should only contain 16 bytes instead of 64 KB. So the address 0xFFFF:0x0010 would be at 1 MB, and 0xFFFF:0xFFFF would be at 1 MB plus roughly 64 KB.
The 8086/8088 could not address more than 1 MB, because it only had 20 address lines, so addresses above 0xFFFF:0x000F were wrapped around to the lower 64 KB. But this behavior was different on the 286, which had 24 address lines: It was actually possible to access roughly 64 KB more using this trick, which was later abused by MS-DOS as "high memory".
Unfortunately there were some 8086/8088 application that broke, because they required the wraparound for some reason. It wasn't Intel who found that out, but IBM, when they designed the IBM AT, and it was too late to modify the behavior of the 286, so they fixed it themselves, by introducing the A20 Gate ("A20#"). An unused I/O pin in the keyboard controller was attached to the 20th address line, so that software could pull down address line 20 to 0, thus emulating the 8086/8088 behaviour.
This feature was later moved into the CPUs, and all Pentiums and Athlons have it - and so does the Xbox. If A20# is triggered, bit 20 of all addresses will be 0. So, for example, an address of 1 MB will be 0 MB, and if the CPU wants to access the top of RAM, it will actually access memory that is 1 MB lower than the top.
Keeping this in mind, the attack on the Xbox is pretty straightforward: If we connect the CPU's A20# pin to GND, the Xbox will not start from FFFFFFF0, but from FFEFFFF0 - this is not covered by the secret ROM, but is ordinary flash memory, because flash is mirrored over the upper 16 MB. So by only connecting a single pin, the secret ROM is completely bypassed.
What is cool about this, is that the secret ROM is still turned on. So we could easily dump the secret ROM trough one of the low speed busses (we used the I2C bus), by placing a small dump application into flash memory.
==== The TEA Hash ====
After reading Bruce Schneier's book on crypto, we learned that TEA was a really bad choice as a hash. The book says that TEA must never be used as a hash, because it is insecure if used this way. If you flip both bit 16 and 31 of a 32 bit word, the hash will be the same. We could easily patch a jump in the second bootloader so that it would not be recognized. This modified jump lead us directly into flash memory.
But why did they make this mistake? Obviously the designers knew nothing about crypto - again! - and just added code without understanding it and without even reading the most basic books on the topic. A possible explanation why they chose TEA would be that they might have searched the internet for a "tiny" encryption algorithm - and got TEA.
==== Visor Backdoor and MIST Hack ====
The Visor Backdoor was still present, so again, for the replacement Linux firmware, the Xbox Linux developers did not have to exploit the crypto code, but could simply use this backdoor. Microsoft obviously released the updated secret ROM much too quickly, just after bunnie dumped it and people saw that RC4 was no hash, but before the visor backdoor had been discovered.
The MIST hack had been discovered after the visor bug - but it no longer worked on the Xbox 1.1. Not because they fixed the comparison - they didn't -, but because they changed the address logic: If you accessed the upper 512 bytes of the address space, and the secret ROM was turned off, the Xbox would just crash, thus making all "fall down" hacks impossible. This way they closed both possible attacks, writing to an alias, and using 5 OUTB instructions.
Microsoft obviously discovered the turnoff vulnerability themselves, closing at least one backdoor, but keeping another one open, and not really closing a second one. It was too expensive to trash the 1.1 Southbridge chips again for yet another update, so Microsoft still uses these chips in today's Xboxes.
=== Today ===
In later revisions of the Xbox, Microsoft removed some pins of the LPC bus, making modchip design harder, but they could not remove the LPC bus altogether, because they needed it during the manufacturing process.
In the latest revision of the Xbox hardware (v1.6), they finally switched from flash memory to real ROM - and even integrated the ROM with the video encoder. The LPC bus is not needed for manufacturing any more, as the ROM chips are already preprogrammed. So now it is impossible to replace or to overwrite the kernel image, and because of the missing LPC bus, it also seems impossible to attach a ROM override.
But modchips are still possible. The obvious LPC pins are gone now, but the bus is still there. If you find the LPC pins on the board, you can attach a ROM override just as before, the modchips are only a bit harder to install. This is because the Southbridge still has the LPC override functionality, since they did not make a new revision of it - as so often, obviously for monetary reasons.
== Xbox Kernel Security ==
Let us have a look at the chain of trust again:
* The CPU starts execution of code stored in the secret ROM.
* The secret ROM decrypts and verifies the second bootloader.
* The second bootloader decrypts and verifies the Windows kernel.
* The Windows kernel checks the allowed media bits and the RSA signature of the game.
This last link is a complete software thing, so all the attacks have been pretty much standard. Some people tried to brute force the RSA key used for the game signature - no joke! But what is more likely, successfully brute forcing RSA 2048, or finding a bug in Microsoft's security code? After the experience with the first links of the chain of trust, the Xbox Linux Project focused on finding bugs in the software.
We found no bug in the RSA implementation. It is taken straight out of Windows 2000 and looks pretty good. But there are always implicit additional links in the chain of trust: All code reads data, and data can cause security risks if handled incorrectly.
=== Game Exploits ===
What data do games load? Graphics data, audio data, video data... - but we cannot alter them, because it is not easily possible to create authentic Xbox DVDs, and the Xbox won't boot originals from DVD-R etc.
But most games can load savegames, and these can easily be changed: The Xbox memory units are more or less standard USB storage devices ("USB sticks"), so it is possible to use most USB sticks with the Xbox, and just store hacked savegames on them.
Plenty of Xbox games had buffer vulnerabilities in their savegame handlers. It was often as easy as extending the length of strings like the name of the player, and the game would overwrite its stack with our data and eventually jump to the code we embedded in the savegame.
The procedure for the user was then to simply copy a hacked savegame from a USB stick onto the Xbox hard disk, run the game and load the savegame. But after a buffer exploit, we would normally only be in user mode - not on the Xbox, as all Xbox games run in kernel mode. The reason for this is probably a slight speed advantage, or, less likely, a simpler environment for the game, but Microsoft tried to make the environment as similar to the Windows/DirectX environment as possible, so user mode would have actually made the environment "simpler" for many Windows/DirectX developers.
Now that we have full control of the machine, we can overwrite the flash memory chip. It is write protected by default, but disabling the write protection is as easy as soldering a single bridge on the motherboard. After all, this bridge has to be closed temporarily during manufacturing when programming flash memory for the first time. Using this hack, it is possible, only with a USB stick, one of several games (007 Agent Under Fire, MechAssault, Splinter Cell, ...) and a soldering iron, to permanently modify the Xbox, just as if a modchip was installed. Because early Xboxes had a 1 MB flash chip, although only 256 KB had been used, it was even possible to install several ROM images in flash and attach a switch.
But the Xbox Linux Project did not blindly release this hack. The first savegame proof of concept exploit had been finished in January 2003. After that, a lot of energy was invested in finding out a way to free the Xbox for homebrew development and Linux, but not allowing game copies. Microsoft was contacted, but without any success. They just ignored the problem.
Finally in July, the hack was released, with heavy obfuscation, and lockout code for non-Linux use. It was obvious that this would only slow down the "hacking of the hack", so eventually, people would be able to use this vulnerability for copied games, but since Microsoft showed no interest in finding a solution, there was no other option than full disclosure. The suggestion of the Xbox Linux Project would have been to work together with Microsoft to silently close the security holes and, in return, work on a method to let homebrew and Linux run on the Xbox.
=== Dashboard Exploits ===
The problem with the savegame hack was that, if you didn't want to overwrite the flash memory chip, you had to insert the game and load the savegame every time you wanted to run unsigned code. But having full control of the machine using the savegame exploit also meant we could access the hard disk without opening the Xbox. This way, it became interesting to closely examine the hard disk contents for vulnerabilities.
The Dashboard is the main program on hard disk, executed every time the Xbox is started without a game in the DVD drive. The dashboard may even be the very reason the Xbox ships with a hard disk: While the settings menu and savegame management on the Nintendo GameCube fit well into 2 MB of ROM, the Xbox Dashboard, which is roughly comparable in its functionality, occupies more than 100 MB. So the original idea why to include a hard disk might have been initiated by the inability to compress the Dashboard into typical ROM sizes - and they might have decided to make the best out of it, and find additional uses for the hard disk.
The dashboard loads its data files, like audio and graphics, from hard disk. With the savegame exploit, we can now alter the hard disk contents, even without opening the Xbox. Of course the dashboard executable is signed and can therefore not be altered, and all data files are hashed, with the hashes stored inside the dashboard executable. Well, all files, except for two: the font files.
Consequently, there was an integer vulnerability in the font handling routines, so that we could run our own code by replacing the font files. Combined with the savegame exploit, it was as easy as transferring the savegame and loading it, which would run a script that modifies the fonts.
Now every time the Xbox is turned on, the Dashboard crashes because of the faulty fonts and runs our code embedded in these files. Our code reloads the Dashboard with the original fonts, hacks it, and runs it. Hacking the Dashboard meant two things: Modifying one menu entry to read "XBOX LINUX" instead of "XBOX LIVE" and running the Linux bootloader instead of the Xbox Live setup executable, and modifying the kernel to accept both applications signed with Microsoft's RSA key as well as those signed with our RSA key, from hard disk and from CD/DVD. We called this "MechInstaller", as it was based on the "MechAssault" savegame exploit.
Only accepting code either signed by the original key or by our key, keeping our key secret, and using heavy obfuscation again, meant that nobody could easily abuse this solution for copied games.
This hack shows several things: Hackers have phantasy, the combination of flaws can lead to fully compromising the security system, powerful privileged code should be bug-free and security code should really catch ''all'' cases.
Oh, and there is another vulnerability, an integer vulnerability in the audio player code. The attack was developed independently of the font attack, but was inferior because it would have required the user to enter the audio player every time to run Linux.
==== Microsoft's Fixes ====
The history of Microsoft's reactions to the font vulnerability is the perfect lesson of how to do it wrong.
# After MechInstaller had been released, Microsoft fixed the buffer vulnerability in the Dashboard and distributed this new version over the Xbox Live network and shipped it with new Xboxes.
# For the hackers, this was no major problem: It was possible to downgrade the Dashboard of a new Xbox to the vulnerable version. Just run Linux using a savegame exploit, and "dd" the old image. Some people felt downgrading on new Xboxes was not piracy, because after all, Microsoft upgraded Xbox Live users' hard disks to the new version without asking.
# As the next step, Microsoft blacklisted the old Dashboard in the new kernel. It was impossible to just "dd" an old Dashboard image onto newer Xboxes.
# Still no major problem for hackers: The second executable on the hard disk, "xonlinedash", which is used for Xbox Live configuration, had the same bug, so it was possible to copy the old "xonlinedash" and to rename it to "xboxdash" to make it crash because of the faulty fonts.
# Microsoft consequently blacklisted the vulnerable version of "xonlinedash".
# Again, no major problem for hackers: All Xbox Live games come with the "dashupdate" application, which adds Xbox Live functionality to the Dashboard for the first Xboxes which came without it. This update application has the same font bug, and it can be run from hard disk. So it is possible to copy the file from any Xbox Live game DVD, rename it to "xboxdash" and let it crash.
# Microsoft could not blacklist this one. Xbox Live enabled games run the update application every time they start, making sure the Xbox has the Xbox Live functionality. Blacklisting "dashupdate" would break these games.
We won.
== The Mistakes that Have Been Made ==
Microsoft obviously made a lot of mistakes. But it would be too easy to just attribute all these to stupid engineers. There have been good (and different) reasons for most of these mistakes, and one can learn a lot from them.
There are 17 kinds of mistakes they made, several of which have been made more than once. I will group the 17 mistake types into three categories: Design mistakes, implementation mistakes and bad policy decisions.
=== Design ===
==== #1: Security vs. Money ====
Be very careful with tradeoffs between security and money. There are rarely sensible compromises. Keep in mind that the very reason for the security system is to make more money, or to prevent money losses. Security systems cannot be "a little better" or "a little worse". Either they are effective - or they are not. By saving money on the security system, you may easily make it not effective at all, not only wasting the money spent on the security system, but also making losses because it is not effective.
Microsoft made many compromises.
* In-system programming of flash memory is cheaper than preprogramming, but an attacker can also override the firmware with an LPC ROM.
* Buying all of Samsung's RAM chips is cheaper than only buying those within the specs, but it made RAM initialization more complex, using up space that could otherwise be used for better security code.
* They chose to put the secret ROM into the Southbridge instead of the CPU, because the Southbridge was a custom component anyway and having a custom CPU would have been a lot more expensive, but keys travel over a visible bus if the secret ROM is outside the CPU.
* They saved money choosing not to update the Southbridge a second time, which would have fixed the TEA hash and removed the visor backdoor. This would have made modchips virtually impossible.
==== #2: Security vs. Speed ====
Don't trade security for speed. Although it may be true that the product in question must be as fast as possible in order to be able to compete with similar products on the market, remember that in IT, computers aren't slower or faster by some percentage - but by factors! Besides, you might lose more money because of a security system that does not work than because of a product that is 10 percent slower than it could be.
Most probably for added speed (one address space, no TLB misses), Microsoft chose to run all code in kernel mode, even games that interacted with untrusted data that came from the outside. This made it possible to have complete control of the machine once a game crashed because of a prepared savegame, including complete control of the hard disk and the possibility of booting another operating system.
==== #3: Combinations of Weaknesses ====
Be aware of the fact that a combination of security flaws can lead to a successful attack. Don't think that a possible security hole (or "only" a security risk) cannot be exploited because there are so many barriers in front of it. Attackers might break all the other barriers that block the vulnerability, and fixing that one hole would have stopped them.
MechInstaller is a great example for that. It was only possible because of the combination of several security weaknesses:
* The boot process was vulnerable, so we could use a modified kernel to analyze games.
* Some games are not careful enough with savegames, so that we can run our own code.
* Games run in kernel mode, so we have full control of the hardware.
* The Dashboard does not verify the integrity of the font files.
* The Dashboard has a vulnerability in the font code.
If any of these weaknesses had not been there, then MechInstaller would not have been possible. Also note that hackers have enough fantasy to find out these combinations.
==== #4: Hackers' Resources ====
Understand that hackers may have excellent resources. Hobbyists may use resources from work or from university, and professional attackers can also be very well-equipped. It is a big mistake to underestimate them. So never think you are safe because it would be too much work or too expensive to exploit a weakness. If it is a weakness, it will eventually be exploited. Also understand that hackers may have excellent human resources. Not only in number, but also in qualifications.
Microsoft put the secret ROM into the Southbridge instead of the CPU, which meant that the secret key would travel over a visible bus. This is the very fast HyperTransport bus, which, at that time, could not be sniffed using logic analyzers any mortal could afford. But with help of the resources of the MIT and using all of his expertise, bunnie could build his own hardware that could sniff the bus.
==== #5: Barriers and Obstacles ====
Don't make anything "harder for hackers". Instead make it "impossible for hackers", or, if it cannot be made impossible, don't care about it. Because of the potential great number and excellent qualifications of hackers, no obstacle will have any effect or slow down hacking significantly. But instead, in security design, you might make mistake #3, because you think you are safe as there are so many obstacles in the hackers' way. Use the resources you would invest into building obstacles into building or strengthening barriers instead - possibly at a different location.
Microsoft built obstacles into the system at many different locations.
* Savegames will only be accepted if they are signed, but the private key is of course stored inside the game, so this is no barrier. Instead, they should have made sure the games contain no buffer vulnerabilities in their savegame handlers.
* The hard disk is secured with an ATA password, different for every Xbox and stored on an EEPROM inside the Xbox, but an attacker can just "hotswap" an unlocked hard disk from a running Xbox to a running PC. Instead, they should have put that energy into verifying whether the Dashboard really hashes all data it reads from the hard disk.
* The 512 bytes of security startup code were embedded in a custom chip to make it hard to sniff. Instead, they should have made sure that there are no bugs in that security code.
==== #6: Hacker Groups ====
Don't use one security system for different purposes, or else attackers with very different goals will jointly attack it, being a lot more effective. Instead, try to find out who your enemies really are and what they want, and design your security system so that every group gets as much of what they want so that it does not hurt you.
There were three possible goals for Xbox hackers: Run Linux and use it as a computer, run homebrew software like media players and emulators, and run copies. Although there were some overlaps between Linux and homebrew people, as well as between homebrew people and people interested in copies, these were essentially three very different groups. Because they were all locked out by the same protection, they worked together, either explicitly, or implicitly, by using the results of each other. No Linux hackers ever attacked the Playstation. When you are fair, people don't fight you.
==== #7: Security by Obscurity ====
Security by obscurity does not work. Well-proven algorithms like SHA-1 and RSA work (of course given your implementation is well-proven as well).
Microsoft hid the secret ROM, the Windows kernel, the game DVD contents (no way to read them on a standard DVD drive) and the hard disk contents using different methods. None had any effect. Also see #5.
==== #8: Fixes ====
When your security system has been broken, don't release quick fixes, for two reasons: Your fixes may be flawed and may not actually correct the problem, and even worse holes may be found not much later, which you must fix again - and ship yet another version. Instead, every time a security vulnerability is found, audit your complete security system and search for similar bugs, as well as other bugs in the same part of the system, based on the knowledge you gained from the successful hack.
Microsoft failed to correct the hash problem in the second version of the secret ROM, and didn't fix the visor vulnerability, which was found just weeks later. After trashing thousands of already manufactured v1.0 Southbridge chips, which was very expensive, they decided not to update the Southbridge a second time. Another example is the dashboard odyssey: Instead of blacklisting the vulnerable executables at a time, they released three updates, none of which was effective.
=== Implementation ===
==== #9: Data Sheets ====
Know everything about the components you use. Do read data sheets. Be very careful with components that have legacy functionality.
Microsoft did not notice the A20# legacy functionality as a security risk. It seems that they did not completely analyze the functionality of the Pentium III Celeron, or else they should have noticed. They also apparently did not read the Pentium programmers' manual, or else they would have noticed that Intel CPUs do not panic on a FFFFFFFF/00000000 wraparound.
==== #10: Literature ====
Read (at least!) standard literature. If you are dealing with cryptography, this means you have to read at last Schneier's "Applied Cryptography".
Microsoft's engineers did not know that TEA must not be used as a hash, and that RC4 does not feed the decrypted stream back into the key stream.
==== #11: Pros ====
Get experienced professionals to work on your security system, both on the design and the implementation. If it's a money issue, see #1.
Looking at mistakes #9 and #10, it seems very probable that at least some of Microsoft's engineers had no prior experience with cryptography or the design of a security system. We also know that people on an internship were working on Xbox security.
==== #12: Completeness ====
Check whether your security code catches all cases. If it does not, you did not only waste time implementing all of it, but you may also give hints to hackers: If there are many checks at one point of the code, it looks a lot like code that is relevant for security and an attacker can check whether all cases are caught.
Microsoft made this mistake twice: The xcode interpreter tests for the secret ROM turnoff code, and doesn't catch all cases. And the Dashboard hashes all files it is going to read, except for two. This gave us the ideas where to attack.
==== #13: Leftovers ====
Look at the final product from the perspective of a hacker. Hexdump and disassemble your final builds. There could be leftovers!
The Xbox flash memory image contained an old version of the secret ROM, giving us not only hints about the contents of the actual secret ROM, but also an insight into what Microsoft planned and why some mistakes have been made.
==== #14: Final Test ====
Test your security system when you have the final parts and with the final software components in place. Changing something may very well open holes somewhere else. When you change something, rethink the complete system, and check all assumptions that you made.
The visor hack was only possible because Microsoft failed to adapt their security system, designed for the AMD CPU, to the Intel CPU. The "hash" in the secret ROM had no effect because they changed RC5 to RC4 without thinking about the implications.
=== Policies ===
==== #15: Source ====
Keep your source safe. Find engineers you can trust.
The complete Xbox source code has leaked, including the kernel and libraries source. Groups interested in copies could easily modify it to support running games from hard disk, support for hard disks bigger than 137 GB, custom boot logos etc. This had been previously done by patching the binary.
==== #16: Many People ====
Have many good people have a look at both your design and your implementation. Keeping your source code safe means having engineers you can trust, and not letting none of your engineers see the source code. As stated at #7, your system should not rely on the source code being safe. Unless you did #7 completely wrong, a bug in the security system is typically a lot worse than a leak of the source code.
It seems a lot like very few people have actually seen the Xbox security code.
==== #17: Talk ====
Know your enemy - and talk to them. They are not terrorists that you are not supposed to negotiate with. Their intent is not to harm you but to reach their goals. Working on their goals on their own might harm you indirectly, because the hackers may not care about the same things as you do. Seek the contact to hackers, know what they are doing and have them inform you about a vulnerability before publishing it. Make them know your position and why they should respect it, but also respect their position. Offer them to loosen the security system for what they want in exchange for the non-disclosure of their findings.
Microsoft refused to talk about the savegame and font vulnerabilities. If we had been bad hackers, we could have released both of them as-is, immediately making it possible to run copies on Xboxes without the use of a modchip. Instead, we sought contact to Microsoft: We would have preferred to see a backdoor for Linux in the Xbox security system, instead of a solution based on our findings that would allow running copies. But as they refused to talk, we were forced to release the exploits, and they were lucky we heavily obfuscated our solutions so in order to slow down people interested in using it for copies.
== Conclusion ==
The security system of the Xbox has been a complete failure.
3959fd9abd9ca7e8c01e93c61ee92bfc4404bebd
File:XGPU.JPG
6
4001
6891
2020-11-21T05:48:07Z
Redherring32
2513
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:XGPU-S.JPG
6
4002
6892
2020-11-21T05:50:59Z
Redherring32
2513
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:XGPU-B.JPG
6
4003
6893
2020-11-21T05:53:34Z
Redherring32
2513
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
NV2A
0
3675
6894
6751
2020-11-21T06:15:52Z
Redherring32
2513
Added details and images regarding XGPU revisions
wikitext
text/x-wiki
The NV2A is the northbridge of the chipset, as well as the GPU.
[[File:XGPU.JPG|thumb|200px|XGPU (1.0)]]
[[File:XGPU-S.JPG|thumb|200px|XGPU S (1.1-1.4)]]
[[File:XGPU-B.JPG|thumb|200px|XGPU-B (1.6)]]
== GPU ==
The GPU is part of the NV20 family (Kelvin)[https://nouveau.freedesktop.org/wiki/CodeNames/]:
{| class="wikitable"
! Code name !! Official Name
|-
|NV20 || GeForce3 (Ti)<br>Quadro DCC
|-
|NV25 || GeForce4 Ti 4200, Ti 4400, Ti 4600<br>Quadro4 700 XGL, 750 XGL, 900 XGL
|-
|NV28 || GeForce4 Ti 4200-8X, Ti 4800 (SE), 4200 Go<br>Quadro4 780 XGL, 980 XGL
|-
|NV2A || Xbox GPU
|}
== Known Revisions==
There are 3 known revisions of the Xbox GPU (XGPU), and they are as follows.
XGPU - Found on boards of revision 1.0<br>XGPU S - Found on boards of revision 1.1-1.4<br>XGPU-B - Found on boards of revision 1.6
There is very little known about the difference between the revisions, or why there had to be consecutive revisions.<br>It is unknown if they are pin compatible with each other.
== Notes ==
* [https://web.archive.org/web/20031004105935/http://developer.nvidia.com:80/object/nv30_emulation.html NV30 information and emulator]
* [https://developer.download.nvidia.com/opengl/specs/nv30specs.pdf List of implemented GL extensions for NV10-NV30: "NVIDIA OpenGL Extension Specifications for the CineFX Architecture (NV3x)", 13 Nov. 2006]
[[Category:NV2A]]
e024ab76e7d31250cc035f335ff4fc6ef646cda6
Main Page
0
1
6896
6847
2021-01-28T13:02:06Z
Dracc
2502
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
4064eeae7d0dabc5d4dfe4ffbd5d899d1ce49be4
Xbox Input Devices
0
11
6899
6898
2021-03-03T16:18:26Z
RadWolfie
2528
fix format and add youtube reviewer link
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
**: '''List of known devices in existence<nowiki>:</nowiki>'''
*** Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan
*** Street Fighter 15th Anniversary Edition Arcade Stick
*** Gamester Xbox Arcade Stick
*** Nuby Xbox Fighter Arcade Stick
*** Nuby Xbox Arcade Super Stick
***: Item#<nowiki>:</nowiki>36020
*** Naki Ultimate Fighting Stick
***: [https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
2b3df0fc9834c0e7e4d8393ed18a2e86f55739e4
6900
6899
2021-03-03T16:31:21Z
RadWolfie
2528
add Arcade Stick section to document device existence
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
**: '''List of known devices in existence<nowiki>:</nowiki>'''
*** Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan
*** Street Fighter 15th Anniversary Edition Arcade Stick
*** Gamester Xbox Arcade Stick
*** Nuby Xbox Fighter Arcade Stick
*** Nuby Xbox Arcade Super Stick
***: Item#<nowiki>:</nowiki>36020
*** Naki Ultimate Fighting Stick
***: [https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
f41a3b459a48af7ea60a26d4dc6dcdc047b98aa5
6901
6900
2021-03-03T16:33:19Z
RadWolfie
2528
remove list from bSubtype since already moved into its own section
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
025ff9e81852cfa10d48b9dd4c45cba356016d25
6903
6901
2021-03-15T06:30:22Z
Ryzee119
2519
Add IR dongle XID descriptor
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
ac872a4d78244c4b5b10cbe56bb7e723d7e00947
6904
6903
2021-03-15T06:32:41Z
Ryzee119
2519
Add Xbox DVD Movie Playback IR dongle XID summary
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:3
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
4ef79ff5e136bcbd816467e75b2773952948d1a1
6905
6904
2021-03-15T06:33:30Z
Ryzee119
2519
/* bType = 128: Steel Battalion */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:3
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
====== Example XID reports ======
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
6dfc5745c0bc9cbb4a2421a280e28ba725d9bece
6906
6905
2021-03-15T06:34:35Z
Ryzee119
2519
/* Example XID reports */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:3
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
010915291aecc34067984c06705bab671c99761c
6907
6906
2021-03-15T06:34:58Z
Ryzee119
2519
/* bType = 128: Steel Battalion */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:3
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
====== Example XID reports ======
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
08d5979e73276ce3a072b404fd6dc95c7b1b6712
6908
6907
2021-03-15T06:35:29Z
Ryzee119
2519
/* bType = 3: Xbox DVD Movie Playback IR Dongle */
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
====== Example XID reports ======
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
bca981ffd9485174e2984c83c47363c714aa5a1b
6909
6908
2021-03-15T21:35:44Z
DiscoStarslayer
2509
Add microphone descriptors
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
====== Example XID reports ======
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Microphones ==
=== Xbox Communicator ===
==== USB Descriptor ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x002d
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
</pre>
=== Xbox Karaoke ===
==== USB Descriptor ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0501
bcdDevice 1.00
iManufacturer 1 Licensed 3PP Vendor
iProduct 2 Karaoke Microphone Module
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x001b
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 121
bInterfaceSubClass 1
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0060 1x 96 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
05d6e368b26124e796dfa6521cdb795cc2bf39fb
6943
6909
2021-05-18T09:55:58Z
Ryzee119
2519
bMaxOutputReportSize in xremote xid desc added
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
====== Example XID reports ======
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
bMaxOutputReportSize 0x00 (0 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Microphones ==
=== Xbox Communicator ===
==== USB Descriptor ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x002d
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
</pre>
=== Xbox Karaoke ===
==== USB Descriptor ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0501
bcdDevice 1.00
iManufacturer 1 Licensed 3PP Vendor
iProduct 2 Karaoke Microphone Module
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x001b
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 121
bInterfaceSubClass 1
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0060 1x 96 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
974396f3a57d3eee8471ef6d48aefb49ef1a550f
Xbox DVD Movie Playback Kit
0
3768
6902
6806
2021-03-13T03:40:27Z
Ryzee119
2519
Add IR remote info
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they didn't have to pay the [[wikipedia:DVD Forum|DVD Forum]] (and apparently also Dolby) for every Xbox sold, but just for every DVD Remote kit sold[https://www.youtube.com/watch?v=gquAV8f7OAY&t=2059]. This allowed them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used (Always 0x0A with offical Microsoft remote)
// Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).
// A value close to 0x0040 is returned for continously holding a button.
// When holding, the value often goes back and forth between 0x0040 / 0x0041.
// It is unknown if the receiver / remote intentionally does this.
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
When holding two or more buttons at once on the remote the IR receiver stops sending interrupt transfers. The last transfer will be the first button pressed.
The keycodes read from an official Microsoft IR remote are as follows:
{| class="wikitable"
!Button
!data_low
!data_high
|-
|INFO
|0xC3
|0x0A
|-
|9
|0xC6
|0x0A
|-
|8
|0xC7
|0x0A
|-
|7
|0xC8
|0x0A
|-
|6
|0xC9
|0x0A
|-
|5
|0xCA
|0x0A
|-
|4
|0xCB
|0x0A
|-
|3
|0xCC
|0x0A
|-
|2
|0xCD
|0x0A
|-
|1
|0xCE
|0x0A
|-
|0
|0xCF
|0x0A
|-
|SELECT
|0x0B
|0x0A
|-
|UP
|0xA6
|0x0A
|-
|DOWN
|0xA7
|0x0A
|-
|RIGHT
|0xA8
|0x0A
|-
|LEFT
|0xA9
|0x0A
|-
|STOP
|0xE0
|0x0A
|-
|REVERSE
|0xE2
|0x0A
|-
|FORWARD
|0xE3
|0x0A
|-
|TITLE
|0xE5
|0x0A
|-
|PAUSE
|0xE6
|0x0A
|-
|PLAY
|0xEA
|0x0A
|-
|POWER
|0xD5
|0x0A
|-
|BACK
|0xD8
|0x0A
|-
|SKIP-
|0xDD
|0x0A
|-
|SKIP+
|0xDF
|0x0A
|-
|MENU
|0xF7
|0x0A
|-
|}
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit {{FIXME|reason=Document the protocol here}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
5dc36b1556ec46325ba7509f4707d9f19cd8735d
6945
6902
2021-05-20T07:28:41Z
Ryzee119
2519
Added USB descriptor
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they didn't have to pay the [[wikipedia:DVD Forum|DVD Forum]] (and apparently also Dolby) for every Xbox sold, but just for every DVD Remote kit sold[https://www.youtube.com/watch?v=gquAV8f7OAY&t=2059]. This allowed them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|}
=== USB Protocol ===
==== USB Descriptor ====
<pre>
Bus 001 Device 002: ID 045e:0284 Microsoft Corp. Xbox DVD Playback Kit
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0284 Xbox DVD Playback Kit
bcdDevice 0.0a
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0022
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x00
(Missing must-be-set bit!)
(Bus Powered)
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 16
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 89
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
</pre>
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used (Always 0x0A with offical Microsoft remote)
// Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).
// A value close to 0x0040 is returned for continously holding a button.
// When holding, the value often goes back and forth between 0x0040 / 0x0041.
// It is unknown if the receiver / remote intentionally does this.
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
When holding two or more buttons at once on the remote the IR receiver stops sending interrupt transfers. The last transfer will be the first button pressed.
The keycodes read from an official Microsoft IR remote are as follows:
{| class="wikitable"
!Button
!data_low
!data_high
|-
|INFO
|0xC3
|0x0A
|-
|9
|0xC6
|0x0A
|-
|8
|0xC7
|0x0A
|-
|7
|0xC8
|0x0A
|-
|6
|0xC9
|0x0A
|-
|5
|0xCA
|0x0A
|-
|4
|0xCB
|0x0A
|-
|3
|0xCC
|0x0A
|-
|2
|0xCD
|0x0A
|-
|1
|0xCE
|0x0A
|-
|0
|0xCF
|0x0A
|-
|SELECT
|0x0B
|0x0A
|-
|UP
|0xA6
|0x0A
|-
|DOWN
|0xA7
|0x0A
|-
|RIGHT
|0xA8
|0x0A
|-
|LEFT
|0xA9
|0x0A
|-
|STOP
|0xE0
|0x0A
|-
|REVERSE
|0xE2
|0x0A
|-
|FORWARD
|0xE3
|0x0A
|-
|TITLE
|0xE5
|0x0A
|-
|PAUSE
|0xE6
|0x0A
|-
|PLAY
|0xEA
|0x0A
|-
|POWER
|0xD5
|0x0A
|-
|BACK
|0xD8
|0x0A
|-
|SKIP-
|0xDD
|0x0A
|-
|SKIP+
|0xDF
|0x0A
|-
|MENU
|0xF7
|0x0A
|-
|}
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit {{FIXME|reason=Document the protocol here}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
c694382b515434db7f7a692fd7714642afba090f
6946
6945
2021-05-20T09:27:51Z
Ryzee119
2519
Add some DVD dongle SHAs (Found in Australia)
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they didn't have to pay the [[wikipedia:DVD Forum|DVD Forum]] (and apparently also Dolby) for every Xbox sold, but just for every DVD Remote kit sold[https://www.youtube.com/watch?v=gquAV8f7OAY&t=2059]. This allowed them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|-
| X08-25597 || Indonesia || 1.1 || 4 || 229790 Bytes || <code>1E6D7F4F526B56527447AA09EDA41FFF05665A16</code> ||
|-
| X08-96288-002 || Indonesia || 1.1 || 3 || 229790 Bytes || <code>0447373BF9326DFF95808CD028ED19FACD54C759</code> ||
|}
=== USB Protocol ===
==== USB Descriptor ====
<pre>
Bus 001 Device 002: ID 045e:0284 Microsoft Corp. Xbox DVD Playback Kit
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0284 Xbox DVD Playback Kit
bcdDevice 0.0a
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0022
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x00
(Missing must-be-set bit!)
(Bus Powered)
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 16
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 89
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
</pre>
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used (Always 0x0A with offical Microsoft remote)
// Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).
// A value close to 0x0040 is returned for continously holding a button.
// When holding, the value often goes back and forth between 0x0040 / 0x0041.
// It is unknown if the receiver / remote intentionally does this.
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
When holding two or more buttons at once on the remote the IR receiver stops sending interrupt transfers. The last transfer will be the first button pressed.
The keycodes read from an official Microsoft IR remote are as follows:
{| class="wikitable"
!Button
!data_low
!data_high
|-
|INFO
|0xC3
|0x0A
|-
|9
|0xC6
|0x0A
|-
|8
|0xC7
|0x0A
|-
|7
|0xC8
|0x0A
|-
|6
|0xC9
|0x0A
|-
|5
|0xCA
|0x0A
|-
|4
|0xCB
|0x0A
|-
|3
|0xCC
|0x0A
|-
|2
|0xCD
|0x0A
|-
|1
|0xCE
|0x0A
|-
|0
|0xCF
|0x0A
|-
|SELECT
|0x0B
|0x0A
|-
|UP
|0xA6
|0x0A
|-
|DOWN
|0xA7
|0x0A
|-
|RIGHT
|0xA8
|0x0A
|-
|LEFT
|0xA9
|0x0A
|-
|STOP
|0xE0
|0x0A
|-
|REVERSE
|0xE2
|0x0A
|-
|FORWARD
|0xE3
|0x0A
|-
|TITLE
|0xE5
|0x0A
|-
|PAUSE
|0xE6
|0x0A
|-
|PLAY
|0xEA
|0x0A
|-
|POWER
|0xD5
|0x0A
|-
|BACK
|0xD8
|0x0A
|-
|SKIP-
|0xDD
|0x0A
|-
|SKIP+
|0xDF
|0x0A
|-
|MENU
|0xF7
|0x0A
|-
|}
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit {{FIXME|reason=Document the protocol here}}
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
d5a6caac605b7c957d97bcaab37297a2cdb85de3
SMBus
0
3766
6910
6351
2021-03-19T07:59:32Z
Ryzee119
2519
Added Focus and Xcalibur SMBus addresses
wikitext
text/x-wiki
Retreived from http://www.xbox-linux.org/wiki/SMBus_Controller
by ''Michael Steil'' (original version: 15/26 June 2002)
All non-PC components of the Xbox console are connected through an I²C/SMbus interface. I²C/SMBus is a slow low-cost serial bus with each device having a unique 7-bit ID. (Wikipedia has informative articles about [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/I2c I²C] and [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/SMBus SMBus], you might want to check them out.)
There are only two operations of an SMBus controller: write and read. Writing means that an 8 bit command code and an 8 or 16 bit operand are sent to an SMBus device. Reading means that an 8 bit command code is sent to the device and an 8 or 16 bit answer is expected.
The controller for the SMBus interface in the Xbox is a PCI device with the DevID 01B4 and it is built into MPCX southbridge. It supports bus arbitration and the Xbox kernel will retry transactions if a collision occurs. This means it is safe to use a second SMBus master (like a USB-SMBus adapter) while the Xbox is running ''as long as the second master also supports arbitration''. Adapters based on the Silicon Labs CP2112 or Microchip MCP2221 chips will work, for example.
==SMBus Controller Port Layout==
{| class="wikitable"
|-
! Port !! Description
|-
| 0xC000
| '''Status'''
* bit 0: abort
* bit 1: collision
* bit 2: protocol error
* bit 3: busy
* bit 4: cycle complete
* bit 5: timeout
|-
| 0xC002
| '''Control'''
* bit 2-0: cycle type
* bit 3: start
* bit 4: enable interrupt
* bit 5: abort
|-
| 0xC004
| '''Address'''
|-
| 0xC006
| '''Data'''
|-
| 0xC008
| '''Command'''
|}
This is very similar (but not identical) to the AMD756/AMD766/AMD768 SMBus controllers. The [https://web.archive.org/web/20100617015507/http://www.lm-sensors.nu/ lm_sensors project] includes GPLed Linux kernel code for it since version 2.6.4 (kernel/busses/i2c-amd756.c).
==SMBus Controller Programming==
The following two routines illustrate how to read and write data from and to an SMBus device:
<pre> int SMBusWriteCommand(unsigned char slave, unsigned char command, int isWord, unsigned short data) {
again:
_outp(0xc004, (slave<<1)&0xfe);
_outp(0xc008, command);
_outpw(0xc006, data);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
return 1;
}
</pre>
<pre> int SMBusReadCommand(unsigned char slave, unsigned char command, int isWord, unsigned short *data) {
again:
_outp(0xc004, (slave<<1)|0x01);
_outp(0xc008, command);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
*data = _inpw(0xc006);
return 1;
}
</pre>
<br />
To avoid busy waiting of the CPU, the SMBus controller can also issue an interrupt when the operation is complete, by setting bit #4 in the control port when initiating the transfer.
==Xbox SMBus Devices==
The following four devices are connected to the Xbox SMBus:
{| class="wikitable"
|-
| '''Device'''
| '''Hardware Address'''
| '''Software Address'''
|-
| PIC16LC
| 0x10
| 0x20
|-
| ADM1032 System Temperature Monitor (Not on v1.6 Xboxes)
| 0x4c
| 0x98
|-
| Serial EEPROM
| 0x54
| 0xa8
|-
| Conexant CX25871 Video Encoder (Not on all Xbox revisions)
| 0x45
| 0x8a
|-
| Focus FS454 Video Encoder (v1.4/1.5 Xboxes only)
| 0x68
| 0xD4
|-
| Microsoft Xcalibur Video Encoder (v1.6 Xboxes only)
| 0x70
| 0xE0
|}
Do not confuse the hardware with the software addresses: The software ID is the hardware ID shifted by one bit left. The code above expects the hardware ID.
Actually, these addresses are not literally accurate; you find that the hardware address is 0x54 for the EEPROM: the actual address of the EEPROM on the i2c bus is 1010 (0xa), however, you will also notice that 0x54 is '''1010'''100 in binary, and it seems that this 100 is also appended onto the other devices as well (although their software address is naturally read as say '''1010'''1000 - obviously because of the left shifting, however, it could be speculated that it would be possible to communicate with devices over the SMBus that are connected via i2c, so long as you knew their base address.
e7f35cfda52427bdad14adefed1c262faf3ea2ed
6911
6910
2021-03-19T08:00:45Z
Ryzee119
2519
Add Focus and Xcalibur SMBus addresses
wikitext
text/x-wiki
Retreived from http://www.xbox-linux.org/wiki/SMBus_Controller
by ''Michael Steil'' (original version: 15/26 June 2002)
All non-PC components of the Xbox console are connected through an I²C/SMbus interface. I²C/SMBus is a slow low-cost serial bus with each device having a unique 7-bit ID. (Wikipedia has informative articles about [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/I2c I²C] and [https://web.archive.org/web/20100617015507/http://en.wikipedia.org/wiki/SMBus SMBus], you might want to check them out.)
There are only two operations of an SMBus controller: write and read. Writing means that an 8 bit command code and an 8 or 16 bit operand are sent to an SMBus device. Reading means that an 8 bit command code is sent to the device and an 8 or 16 bit answer is expected.
The controller for the SMBus interface in the Xbox is a PCI device with the DevID 01B4 and it is built into MPCX southbridge. It supports bus arbitration and the Xbox kernel will retry transactions if a collision occurs. This means it is safe to use a second SMBus master (like a USB-SMBus adapter) while the Xbox is running ''as long as the second master also supports arbitration''. Adapters based on the Silicon Labs CP2112 or Microchip MCP2221 chips will work, for example.
==SMBus Controller Port Layout==
{| class="wikitable"
|-
! Port !! Description
|-
| 0xC000
| '''Status'''
* bit 0: abort
* bit 1: collision
* bit 2: protocol error
* bit 3: busy
* bit 4: cycle complete
* bit 5: timeout
|-
| 0xC002
| '''Control'''
* bit 2-0: cycle type
* bit 3: start
* bit 4: enable interrupt
* bit 5: abort
|-
| 0xC004
| '''Address'''
|-
| 0xC006
| '''Data'''
|-
| 0xC008
| '''Command'''
|}
This is very similar (but not identical) to the AMD756/AMD766/AMD768 SMBus controllers. The [https://web.archive.org/web/20100617015507/http://www.lm-sensors.nu/ lm_sensors project] includes GPLed Linux kernel code for it since version 2.6.4 (kernel/busses/i2c-amd756.c).
==SMBus Controller Programming==
The following two routines illustrate how to read and write data from and to an SMBus device:
<pre> int SMBusWriteCommand(unsigned char slave, unsigned char command, int isWord, unsigned short data) {
again:
_outp(0xc004, (slave<<1)&0xfe);
_outp(0xc008, command);
_outpw(0xc006, data);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
return 1;
}
</pre>
<pre> int SMBusReadCommand(unsigned char slave, unsigned char command, int isWord, unsigned short *data) {
again:
_outp(0xc004, (slave<<1)|0x01);
_outp(0xc008, command);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (isWord) ? 0x0b : 0x0a);
while ((_inp(0xc000) & 8)); /* wait while busy */
if (_inp(0xc000) & 0x02) goto again; /* retry transmission */
if (_inp(0xc000) & 0x34) return 0; /* fatal error */
*data = _inpw(0xc006);
return 1;
}
</pre>
<br />
To avoid busy waiting of the CPU, the SMBus controller can also issue an interrupt when the operation is complete, by setting bit #4 in the control port when initiating the transfer.
==Xbox SMBus Devices==
The following four devices are connected to the Xbox SMBus:
{| class="wikitable"
|-
| '''Device'''
| '''Hardware Address'''
| '''Software Address'''
|-
| PIC16LC
| 0x10
| 0x20
|-
| ADM1032 System Temperature Monitor (Not on v1.6 Xboxes)
| 0x4c
| 0x98
|-
| Serial EEPROM
| 0x54
| 0xa8
|-
| Conexant CX25871 Video Encoder (Not on all Xbox revisions)
| 0x45
| 0x8a
|-
| Focus FS454 Video Encoder (v1.4/1.5 Xboxes only)
| 0x6A
| 0xD4
|-
| Microsoft Xcalibur Video Encoder (v1.6 Xboxes only)
| 0x70
| 0xE0
|}
Do not confuse the hardware with the software addresses: The software ID is the hardware ID shifted by one bit left. The code above expects the hardware ID.
Actually, these addresses are not literally accurate; you find that the hardware address is 0x54 for the EEPROM: the actual address of the EEPROM on the i2c bus is 1010 (0xa), however, you will also notice that 0x54 is '''1010'''100 in binary, and it seems that this 100 is also appended onto the other devices as well (although their software address is naturally read as say '''1010'''1000 - obviously because of the left shifting, however, it could be speculated that it would be possible to communicate with devices over the SMBus that are connected via i2c, so long as you knew their base address.
f221255046e04fd61309b8ac190d50bfddb65dda
Xbox Live/Connection Test
0
4004
6912
2021-03-20T14:01:31Z
Billy549
2520
Add Connection Test page
wikitext
text/x-wiki
The network settings screen on the Xbox Dashboard will perform a connection test to Xbox Live when a user edits settings, to ensure that it can still connect to the Internet.
If the user has not connected to Xbox Live before, this will be where the Xbox first connects to create a Machine Account via MACS (Machine Account Creation Service). Then, it will use this account to authenticate the machine and perform a ping test as well as a speed test on dashes before 5960(? double check if this was the first dash to change behaviour).
=== Extra Info ===
Pressing Y once the connection test has finished will show some extra info, and on 5960 dash and later will also perform an MTU test(? plaintext in the packet says MTU test) using the domain XXXXX.XBOXLIVE.COM (which the 360 also uses)
=== Packet Log ===
Pressing the Black button on the controller once the connection test has finished will save a packet log to the hard drive as a save [FIXME: add more info] - [https://github.com/insignia-live/xbcap2pcap xbcap2pcap] can convert this DAT file into a standard PCAP.
The DAT's structure is as follows:
<pre>
uint32_t total packet length
uint32_t timestamp in ms
total packet length - 8 bytes of Ethernet packet data
</pre>
6c151cc78f53d8e074a9502361e096e6f5385d67
6920
6912
2021-03-25T22:00:57Z
Billy549
2520
Add information about the second page from XBL's old page
wikitext
text/x-wiki
The network settings screen on the Xbox Dashboard will perform a connection test to Xbox Live when a user edits settings, to ensure that it can still connect to the Internet.
If the user has not connected to Xbox Live before, this will be where the Xbox first connects to create a Machine Account via MACS (Machine Account Creation Service). Then, it will use this account to authenticate the machine and perform a ping test as well as a speed test on dashes before 5960(? double check if this was the first dash to change behaviour).
=== Extra Info ===
Pressing Y once the connection test has finished will show some extra info;
Pressing A on 5960 or later will perform another test using <pre>xds.xboxlive.com</pre> - this server is still up (CNAME'd to xds.gtm.xboxlive.com, IP 65.55.42.21). This will then return three more results:
MT - MTU test, if 1 your MTU is 1365+ and works with Xbox Live, if 0 then <1365
IC - ICMP test, if 1 your router is properly forwarding ICMP, if 0 then not
NT - NAT test, where 1 is open, 2 is moderate, and 3 is strict.
This info is from [https://web.archive.org/web/20040621040049/http://www.xbox.com/en-US/live/connect/Diagnosing.htm Xbox Live's archived diagnostics page]
=== Packet Log ===
Pressing the Black button on the controller once the connection test has finished will save a packet log to the hard drive as a save [FIXME: add more info] - [https://github.com/insignia-live/xbcap2pcap xbcap2pcap] can convert this DAT file into a standard PCAP.
The DAT's structure is as follows:
<pre>
uint32_t total packet length
uint32_t timestamp in ms
total packet length - 8 bytes of Ethernet packet data
</pre>
e8082c94b5d75a962bf31b3f33971efe39dd735f
Main Page
0
1
6913
6896
2021-03-20T14:03:07Z
Billy549
2520
/* Development Kits and Tools */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
d1e035f0dd2b0677784d0434f27021822073237c
6916
6913
2021-03-20T14:13:02Z
Billy549
2520
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
*** [[Xbox Live/Machine Account|Machine Account]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
eaaa1cf167be83a42699cb753dbcbed481c2f5ec
6923
6916
2021-05-02T23:41:41Z
Mason
2530
Adding new pages for xbox emulators
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
*** [[Xbox Live/Machine Account|Machine Account]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XEMU]]
** [[CXBX-R]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
3604016bc666155fd3d981fcd2b61e4e6d27bd67
6926
6923
2021-05-03T00:00:36Z
Mason
2530
/* Development Kits and Tools */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
*** [[Xbox Live/Machine Account|Machine Account]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
* [[Insignia]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XEMU]]
** [[CXBX-R]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
016ce6d5bad0df05a5e333583276e1b600bc4721
6932
6926
2021-05-03T07:29:08Z
Mason
2530
/* Development Kits and Tools */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
*** [[Xbox Live/Machine Account|Machine Account]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XEMU]]
** [[CXBX-R]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
3604016bc666155fd3d981fcd2b61e4e6d27bd67
6933
6932
2021-05-11T13:28:44Z
Espes
2484
/* Emulation */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
*** [[Xbox Live/Machine Account|Machine Account]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[XEMU]]
** [[Cxbx-Reloaded]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
75e4d0f37a8ca67f2954208f88348bcb9d072cc7
6935
6933
2021-05-11T13:46:02Z
Espes
2484
/* Emulation */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
*** [[Xbox Live/Machine Account|Machine Account]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[Xemu|xemu]]
** [[Cxbx-Reloaded]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
a8682ce8173b30093610ce9f1740aec7a234cd54
Xbox Live/Machine Account
0
4005
6914
2021-03-20T14:12:34Z
Billy549
2520
Create Machine Account page
wikitext
text/x-wiki
All Xboxes that communicate on Xbox Live will have a Machine Account -
== Machine Account Creation Service ==
The first time an Xbox connects to Xbox Live from the factory, it'll connect to MACS.XBOXLIVE.COM and use a pre-shared key based from the Online Key, HDD Key, and a unique key present in all Xbox Live binaries. The server will either return an error message, or return a valid machine account for future authentication.
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
606be6ca4ee8d729d8ed0b268b51d68fef868eed
6917
6914
2021-03-20T14:14:05Z
Billy549
2520
wikitext
text/x-wiki
All Xboxes that communicate on Xbox Live will have a Machine Account - it's generated the first time a user performs a connection test from the factory on an Xbox Live dashboard (4920 or later).
== Machine Account Creation Service ==
The first time an Xbox connects to Xbox Live from the factory, it'll connect to MACS.XBOXLIVE.COM and use a pre-shared key based from the Online Key, HDD Key, and a unique key present in all Xbox Live binaries. The server will either return an error message, or return a valid machine account for future authentication.
{| class="wikitable"
|+Xbox PA-DATA
|-
! padata-type
! description
|-
|131
| ?
|-
|204
| ?
|-
|206
| Information about Xbox Version, Title, and Title version
|}
3f6f36579ebc2f8b72ed49e008e6d0363a0a4854
Xbox Live
0
3693
6915
6885
2021-03-20T14:12:43Z
Billy549
2520
wikitext
text/x-wiki
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
The Xbox Live architecture consists of Kerberos-based authentication tickets, with a Secure Gateway used to then access services (such as Matchmaking, Statistics/Leaderboards, and custom game servers)
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customisations for the Xbox. When an Xbox first connects, the server gives it a [[Xbox Live/Machine Account|Machine Account]] which it uses to access the service; this machine account is always sent, but it can only be used alone to access UACS (User Account Creation Service) to create a user account - with both a machine account and user account, all other services are accessible.
=== XDK Functions ===
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon. It will return XONLINETASK_S_RUNNING while the login process has not been completed.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|Will return XONLINE_S_LOGON_CONNECTION_ESTABLISHED when the task is successfully completed. Otherwise it will return an error code.
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|}
== Discontinuation of service ==
The service was officially discontinued on April 15th, 2010.
12 players decided to stay in a lobby of ''Halo 2'' 24/7 to keep a server running.
The final player, Apache N4SIR was streaming the entire event, as the player count of 12 twindeled down to just him. At 11:40 PM PDT, on May 11th 2010, Apache N4SIR was booted from the game[http://i.imgur.com/oQw6k5H.jpg].
a86d06b304a92946dde78d05412fa04f9026bb97
Exploits
0
3751
6918
6858
2021-03-23T17:09:50Z
Derf
2525
/* Attack ideas */
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnie's book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-ROM. The XBE extracts the actual game XBE (which is signed to run from HDD) onto the cache drives. If we can find a vulnerability in one of them (loaded files), we could possibly take over the entire system and run a softmod from DVD+R. In order to make a bootable DVD+R, you must have a DVD burner that - either natively, or by custom firmware - can set booktype to DVD-ROM. From a small sample size, it appears that the drive must also be capable of setting the layertype on the disc to "read-only", which is a very rarely used security feature apparently only present for Xbox, Xbox 360, and an Audi navigation system. Layertype is a rather unknown thing, and it appears DVD burners were accidentally set with this from factory, but regular burner drives could potentially have the layertype modified using custom firmware (as the Burnermax payload does for dual layer DVDs).
|-
|'''Hulk (Special Edition)'''
UPC 2519224892
[[The Hulk]]
This DVD is unique and contains a partial dashboard (5860 with 4831 libraries) with an xboxdash.xbe signed to run from DVD-ROM. The default.xbe calls this dashboard XBE with parameters to play a video on the disc. By swapping this XBE with the default.xbe, you can boot the dashboard to a blank sphere. By placing dashboard 4920's mainmenu5.xip in the xboxdash folder, you can restore the orb and menu options, but selecting an option will show a blank sphere after the zoom animation. All xips are loaded from DVD and are hash checked. Font/audio files are loaded from HDD and hash checked. Aside from xboxdash.xbe, default.xbe will load video_ts.ifo and an audio file from disc, so a vulnerability could be found in those.
Requires a DVD+R burned with booktype DVD-ROM and the DVD drive must support layertype "read only" which is a firmware feature in a very small handful of DVD burners.
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
UPC 2454317005
[[Republic Commando]]
Untested
|-
|'''Star Wars: Clone Wars - Volume Two'''
UPC 24543214137
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
UPC 5039036023238
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
UPC 24543123415 or 5039036017374
[[Star Wars Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD (Widescreen theatrical edition)'''
UPC 24543559856
[[Lego Star Wars 2]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
UPC 5050582274639
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
UPC 25192031229
[[Doom 3]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
UPC 786936265262
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
UPC 24543193845
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
UPC 25192326622 or 25192586125
[[Van Helsing]]
Untested
|-
|'''The Godfather'''
UPC not 5014437812834 nor 14633165401 nor 014633165401
SPPV and Atreyu187 claim this exists and contains an XBE capable of chainloading any signed game XBE. No evidence exists of this actually existing on the DVD or game bonus disc, but it is listed here for posterity.
[[The Godfather: The Game]]
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
9dc3d4146fae774343cf97889f8edf441f69ff5b
6919
6918
2021-03-23T17:11:17Z
Derf
2525
Undo revision 6918 by [[Special:Contributions/Derf|Derf]] ([[User talk:Derf|talk]])
wikitext
text/x-wiki
== MCPX ==
=== LDT (Hypertransport) bus tap ===
See [http://www.xenatera.com/bunnie/proj/anatak/xboxmod.html#ldt bunnie's adventures hacking the Xbox].
=== Visor hack ===
Exploits incorrect rollover of memory address.
=== MIST hack ===
Exploits error in xcode interpreter security check.
There are at least 2 variations of this hack.
=== A20M# hack ===
[[File:Haxar-a20m.jpg|thumb|200px|A jumper wire hack to enable A20]]
Uses a legacy x86 feature.
=== RC4 attack (MCPX 1.0 only) ===
Microsoft uses the last bytes of the decrypted 2BL to check the integrity of the 2BL.
However, RC4 does not have any feedback which means changes in the 2BL will not reflect in the last couple of bytes which are checked.
As such, the 2BL can be freely modified, as long as the last couple of bytes still match what the MCPX ROM expects.
This can be used to take over the 2BL entry point.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''This attack is described by Michael Steil in his Google talk.''
=== TEA attack (MCPX 1.1 only) ===
TEA, which is only used in MCPX 1.1, can not be used as a hash in Davies-Meyer mode [http://www.tayloredge.com/reference/Mathematics/VRAndem.pdf][https://www.schneier.com/academic/paperfiles/paper-key-schedule.pdf]. And yet, Microsoft used it that way.
The original attack uses the 5 bytes at 0xffffd400 (FBL entry point) which are <code>E9 83 01 00 00</code>.
This is <code>jmp 0xffffd588</code> (which is a jump within the flash region).
When flipping the highest bit of the operand DWORD (at 0xffffd400, mind your endianess) this will become: <code>E9 83 01 80 00</code>.
This is <code>jmp 0x7fd588</code> (which is a jump into the RAM region).
For the attack to be successful, the highest bit in the DWORD at 0xffffd404 also has to be flipped.
The RAM can be controlled using the x-code command to write to RAM.
So the idea is to copy a program from Flash to RAM using x-codes.
Then the FBL / 2BL is modified to jump into said RAM region by flipping a bit of a jump operand (as described above).
The 2 bit flips will not change the hash of FBL / 2BL as TEA is broken.
As such, the FBL verification will succeed, the MCPX ROM will hand control to the FBL which will then jump into the attacker controlled RAM.
When the attack happens, the MCPX ROM is still visible, making this a very powerful attack.
''The TEA algorithm and exploit are also described in more detail in Bunnie's book (Page 109 and Page 142).''
== Dashboard ==
=== Audio hacks ===
=== Font hacks ===
[http://archiv.sega-dc.de/phoenix.maxconsole.net/docs/berternie.inc.htm Analysis of "Bert & Ernie" font-exploit].
==== Easter-egg exploit ====
== Savegames ==
Savedgames can be used as an exploit method, but care must be taken for most games are verifying digital signatures of savedgames {{citation needed}} [http://bunniefoo.com/nostarch/HackingTheXbox_Free.pdf]
=== [[007: Agent Under Fire]] ===
[https://web.archive.org/web/20031003093240/http://xbox-linux.sourceforge.net:80/docs/007analysis.html Analysis of this savegame-exploit].
=== [[Frogger Beyond]] ===
Not much is known why this game was in the list, [https://events.ccc.de/congress/2005/fahrplan/attachments/674-slides_xbox.pdf 22C3, page 85]
The game isnt shown in the final presentation at 22C3 (neither are Mechassault nor SplinterCell).
=== [[MechAssault]] ===
=== [[Tom Clancy's Splinter Cell]] ===
=== [[Tony Hawk's Pro Skater 4]] ===
Grimdoomer discovered a savegame exploit in THPS4, shared it on Discord and was later included with the Rocky5 softmod installer.
[https://drive.google.com/file/d/0B9WVULxHOmNkQVBCMHMtVGhqVVU/view a video demonstrating the game trigger (custom skatepark)]
''10-4-2017 it's just shell code I injected into the game save/ granted this save is slightly more complicated than the others and requires a small "loader" that is just a memcpy basically it's literally as simple as a buffer overflow...I just looked for null terminated strings and fuzzed them then when I got a crash I looked in teh xbe to figure out what was going on. yeah it's literally just a stack overflow'' - grimdoomer
another website talking about his exploit.
[https://www.xbmc4xbox.org.uk/forum/viewtopic.php?t=7310 xbmc4xbox.org.uk]
== Attack ideas ==
{| class="wikitable"
! Purpose || Author || Description || Status
|-
|Xbox DVD Movie Playback Kit Dongle ROM manipulation || Xbox-Linux wiki
|As the dashboard presumably downloads the code from the ROM into the memory of the Xbox, this could be a hardware hack requiring no hardware modifications. The XBE loader for the DVD image is different from the usual XBE loader. However, the XBE is still signed and checked for security.
| XBE loader seems to be secured, although no full analysis has been done.
|-
| Preserving memory across boot || JayFoxRox
| Confirm behaviour described in the coldboot paper (https://jhalderm.com/pub/papers/coldboot-cacm09.pdf). This can be used to transfer code / setups for other exploits across a boot (such as preparing memory for A20 attack).
| Success: We have marked memory and rebooted the Xbox (through SMC warm and cold, and manual reboot using power switch). At room temperature, and the Xbox pre-heated, hundreds of markers can still be found after 10 seconds. Within the first 5 seconds, no loss of data was measured at all (although not many bits have been marked to begin with). We have confirmed the memory persistence not only for the main RAM, but also MCPX APU DSP memory banks. Other memory or register banks were not tested yet.
|-
| Early boot control || JayFoxRox
| Xcodes allow writing PCI config space. This can be used to set PCI BARs to random page-aligned addresses. Some devices like the NV2A or MCPX APU contain large register banks which can be read and written like RAM. So effectively we can probably overlay the flash memory or MCPX ROM with a temporary PCI mapping. To fill the memory, the PCI device can be mapped to a lower region, and be filled through Xcode memory writes.
This can be used to take control over code contained in RAM (FBL / 2BL), flash or possibly even the MCPX ROM during boot. This attack could be used to avoid unmapping the MCPX ROM and is therefore quite powerful. However, it requires knowledge of the Xcodes.
| This has not been tested during real-mode or early boot yet, but is assumed to work. It was tested from protected mode by mapping USB1 over the Flash and MCPX ROM region (main RAM has not been tested yet). Mapping the overlay pages without caching resulted in crashes. However, the PD was not reviewed at the time and might have been broken (through unconventional use of MmMapIoSpace).
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Schedule a reset
* Keep reading MCPX ROM memory with CPU to persistent page
* If we are lucky, the CPU would now copies the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Failed: I've tried reading MCPX ROM memory for as long as possible using the CPU. I've tried resets using PM26 (assumed PWRBTN), SMC Soft (0x01) and SMC Hard (0x40).
Memory was read based on observing value changes (in PCI regions, signalling reset), and timing alone (X cycles after starting reset).
The MCPX ROM region access always crashed. Shadowing the MCPX ROM with a PCI device does not help: The CPU never observed the PCI devices being remapped / lost.
As MCPX and CPU are both reset by the SMC directly, this is not surprising.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain:
* Map PCI devices over the MCPX ROM region
* Check if NV2A can access the mapped PCI device
* Configure NV2A to continously stream from MCPX ROM region to RAM - Reset system using SMC (idea: this resets the PCI device mappings in the MCPX and should re-enable the MCPX ROM)
* If we are lucky, the NV2A would now stream the MCPX ROM to RAM in it's last cycles with a broken LDT (this depends on how LDTs work and if they can recover)
| Concept only: No interest in experimenting with NV2A DMA.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain: On a warm boot, the x86 might do a bad boot (the following is a theory, someone please measure pins). Theroy: PWRGD is provided, but CPURST is still high from the previous run; CPURST might only go low once NV2A reboots:
* Map device in NV2A to MCPX ROM region (note: mapping MCPX device would not work, because that gets reset with PWRGD)
* Warm reset using SMC
* Code in NV2A device should now jump to lower memory and unmap the MCPX ROM region (by moving itself for example)
* Delay by X cycles [probably in the range from 1ns to idk.. 500ms] to avoid reading the MCPX ROM before MCPX reset
* Code in lower region should copy MCPX ROM region to persisting pages
| Concept only: Someone should measure the pins and possibly look into the memory signals. This is too time consuming for me.
|-
| Unknown || JayFoxRox
| Partial system reset using 0xCF9 I/O register
| Resetting through 0xCF9 lands us on a black screen and the LED flashes as if the DVD tray was being opened. It's currently assumed that 0xCF9 only resets peripherals and NV2A / CPU, but it does not seem to reset the MCPX itself (hence issues booting and PCI activity which causes LED to flash). This has not been tested yet. An idea to confirm this, might be to map a device at 0xFFFFFFF0 which places an x86 jump to a good memory page. If the MCPX really isn't reset, then the CPU would boot from the MMIO / known page.
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to find problems with the SMC reset chain. The SMC takes a couple of milliseconds to reset the system. Parts of the peripherals might stay alive for long enough. So chances (extremly unlikely) are, the peripherals could be programmed to do DMA where the DMA is only executed after the reboot.
| Failed: An attempt was made to use the APU GP DSP DMA to continuously store x86 code where 2BL would unpack. The system was then reset using the SMC. It booted normally. It is assumed that the DMA is probably long dead by the time that the 2BL is being unpacked / ran.
|-
| Unknown || JayFoxRox
| Resetting from wrong address. The errata for the CPU states that a warm-reset might occur from the wrong address.
| Concept only: Needs more research
|-
| Dumping the MCPX ROM || JayFoxRox
| Trying to access MCPX ROM through peripherals in the southbridge. If the address logic is broken, parts like the OHCI, APU or AC97 might be able to access it still.
|
* AC97: Lots of crashes / hangs. Sometimes crackling noise. Sometimes does not crash. Also can access some non-existing memory regions without any crashes. Data read from invalid addresses seemed to be 300 Hz square wave. While crashing the hardware output will have exponential falloff (measured on PCM line-out).
* APU: Mapping GP DSP Scratch memory from 0x00000000 to 0x7FFFFFFF reveals mirrors of physical RAM. Setting the highest bit (addresses over 0x80000000) will result in a crash of the Xbox.
* OHCI: Untested
* Others: Untested
|-
| Dumping Kernel INIT || JayFoxRox
| INIT is free'd right before passing execution to the first XBE. Depending on what the XBE allocates, the INIT section might still be in memory when a dumper is run.
| Probably doesn't work. Would need the dumper to directly run after cold-boot. Softmods unfortunately reboot the Xbox and during this warm-boot the INIT section is (in at least most cases) lost.
|-
| Dumping Kernel INIT || DaveX || An extension to JayFoxRox dumping idea. Instead of running a dumper-XBE through a softmod, the softmod itself could do the dumping. This means creation of a custom softmod, just for dumping. This depends on the used softmod entry-point (font-exploit (signed target xbe), audio-exploit, ..) to gain execution as early as possible. This strategy might be slightly risky as harddisk contents have to be modified for the temporary softmod.
| WIP as of 2018-09-12
|-
| rowspan="13" | Homebrew entry point || rowspan="13" | Community
| rowspan="13" | Some movie DVDs contain default XBEs signed to run on original Xbox from DVD-ROM. The XBE extracts the actual game XBE (which is signed to run from HDD) onto the cache drives. If we can find a vulnerability in one of them (loaded files), we could possibly take over the entire system and run a softmod from DVD+R. In order to make a bootable DVD+R, you must have a DVD burner that - either natively, or by custom firmware - can set booktype to DVD-ROM. From a small sample size, it appears that the drive must also be capable of setting the layertype on the disc to "read-only", which is a very rarely used security feature apparently only present for Xbox, Xbox 360, and an Audi navigation system. Layertype is a rather unknown thing, and it appears DVD burners were accidentally set with this from factory, but regular burner drives could potentially have the layertype modified using custom firmware (as the Burnermax payload does for dual layer DVDs).
|-
|'''Hulk (Special Edition)'''
UPC 2519224892
[[The Hulk]]
This DVD is unique and contains a partial dashboard (5860 with 4831 libraries) with an xboxdash.xbe signed to run from DVD-ROM. The default.xbe calls this dashboard XBE with parameters to play a video on the disc. By swapping this XBE with the default.xbe, you can boot the dashboard to a blank sphere. By placing dashboard 4920's mainmenu5.xip in the xboxdash folder, you can restore the orb and menu options, but selecting an option will show a blank sphere after the zoom animation. All xips are loaded from DVD and are hash checked. Font/audio files are loaded from HDD and hash checked. Aside from xboxdash.xbe, default.xbe will load video_ts.ifo and an audio file from cdrom, so a vulnerability could be found in those.
Untested
|-
|'''Star Wars: Clone Wars - Volume One'''
UPC 2454317005
[[Republic Commando]]
Untested
|-
|'''Star Wars: Clone Wars - Volume Two'''
UPC 24543214137
[[Battlefront II]]
Untested
|-
|'''Star Wars: Episode III - Revenge of the Sith (Widescreen Edition)'''
UPC 5039036023238
[[Battlefront II]]
Untested
|-
|'''Star Wars Trilogy (Widescreen Edition with Bonus Disc)'''
UPC 24543123415 or 5039036017374
[[Star Wars Battlefront]]
Untested
|-
|'''Star Wars Trilogy DVD (Widescreen theatrical edition)'''
UPC 24543559856
[[Lego Star Wars 2]]
Untested
|-
|'''The Chronicles of Riddick (Widescreen Unrated Director's Cut)'''
UPC 5050582274639
[[Chronicles of Riddick]]
Untested
|-
|'''Doom (Unrated Widescreen Edition)'''
UPC 25192031229
[[Doom 3]]
Untested
|-
|'''King Arthur - The Director's Cut (Widescreen Edition)'''
UPC 786936265262
[[King Arthur]]
Untested
|-
|'''Robots (Widescreen Edition)'''
UPC 24543193845
[[Robots]]
Untested
|-
|'''Van Helsing (Widescreen Edition)'''
UPC 25192326622 or 25192586125
[[Van Helsing]]
Untested
|-
|'''The Godfather'''
UPC not 5014437812834 nor 14633165401 nor 014633165401
SPPV and Atreyu187 claim this exists and contains an XBE capable of chainloading any signed game XBE. No evidence exists of this actually existing on the DVD or game bonus disc, but it is listed here for posterity.
[[The Godfather: The Game]]
|}
== Notes ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System]
* [http://toogam.bespin.org/xboxmod/site/xbehacks.htm A list of some exploit implementations]
1fd369538fc6b59ed8f489b448743d32527c6278
Xboxen Info
0
4006
6921
2021-04-25T03:23:11Z
Dumb
2529
Created page with "Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of tho..."
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
|
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| ?
| ?
| ?
| ?
| "1.2"
| ?
| ?
| ?
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 461532733706
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCPX X2
| ?
| ?
| "Development Kit"
| Y
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
fbb7a4f2a284891f15ed498547db40685f7d3bf7
6922
6921
2021-04-25T03:31:52Z
Dumb
2529
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
|
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| ?
| ?
| ?
| ?
| "1.2"
| ?
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 461532733706
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCPX X2
| ?
| ?
| "Development Kit"
| Y
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
8780e3cb75569dbb7ff3522d123a85f259593014
Xemu
0
4007
6924
2021-05-02T23:51:40Z
Mason
2530
Adding new pages for xbox emulators
wikitext
text/x-wiki
xemu is a continuation of xqemu which is a low-level Xbox / Chihiro Emulator started in early 2020 by mborgerson[https://github.com/mborgerson/xemu].
The official homepage can be found at [https://xemu.app xemu.app]
== Compatibility list ==
Compatibility list can be found by going [https://xemu.app here].
Most titles have marked as playable with some minor issues, some relating to performance or assert crashes that need to be fixed/implemented.
== Features ==
Currently the features that are supported are Gamepad Support, System Link, Snapshots (Save States), and coming soon is Surface Scaling, which is available [https://github.com/mborgerson/xemu/tree/feat/surf-scale here].
8a187333f11860ed4291b550994c457a2cbf590e
6928
6924
2021-05-03T00:07:08Z
Mason
2530
wikitext
text/x-wiki
xemu is a continuation of xqemu which is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes[https://github.com/espes/xqemu/commit/d823f5802e7c4c84163aea8b4d924044951c705e].
xemu was started in early 2020 by mborgerson[https://github.com/mborgerson]
The official homepage can be found at [https://xemu.app xemu.app]
== Compatibility list ==
Compatibility list can be found by going [https://xemu.app here].
Most titles have marked as playable with some minor issues, some relating to performance or assert crashes that need to be fixed/implemented.
== Features ==
Currently the features that are supported are Gamepad Support, System Link, Snapshots (Save States), and coming soon is Surface Scaling, which is available [https://github.com/mborgerson/xemu/tree/feat/surf-scale here].
66492025f9dfacb0f91340a85fc09d8f0b315d67
6929
6928
2021-05-03T06:52:08Z
Dracc
2502
wikitext
text/x-wiki
xemu is a continuation of xqemu which is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes[https://github.com/espes/xqemu/commit/d823f5802e7c4c84163aea8b4d924044951c705e].
xemu was started in early 2020 by mborgerson[https://github.com/mborgerson]
The official homepage can be found at [https://xemu.app xemu.app]
== Compatibility list ==
Compatibility list can be found at https://xemu.app/#compatibility.
== Features ==
Currently the features that are supported are Gamepad Support, System Link, Snapshots (Save States).
aad353a4a17d4ca378481ae92e2f7bec7a06f0a4
6930
6929
2021-05-03T06:52:33Z
Dracc
2502
wikitext
text/x-wiki
xemu is a continuation of xqemu which is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes[https://github.com/espes/xqemu/commit/d823f5802e7c4c84163aea8b4d924044951c705e].
xemu was started in early 2020 by mborgerson[https://github.com/mborgerson]
The official homepage is https://xemu.app
== Compatibility list ==
Compatibility list can be found at https://xemu.app/#compatibility.
== Features ==
Currently the features that are supported are Gamepad Support, System Link, Snapshots (Save States).
d439019629686bd6dc32e098acbef2cfc7670900
6934
6930
2021-05-11T13:41:15Z
Espes
2484
Espes moved page [[XEMU]] to [[Xemu]] without leaving a redirect
wikitext
text/x-wiki
xemu is a continuation of xqemu which is a low-level Xbox / Chihiro Emulator started in mid-late 2012 by espes[https://github.com/espes/xqemu/commit/d823f5802e7c4c84163aea8b4d924044951c705e].
xemu was started in early 2020 by mborgerson[https://github.com/mborgerson]
The official homepage is https://xemu.app
== Compatibility list ==
Compatibility list can be found at https://xemu.app/#compatibility.
== Features ==
Currently the features that are supported are Gamepad Support, System Link, Snapshots (Save States).
d439019629686bd6dc32e098acbef2cfc7670900
Insignia
0
4009
6927
2021-05-03T00:05:06Z
Mason
2530
Created page with "Insignia is meant to serve as a replacement for Xbox Live 1.0 which shutdown April 15th, 2010. This project was created by Luke Usher[https://www.patreon.com/LukeUsher] You..."
wikitext
text/x-wiki
Insignia is meant to serve as a replacement for Xbox Live 1.0 which shutdown April 15th, 2010.
This project was created by Luke Usher[https://www.patreon.com/LukeUsher]
You can find Insignia [https://discord.gg/CWkdVdc here]
d6ea2db29b46d4c260bb37678b607b4741349a9d
Emulators
0
3703
6936
6880
2021-05-11T13:46:32Z
Espes
2484
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[Xemu|xemu]]
|[https://xemu.app/][https://github.com/mborgerson/xemu]
|mborgerson
|Windows/macOS/Linux
|
|xemu is a fork of XQEMU but more usable
|-
|{{Yes|Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[[Fusion]][http://michaelbrundage.com/project/xbox-360-emulator/]
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|[[Fission]][http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility]
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|
|-
|{{No|Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{No|Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid
|{{No}}
|StrikeBox
|[https://github.com/StrikerX3/StrikeBox]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{No|Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|[https://github.com/LoveMHz/XBENext]
|LoveMHz
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{No|Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
41dc40b12615cffcf9f605f09d7ed400dc20089a
Xbox Manufacturing Process
0
3775
6937
5590
2021-05-11T14:26:44Z
Billy549
2520
Add redirect to the new page.
wikitext
text/x-wiki
#REDIRECT [[Manufacturing Process]]
{{retrieved|https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process}}
by ''Michael Steil''
There are many different Xboxes. Although they all look the same (except for the "Special Edition"), and all of them work with all games, they have been produced in three different factories and may contain different components.
This article describes the "reverse-engineered" internals of Xbox manufacturing.
==The Serial Number==
Every Xbox has a sticker on the bottom that looks like this:
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/serial-sticker.jpg" alt="serial-sticker.jpg" />
It contains the manufacturing date and the 12-digit serial number:
<pre>1166356 20903
|| | |||||__
|| | ||||___ factory number
|| | |||____
|| | ||_____ week of year (starting Mondays)
|| | |______ last digit of year
|| |________
||_____________ number of Xbox within week and factory
|______________ production line within factory
</pre>
<br />
Three factories have produced the Xbox. Mexico (Guadalajara) is "02", Hungary (S�rv�r) is "03" and China (Doumen) is "05".
So this Xbox has been manufactured in week #9, 2002 in line 1 of the factory in Hungary, and it was number 166,356 of this week.
==Factories==
{| class="wikitable"
|-
| '''Date'''
| '''Mexico'''
| '''Hungary'''
| '''China'''
|-
| 10/2001
| Production of 110V 1.0 Xboxes with Thomson drives is started for the USA/Canada market.
| Production of 110V 1.0 Xboxes with Thomson drives is started for the USA/Canada market.
|-
| 01/2002
| Production gets extended for Japan.
| Complete switch to 220V European/Australian models.
|-
| 04/2002
| Production lines #1 and #6 get closed and get moved to China. The other four lines continue production. The first Xboxes with Philips DVD drives are made, now 50% of all Mexican devices have Philips, and 50% have Thomson.
|
|-
| 05/2002
|
| Production stops after only less than 9 months, and after about 3 Million Xboxes. All four production lines get moved to China.
|-
| 08/2002
|
|
| Production of the 220V 1.1 Xbox for Europe and Australia only begins, with mostly Philips and sometimes Thomson DVD drives.
|-
| 09/2002
|
|
| First Samsung DVD drives. Most Xboxes now contain Samsung devices, a few contain Philips ones, and very few still contain Thomson ones.
|-
| 10/2002
| Switch the remaining four lines to version 1.1.
|
|
|-
| 11/2002
|
|
| Production gets extended by 110V USA/Canada/Japan models.
|-
| 12/2002
| Production ends after 14 months, and after nearly 7 Million Xboxes.
|
| First line changes to version 1.2
|-
| 02/2003
|
|
| Last line changes to version 1.2
|-
| 03/2003
|
|
| First line changes to version 1.3
|-
| 04/2003
|
|
| Last line changes to version 1.3
|-
| 07/2003
|
|
| First line changes to version 1.4
|-
| 08/2003
|
|
| First line changes to version 1.5
|}
Look at the <a href="/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Versions_HOWTO" title="Xbox Versions HOWTO">Xbox Versions HOWTO</a> for details on when which Chinese line switched to a new version.
==Manufacturing Process==
(Please note that a lot of this information has been concluded from implicit information, it may contain errors.)
When a computer such as the Xbox is manufactured, three very different tasks have to be done:
* assemble the hardware
* copy the software on the hardware
* test the device
The most interesting part about this is when the software is copied, and when and how the device is tested, because there is a lot of room for optimization.
Not counting the firmware of independent components such as the HD, the DVD and the SMC, the Xbox contains three pieces of software:
* The Xbox kernel in Flash ROM
* The hard disk contents (and hard disk key)
* The EEPROM contents
It depends on the device whether it is more convenient to program it before putting it into the Xbox or doing in-system-programming.
===Putting the System together===
The Flash ROM chips gets programmed externally with the final Xbox kernel and then gets soldered onto the Xbox motherboard. The EEPROM is empty when it gets soldered onto it. So is the hard disk when it gets connected.
===The Installation CD===
So when the Xbox is complete, but the EEPROM and the hard disk are still empty and the hard disk is not locked yet, an optical media gets inserted into the DVD drive (this needn't be an Xbox DVD), which contains a properly retail-signed default.xbe built with the XDK that has the allow eject flag set and has the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from CD, which does the following:
* format the three swap partitions
* copy XMTAXBOX.XBE from CD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
===XMTAXBOX.XBE===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
* retrieve the EEPROM contents from a network server
* retrieve the contents of the system and data partitions from a network server
* lock the hard disk
* make some self tests and send the report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/repairdvd.jpg" alt="repairdvd.jpg" />
<img src="https://web.archive.org/web/20100617013616im_/http://www.xbox-linux.org/pic/xboxqc.jpg" alt="xboxqc.jpg" /> [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-01/articles/16-01_26.asp]
== Further Reading ==
* [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process_Pictures Xbox Manufacturing Process Pictures]
* [https://web.archive.org/web/20100617013616/http://www.ifm.eng.cam.ac.uk/ctm/idm/cases/xbox.html] Innovation and Design Management case study
* O'Brien, J. [https://web.archive.org/web/20100617013616/http://www.wired.com/wired/archive/9.11/flex_pr.html The making of the Xbox], Wired, Issue 9.11, November 2001
* Shah, J. and Serant, C. [https://web.archive.org/web/20100617013616/http://www.ebnonline.com/story/OEG20020311S0076 Microsoft's Xbox sets supply chain standard], EBN Online, 11 March 2002
* Olavsrud, T. [https://web.archive.org/web/20100617013616/http://www.internetnews.com/bus-news/article.php/1129171 Flextronics relocates Xbox manufacturing facility], Internetnews.com, 15 May 2002
* Penz, B. [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-06/articles/16-06_27.asp Game Over? Xbox production heads east], Business Hungary, Vol 16 No 6, June 2002
* Carbone, J. [https://web.archive.org/web/20100617013616/http://manufacturing.net/pur/article/CA237778?stt=001&pubdate=08%2F15%2F02 Outsourcing the Xbox], Purchasing Magazine Online, 15 August 2002
* Neilley, R: [https://web.archive.org/web/20100617013616/http://www.immnet.com/articles?article=1763 Molding is big man on this campus]
435490a0cbb571a9bd975178de790ee9ee2478a8
Xbox Hard Disk Partitioning
0
3782
6938
6726
2021-05-11T14:29:48Z
Billy549
2520
Redirected page to [[Hard Drive#Partitions]]
wikitext
text/x-wiki
#REDIRECT [[Hard Drive#Partitions]]
{{retrieved|https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Hard_Disk_Partitioning|ours=Hard Drive}}
by ''Michael Steil'' (original version: 8 May 2002)
The Xbox uses a hard disk partitioning scheme that is hardwired into the kernel. The hard disk consists of a header, 3 game cache partitions, a system partition and a data partition:
{| class="wikitable"
|-
! Offset
! Size
! Description
|-
| 0 MB<br /><code>0x00000000</code>
| 0.5 MB
| '''Disk Config Area''' <br />This partition contains no filesystem. Various configuration data is stored on fixed offsets.<br />Linux device: <code>none</code>
|-
| 0.5 MB<br /><code>0x00000400</code>
| 750 MB
| '''Game Cache A''' (Drive X:)<br />FATX volume containing temporary data of a game for faster access.<br />Linux device: <code>/dev/hda52</code>
|-
| 750.5 MB<br /><code>0x00177400</code>
| 750 MB
| '''Game Cache B''' (Drive Y:)<br />Linux device: <code>/dev/hda53</code>
|-
| 1500.5 MB<br /><code>0x002EE400</code>
| 750 MB
| '''Game Cache C''' (Drive Z:)<br />Linux device: <code>/dev/hda54</code>
|-
| 2250.5 MB<br /><code>0x00465400</code>
| 500 MB
| '''System Files''' (Drive C:)<br />FATX volume containing menu code, graphics, sound, DVD player, music import, ...<br />Linux device: <code>/dev/hda51</code>
|-
| 2750.5 MB<br /><code>0x0055F400</code>
| 4895 MB
| '''Data''' (Drive E:)<br />FATX volume containing saved games and imported CD audio tracks.<br />Linux device: <code>/dev/hda50</code>
|-
!
!
! '''Non-Standard partitions on disks >8GB'''
|-
| 7645.5 MB<br /><code>0x00EE8AB0</code>
| 1896 MB<br />- 130 GB
| '''Unused/Additional''' (Drive F:)<br />The first xboxes had a 8GB disk, later versions came with a 10GB disk. This the space difference between the two and not used. Some tools allow it to be used as additional FATX filesystem<br />Linux device: <code>/dev/hda55</code> (only present if signature of formatted FATX found)<br />Linux assumes that all remaining space on the disk belongs to this partition unless another FATX filesystem is detected at the LBA28 boundary. See below.
|-
| 137 GB<br /><code>0x0FFFFFFF</code>
| remaining space
| '''LBA28''' (Drive G:)<br />If you install a very big disk some tools are limited by the LBA24 boundary. The drive G allows this space to be used in a separate drive, only accessible to LBA48 capable tools and BIOS'es.<br />Linux device: <code>/dev/hda56</code> (only present if signature of formatted FATX found at LBA24 boundary)<br />Linux assumes that all remaining space on the disk belongs to this partition.
|}
This table has been completed by Markus Baertschi with lots of stuff. There might be errors and misconceptions, caveat emptor !
{| class="wikitable"
|-
! '''Missing image'''<br />''Icon-admonition-tip.png'' <br />Tip<br /><br /> | For a more detailed description of the format and contents of the partitions see [https://web.archive.org/web/20100617023145/http://www.xbox-linux.org/wiki/Xbox_Partitioning_and_Filesystem_Details Xbox Partitioning and Filesystem Details].|}
95666a995dc021f98361762b20bdc1f8b5620811
Xbox Hard Drive Locking Mechanism
0
3780
6939
5626
2021-05-11T14:30:46Z
Billy549
2520
Redirected page to [[Hard Drive#Locking Mechanism and Basics]]
wikitext
text/x-wiki
#REDIRECT [[Hard Drive#Locking_Mechanism_and_Basics]]
{{retrieved|https://web.archive.org/web/20100617023052/http://www.xbox-linux.org/wiki/Xbox_Hard_Drive_Locking_Mechanism}}
by ''SpeedBump'' (original version: 13 August 2002)
The hard drive in the MS Xbox(tm) is a standard ide drive, which implements a rarely used security feature to restrict access to its data. This document will describe in full the security features, and the algorithms required to access the data on an xbox drive.
==The IDE (ATA) commands==
The ATA spec defines a feature subset which allows for the user to limit access to the drive's data behind a hardware implemented locking mechanism. There are several commands in the SECURITY feature subset, but the command of most interest is the SECURITY_UNLOCK command.
SECURITY_UNLOCK requires that the user provide one of two 32 byte passwords, either a user or master password. The Xbox uses the user password. Details on the data formats and timings for the data to be sent to the ide drive can be found in the ata specs (see [[https://web.archive.org/web/20100617023052/http://www.t13.org/]]).
==The password==
The drive password is generated in two distinct phases. The first phase extracts a key (referred to as the HDKey) from the eeprom data on the Xbox. The HDKey is unique to each Xbox making this first phase dependant only on the Xbox eeprom of the unit. The second phase uses this HDKey to generate a password which is specific to the drive being unlocked (keyed to the model and serial numbers of the drive).
==Drive Data==
During the second phase, the serial and model numbers are needed. These values are available in the response data from the DEVICE_IDENTITY ata command. However, the data needs to be properly reorganized. It is read in big endian words, and needs to be byte swapped first to get the byte ordering correct. Then, starting from the end of the data (serial == 20 bytes, model == 40 bytes) ignore ASCII spaces (byte value of 0x20) at the end of the data. Zeros are *not* trimmed, *only* spaces. Do not be fooled into believing that this data is a string. On some drives this is the case, but on others there are non-ascii values in the fields.
==Basic Security algorithms==
There are two primary crytography routines needed when generating an XBox drive password, SHA1 and RC4.
SHA1 is a hashing algorithm. It's primary purpose is to take an input message and create a (relatively) small signature (called a digest) which is unique to the original message. One of the goals of SHA1 is to make it difficult to alter the input message in such a way as to result in the same output digest.
RC4 is a symmetric cipher. This means that the algorithm for encryption is the same as that for decryption. The purpose is to make one key work in both directions.
There is an algorithm called HMAC which uses a hashing algorithm (in this case SHA1) to generate a cryptographically "strong" signature. I'm sure there is a mathematical basis for this, but I'm not willing to try to understand it :)
==The Password Algorithm==
(some syntax notes, key data is shown entering functions from the side, data is shown entring from above or below, in order of presentation from left to right)
<pre> RC4_key >--(second)-->--,
/|\ |
| |
.-<--|__eeprom_key__|-->-----------> HMAC_SHA1 |
| /|\ |
| | |
| .--->-----------' |
| | |
| eeprom_data = |__data_hash___|__enc_conf__|__enc_data__| |
| | | | |
| | \|/ | |
| | rc4_decrypt <----|---------<|
| | | | |
| \|/ | | |
| (must be equal) | \|/ |
| /|\ | rc4_decrypt <---'
| | | |
| | \|/ \|/
| | |_confounder_|____data____|
| | / / |
| | / / |
| | / / |
| | / / |
| | \|/ / \|/
`--->-----------------> HMAC_SHA1 / |__HDKey__|__|
/|\ / |
\______/ |
|
.-------------------------<--------'
|
| model_number serial_number
| \ /
| \ /
`--->-----------------> HMAC_SHA1
|
\|/
HD_password
</pre>
<br />
This seems to be the easiest way to show the required calculations.
Basically there are several intermediate steps. First, generate the RC4_key from the eeprom_key and the data_hash (first 20 bytes of eeprom_data). Use the RC4_key to decrypt the encrypted confounder (8 bytes 20 bytes into eeprom_data) and the encrypted data (20 bytes 28 bytes into eeprom_data). Now generate an HMAC_SHA1 hash from the eeprom_key and the decrypted confounder and data. Verify that this hash matches the data_hash stored in the eeprom. If they don't match then the eeprom data is not correct. If the hashes match then the first 16 bytes of the decrypted data field is the HDKey.
Once you have the HDKey get the model number and serial number from the ide drive. Generate an HMAC_SHA1 hash from the HDKey, model and serial numbers. The resulting 20 bytes are the HD password. The remaining 12 bytes needed for the password are zeros.
==Remaining Questions==
The algorithm is well known, however it is dependant on the eeprom_key. It would be ideal if this key could be compiled into a driver to perform the generation and the unlocking. However noone appears to be able to answer the question of legality. Is it legal to privide the eeprom key? Either way, the drive can be unlocked. The ability to distribute the key will only help people use the drive outside the xbox (plus make it simpler to unlock the drive in the xbox).
ca62f500675ebd3e5b0ebc59241d142774758ddb
Xbe
0
3706
6940
6742
2021-05-11T18:18:51Z
Thrimbor
2531
Add full image header table. Mostly taken from caustik, but with fixes and enhancements
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. Standard windows format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a TLS (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from.
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format=
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
08eb39860e6a69da2fd126ff8140e212bac34eae
6941
6940
2021-05-11T18:57:25Z
Thrimbor
2531
Add info about TLS
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. Standard windows format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from.
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format=
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
== Resources and links ==
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
{{reflist}}
[[Category:Fileformats]]
56d3604fd1b98fc11d7fa1af6a00edddf752f21d
6942
6941
2021-05-11T18:59:18Z
Thrimbor
2531
Resources and links shouldn't be a subsection of Xbox Alpha executable format
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. Standard windows format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from.
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format =
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
= Resources and links =
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
cee6bdd0df0e5a6072df1ef86f4913ab55e2669d
Xbox Memory Unit
0
3790
6944
6871
2021-05-18T19:33:37Z
Billy549
2520
/* Compatible USB sticks */
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || 8MB || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || 8MB || Green logo Xbox and white "Trustmaster
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units where made.
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || 8MB || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit. (It is rumored that the capacity should not exceed 4GB)
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
|BESTRUNNER 256MB Speicherstick || 0xABCD || 0x1234 || 256MB ||
|-
|USB Mass Storage Device || 0x058F || 0x9381 || 64MB || Generic Mass Storage Device
|-
|[https://www.aliexpress.com/item/33007483881.html Generic Aliexpress Flash Drive] || 0xABCD || 0x1234 || 128MB||
|-
|}
== Protocol ==
=== USB Descriptor (Offical Memory Unit) ===
<pre>
Bus 002 Device 003: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0020
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
== References ==
* [http://imgur.com/a/8QmDA Thrustmaster XBOX Memory Unit images by DarkGabz]
* [http://imgur.com/gallery/M0PZ6 3 XBOX memory units images by CodeAsm]
123e7b1d34a9413ce20da9cf9695e2b4ebe6b642
Dashboard
0
3772
6947
6514
2021-05-23T01:15:36Z
Chipsnapper
2523
Timmyyyyyyyyyyyyyyyyyyyyyyyyyy!
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press {{input-y}}, {{input-x}} while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press "INFO" button on the DVD Playback Kit remote.
Only visible with DVD Playback Kit and Remote:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press {{input-y}}, {{input-x}} on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield{{FIXME|reason=replace lengthy explanation with a video of this}}.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg 1 ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Soundtrack name Easter-Egg 2 ("Timmyyyyyyyyyyyyyyyyyyyyyyyyyy!") ===
==== Steps to activate Soundtrack Easter Egg ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: Timmyyyyyyyyyyyyyyyyyyyyyyyyyy! with 26 'y' characters.
# Go to Settings -> System Information. The Xbox Dashboard credits will be displayed.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, press {{input-y}} {{ input-x}} on the main screen not from any sub-menu, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
* [[Hard Drive Files]]
* [[Soundtracks]]
b287ba7e77aaf74a105ec8828480147aceb8a848
6948
6947
2021-05-23T01:16:15Z
Chipsnapper
2523
/* Steps to activate Soundtrack Easter Egg */
wikitext
text/x-wiki
== Hidden features ==
=== Hotkey to switch to HD modes ===
Latest Xbox Dashboard (5960) force 480p display mode:
Press and hold Left trigger, right trigger, and both analog stick buttons.
The normally displayed 480i dashboard will switch to 480p output while using
the Xbox High Definition AV Pack or cable.
Repeat button combo to toggle between 480p and 480i.
=== Music visualization in fullscreen ===
Press {{input-y}}, {{input-x}} while playing audio CDs or soundtracks stored on the HDD to display full-screen geiss-like music visualization. Or, press "INFO" button on the DVD Playback Kit remote.
Only visible with DVD Playback Kit and Remote:
#Start playing a song using either the Xbox controller or playback kit remote.
#Press {{input-y}}, {{input-x}} on the controller or "INFO" on the remote to get the full screen visualization.
#Here's the part that requires the DVD Playback Kit remote. Press "STOP" or "PAUSE" (you cannot use the controller to stop the music to see it as doing so goes back to the Music Playback menu with the small visualization area). Once the music visualization pattern dies down, a full-screen swirling starfield pattern appears. After some time passes, the screen will be filled with a changing burst of solid color where you can make out the wireframe spinning globe seen encompassing the main dashboard background. The burst of color fades to black leaving the swirling starfield. The cycle repeats with a random changing solid color burst which fades to the swirling starfield{{FIXME|reason=replace lengthy explanation with a video of this}}.
Not quite true about needing the remote control, if playing a CD while full screen visualization is displayed, press the eject button on the front of the Xbox console.
=== Soundtrack name Easter-Egg 1 ("<<Eggsβox>>") ===
Stored in settings_adoc.xip (which is actually an XBE file)
==== Steps to activate Soundtrack Easter Egg ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: <<Eggsβox>> including the less than, beta, and greater than symbols.
# After you have entered the title, select "Done". A "Thank You" message starts which is followed by a scrolling list of the Xbox Team members.
If you press a button on the controller or let the message play through to the end -- the Xbox reboots.
=== Soundtrack name Easter-Egg 2 ("Timmyyyyyyyyyyyyyyyyyyyyyyyyyy!") ===
==== Steps to activate Soundtrack Easter Egg ====
# Insert an audio CD and let it begin to play.
# Stop the disk and step back (press B) in order to "Copy" selected tracks of the CD to the hard drive.
# When the track list comes up, "Select All" and continue.
# Choose "New Soundtrack" as the destination for your selection.
# Enter the name of your soundtrack exactly as follows: Timmyyyyyyyyyyyyyyyyyyyyyyyyyy! with 26 'y' characters.
# Allow the CD to finish copying to the hard drive.
# Go to Settings -> System Information. The Xbox Dashboard credits will be displayed.
=== Parental Control Bypass ===
If Parental Control is enabled and the password set has been forgotten, all is not lost. Use the following sequence:
* {{input-x}} {{input-y}} {{input-lt}} {{input-x}}
SET PASS CODE, MOVIES and GAMES level can now be modified and the pass code removed if so desired.
With SET PASS CODE selected, press {{input-a}} or {{input-start}} to change the current pass code and once more to be prompted, "Do you wish to delete the current pass code?". Select Yes or No then {{input-a}}.
=== Format Admin Codes ===
Secret Xbox format codes to format all drives except C. The code is different for all versions of the Xbox. If you find your code, please post it here along with your xbox version (at least the last 2 digits of the serial number - the factory code where it was manufactured).
==== Different codes based on serial-number ====
MS support techs under certain conditions would ask for your serial number and verify registration of your Xbox before giving you a code to clear/format your fouled Xbox's HDD.{{FIXME|reason=What part(s) of the serial number they used to determine the correct code is unknown?}}
==== List of Xbox Format Admin Codes ====
All of these codes are entered at the MS Dashboard's "System Info" screen. (UNTESTED here, codes posted as given at original source site.)
* Xbox v1.0: {{input-y}} {{input-x}} {{input-ly+}} {{input-lx-}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one seems to work with most Xbox sold in the United States}}: {{input-y}} {{input-ly+}} {{input-ly-}} {{input-x}} {{input-a}}
* Unknown version{{FIXME|reason=Which? This one worked with the Xbox manufactured in Hungary, serial numbers ending in 03}}: {{input-y}} {{input-lx-}} {{input-x}} {{input-a}} {{input-lx-}}
Source: [https://web.archive.org/web/20041010231137/http://unmodded.mine.nu:80/docs/FormatAdminCode unmodded.mine.nu/docs/FormatAdminCode]
=== Traveling Menus ===
Turn on your Xbox and go to the dashboard, press {{input-y}} {{ input-x}} on the main screen not from any sub-menu, the main menu will start to slowly move. Press {{input-y}} {{ input-x}} to return menu to locked position. All sub-menus will be moving about as well, you cannot return to locked position from sub-menus only from main menu.
Source: Shaky Menu at https://www.gamefaqs.com/xbox/915780-xbox/cheats
== See Also ==
* [[Hard Drive Files]]
* [[Soundtracks]]
b55441fe082dd820a036cb305b6081b0081c656f
Memory
0
3674
6949
6862
2021-05-24T23:36:44Z
X86corez
2533
Add sections and move ports from [[I/O]] page here.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable"
! Ports || Purpose
|-
| 0000-001f || dma1
|-
| 0020-003f || pic1
|-
| 0040-0043 || timer0
|-
| 0050-0053 || timer1
|-
| 0060-006f || keyboard
|-
| 0070-007f || rtc
|-
| 0080-008f || dma page reg
|-
| 00a0-00bf || pic2
|-
| 00c0-00df || dma2
|-
| 00f0-00ff || fpu
|-
| 01f0-01f7 || ide0
|-
| 03c0-03df || vesafb
|-
| 03f6-03f6 || ide0
|-
| 0cf8-0cff || PCI conf1
|-
| 1000-100f || nVidia Corporation nForce PCI System Management
|-
| 1080-10ff || nVidia Corporation Intel 537 [nForce MC97 Modem]
|-
| 1400-14ff || nVidia Corporation Intel 537 [nForce MC97 Modem]
|-
| c000-c00f || nVidia Corporation nForce PCI System Management (amd756-smbus)
|-
| c200-c21f || nVidia Corporation nForce PCI System Management
|-
| d000-d0ff || nVidia Corporation nForce Audio
|-
| d200-d27f || nVidia Corporation nForce Audio
|-
| e000-e007 || nVidia Corporation nForce Ethernet Controller
|-
| ff60-ff6f || nVidia Corporation nForce IDE
|-
| ff60-ff67 || ide0
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
6bfb02ddb654b42c6f0cf7682728f8c3fed0d8ab
I/O
0
3826
6950
5934
2021-05-24T23:37:04Z
X86corez
2533
Create a redirect. No pages link to this page actually.
wikitext
text/x-wiki
#REDIRECT [[Memory]]
2840bf29ec7f336704de23915d4eee7269203890
Memory
0
3674
6951
6949
2021-05-24T23:54:12Z
X86corez
2533
/* I/O port map */ Remove overlapping ide0, minor corrections.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable"
! Ports || Purpose
|-
| 0000-001f || dma1
|-
| 0020-003f || pic1
|-
| 0040-0043 || timer0
|-
| 0050-0053 || timer1
|-
| 0060-006f || keyboard
|-
| 0070-007f || rtc
|-
| 0080-008f || dma page reg
|-
| 00a0-00bf || pic2
|-
| 00c0-00df || dma2
|-
| 00f0-00ff || fpu
|-
| 01f0-01f7 || ide0
|-
| 03c0-03df || vesafb
|-
| 03f6-03f6 || ide0
|-
| 0cf8-0cff || PCI conf1
|-
| 1000-100f || nVidia Corporation nForce PCI System Management
|-
| 1080-10ff || nVidia Corporation nForce MC'97 Modem (Intel 537)
|-
| 1400-14ff || nVidia Corporation nForce MC'97 Modem (Intel 537)
|-
| c000-c00f || nVidia Corporation nForce PCI System Management (amd756-smbus)
|-
| c200-c21f || nVidia Corporation nForce PCI System Management
|-
| d000-d0ff || nVidia Corporation nForce AC'97 Audio
|-
| d200-d27f || nVidia Corporation nForce AC'97 Audio
|-
| e000-e007 || nVidia Corporation nForce Ethernet Controller
|-
| ff60-ff6f || nVidia Corporation nForce IDE
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
7c7519a4ebacc5ead6b261ea0aa99ff7bfd48290
6952
6951
2021-05-25T14:38:20Z
X86corez
2533
/* I/O port map */ Convert to the same table format as memory map.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|ACI (AC97) Registers
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable" style="text-align: center;"
! Device
! Retail Xbox Range
! Debug/Chihiro Range
|-
|DMA Channels 0-3
|colspan="2"|0x0000 - 0x001F
|-
|Master PIC
|colspan="2"|0x0020 - 0x003F
|-
|Timer 0
|colspan="2"|0x0040 - 0x0043
|-
|Timer 1
|colspan="2"|0x0050 - 0x0053
|-
|A20 Gate / Speaker
|colspan="2"|0x0060 - 0x006F
|-
|CMOS / RTC
|colspan="2"|0x0070 - 0x007F
|-
|DMA Page Address
|colspan="2"|0x0080 - 0x008F
|-
|Slave PIC
|colspan="2"|0x00A0 - 0x00BF
|-
|DMA Channels 4-7
|colspan="2"|0x00C0 - 0x00DF
|-
|FPU
|colspan="2"|0x00F0 - 0x00FF
|-
|IDE
|colspan="2"|0x01F0 - 0x01F7
|-
|vesafb
|colspan="2"|0x03C0 - 0x03DF
|-
|IDE
|colspan="2"|0x03F6 - 0x03F6
|-
|PCI Configuration Space
|colspan="2"|0x0CF8 - 0x0CFF
|-
|SMBus (I2C)
|colspan="2"|0x1000 - 0x100F
|-
|rowspan="2"|Modem (MC97)
|colspan="2"|0x1080 - 0x10FF
|-
|colspan="2"|0x1400 - 0x14FF
|-
|rowspan="2"|SMBus (I2C)
|colspan="2"|0xC000 - 0xC00F
|-
|colspan="2"|0xC200 - 0xC21F
|-
|rowspan="2"|ACI (AC97)
|colspan="2"|0xD000 - 0xD0FF
|-
|colspan="2"|0xD200 - 0xD27F
|-
|NIC (NVNet)
|colspan="2"|0xE000 - 0xE007
|-
|IDE
|colspan="2"|0xFF60 - 0xFF6F
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
f05e06000c1514c2429b8fbeda9a00ab02ee6183
6953
6952
2021-05-25T15:06:13Z
X86corez
2533
Add relevant links. Mark questionable I/O ports.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|[[ACI|ACI (AC97) Registers]]
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable" style="text-align: center;"
! Device
! Retail Xbox Range
! Debug/Chihiro Range
|-
|DMA Channels 0-3
|colspan="2"|0x0000 - 0x001F
|-
|Master PIC
|colspan="2"|0x0020 - 0x003F
|-
|[[Porting an Operating System to the Xbox HOWTO #Timer Frequency|PIT]]
|colspan="2"|0x0040 - 0x0043
|-
|Timer 1 {{FIXME|reason=What is this?}}
|colspan="2"|0x0050 - 0x0053
|-
|[[17 Mistakes Microsoft Made in the Xbox Security System #The Xbox Hardware|A20 Gate]] / [[MCPX #Pin L21: PC Speaker|Speaker]]
|colspan="2"|0x0060 - 0x006F
|-
|CMOS / RTC
|colspan="2"|0x0070 - 0x007F
|-
|DMA Page Address
|colspan="2"|0x0080 - 0x008F
|-
|Slave PIC
|colspan="2"|0x00A0 - 0x00BF
|-
|DMA Channels 4-7
|colspan="2"|0x00C0 - 0x00DF
|-
|FPU {{FIXME|reason=What is this?}}
|colspan="2"|0x00F0 - 0x00FF
|-
|IDE
|colspan="2"|0x01F0 - 0x01F7
|-
|vesafb {{FIXME|reason=Does XGPU expose I/O ports?}}
|colspan="2"|0x03C0 - 0x03DF
|-
|IDE {{FIXME|reason=Really? This is rather one of FDC ports}}
|colspan="2"|0x03F6 - 0x03F6
|-
|[[PCI|PCI Configuration Space]]
|colspan="2"|0x0CF8 - 0x0CFF
|-
|[[SMBus|SMBus (I2C)]]
|colspan="2"|0x1000 - 0x100F
|-
|rowspan="2"|Modem (MC97)
|colspan="2"|0x1080 - 0x10FF
|-
|colspan="2"|0x1400 - 0x14FF
|-
|rowspan="2"|[[SMBus|SMBus (I2C)]]
|colspan="2"|0xC000 - 0xC00F
|-
|colspan="2"|0xC200 - 0xC21F
|-
|rowspan="2"|[[ACI|ACI (AC97)]]
|colspan="2"|0xD000 - 0xD0FF
|-
|colspan="2"|0xD200 - 0xD27F
|-
|NIC (NVNet)
|colspan="2"|0xE000 - 0xE007
|-
|IDE
|colspan="2"|0xFF60 - 0xFF6F
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
022061c6f2d5467a35ce637f1dc7f4c3a04cc7fd
6954
6953
2021-05-25T15:11:34Z
X86corez
2533
/* I/O port map */ Fix PIC ports.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|[[ACI|ACI (AC97) Registers]]
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable" style="text-align: center;"
! Device
! Retail Xbox Range
! Debug/Chihiro Range
|-
|DMA Channels 0-3
|colspan="2"|0x0000 - 0x001F
|-
|Master PIC
|colspan="2"|0x0020 - 0x0021
|-
|[[Porting an Operating System to the Xbox HOWTO #Timer Frequency|PIT]]
|colspan="2"|0x0040 - 0x0043
|-
|Timer 1 {{FIXME|reason=What is this?}}
|colspan="2"|0x0050 - 0x0053
|-
|[[17 Mistakes Microsoft Made in the Xbox Security System #The Xbox Hardware|A20 Gate]] / [[MCPX #Pin L21: PC Speaker|Speaker]]
|colspan="2"|0x0060 - 0x006F
|-
|CMOS / RTC
|colspan="2"|0x0070 - 0x007F
|-
|DMA Page Address
|colspan="2"|0x0080 - 0x008F
|-
|Slave PIC
|colspan="2"|0x00A0 - 0x00A1
|-
|DMA Channels 4-7
|colspan="2"|0x00C0 - 0x00DF
|-
|FPU {{FIXME|reason=What is this?}}
|colspan="2"|0x00F0 - 0x00FF
|-
|IDE
|colspan="2"|0x01F0 - 0x01F7
|-
|vesafb {{FIXME|reason=Does XGPU expose I/O ports?}}
|colspan="2"|0x03C0 - 0x03DF
|-
|IDE {{FIXME|reason=Really? This is rather one of FDC ports}}
|colspan="2"|0x03F6 - 0x03F6
|-
|[[PCI|PCI Configuration Space]]
|colspan="2"|0x0CF8 - 0x0CFF
|-
|[[SMBus|SMBus (I2C)]]
|colspan="2"|0x1000 - 0x100F
|-
|rowspan="2"|Modem (MC97)
|colspan="2"|0x1080 - 0x10FF
|-
|colspan="2"|0x1400 - 0x14FF
|-
|rowspan="2"|[[SMBus|SMBus (I2C)]]
|colspan="2"|0xC000 - 0xC00F
|-
|colspan="2"|0xC200 - 0xC21F
|-
|rowspan="2"|[[ACI|ACI (AC97)]]
|colspan="2"|0xD000 - 0xD0FF
|-
|colspan="2"|0xD200 - 0xD27F
|-
|NIC (NVNet)
|colspan="2"|0xE000 - 0xE007
|-
|IDE
|colspan="2"|0xFF60 - 0xFF6F
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
819c1b899c79e3ce5576ed9f9fe09a136926934c
6955
6954
2021-05-25T15:16:34Z
X86corez
2533
/* I/O port map */ Add Super I/O and Serial ports.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|[[ACI|ACI (AC97) Registers]]
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable" style="text-align: center;"
! Device
! Retail Xbox Range
! Debug/Chihiro Range
|-
|DMA Channels 0-3
|colspan="2"|0x0000 - 0x001F
|-
|Master PIC
|colspan="2"|0x0020 - 0x0021
|-
|[[Super I/O]]
|N/A
|0x002E - 0x002F
|-
|[[Porting an Operating System to the Xbox HOWTO #Timer Frequency|PIT]]
|colspan="2"|0x0040 - 0x0043
|-
|Timer 1 {{FIXME|reason=What is this?}}
|colspan="2"|0x0050 - 0x0053
|-
|[[17 Mistakes Microsoft Made in the Xbox Security System #The Xbox Hardware|A20 Gate]] / [[MCPX #Pin L21: PC Speaker|Speaker]]
|colspan="2"|0x0060 - 0x006F
|-
|CMOS / RTC
|colspan="2"|0x0070 - 0x007F
|-
|DMA Page Address
|colspan="2"|0x0080 - 0x008F
|-
|Slave PIC
|colspan="2"|0x00A0 - 0x00A1
|-
|DMA Channels 4-7
|colspan="2"|0x00C0 - 0x00DF
|-
|FPU {{FIXME|reason=What is this?}}
|colspan="2"|0x00F0 - 0x00FF
|-
|IDE
|colspan="2"|0x01F0 - 0x01F7
|-
|vesafb {{FIXME|reason=Does XGPU expose I/O ports?}}
|colspan="2"|0x03C0 - 0x03DF
|-
|IDE {{FIXME|reason=Really? This is rather one of FDC ports}}
|colspan="2"|0x03F6 - 0x03F6
|-
|Serial (COM1)
|N/A
|0x03F8 - 0x03FF
|-
|[[PCI|PCI Configuration Space]]
|colspan="2"|0x0CF8 - 0x0CFF
|-
|[[SMBus|SMBus (I2C)]]
|colspan="2"|0x1000 - 0x100F
|-
|rowspan="2"|Modem (MC97)
|colspan="2"|0x1080 - 0x10FF
|-
|colspan="2"|0x1400 - 0x14FF
|-
|rowspan="2"|[[SMBus|SMBus (I2C)]]
|colspan="2"|0xC000 - 0xC00F
|-
|colspan="2"|0xC200 - 0xC21F
|-
|rowspan="2"|[[ACI|ACI (AC97)]]
|colspan="2"|0xD000 - 0xD0FF
|-
|colspan="2"|0xD200 - 0xD27F
|-
|NIC (NVNet)
|colspan="2"|0xE000 - 0xE007
|-
|IDE
|colspan="2"|0xFF60 - 0xFF6F
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
ac72744bc1e3b32753d99bb1cd9d0a5ab80191e0
6956
6955
2021-05-25T15:52:53Z
X86corez
2533
/* I/O port map */ Better descriptions.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|[[ACI|ACI (AC97) Registers]]
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable" style="text-align: center;"
! Device
! Retail Xbox Range
! Debug/Chihiro Range
|-
|DMA Channels 0-3
|colspan="2"|0x0000 - 0x001F
|-
|Master PIC
|colspan="2"|0x0020 - 0x0021
|-
|[[Super I/O|Super I/O Configuration]]
|N/A
|0x002E - 0x002F
|-
|[[Porting an Operating System to the Xbox HOWTO #Timer Frequency|PIT]]
|colspan="2"|0x0040 - 0x0043
|-
|Timer 1 {{FIXME|reason=What is this?}}
|colspan="2"|0x0050 - 0x0053
|-
|[[17 Mistakes Microsoft Made in the Xbox Security System #The Xbox Hardware|A20 Gate]] / [[MCPX #Pin L21: PC Speaker|Speaker]]
|colspan="2"|0x0060 - 0x006F
|-
|CMOS / RTC
|colspan="2"|0x0070 - 0x007F
|-
|DMA Page Address
|colspan="2"|0x0080 - 0x008F
|-
|Slave PIC
|colspan="2"|0x00A0 - 0x00A1
|-
|DMA Channels 4-7
|colspan="2"|0x00C0 - 0x00DF
|-
|FPU {{FIXME|reason=What is this?}}
|colspan="2"|0x00F0 - 0x00FF
|-
|IDE
|colspan="2"|0x01F0 - 0x01F7
|-
|vesafb {{FIXME|reason=Does XGPU expose I/O ports?}}
|colspan="2"|0x03C0 - 0x03DF
|-
|IDE {{FIXME|reason=Really? This is rather one of FDC ports}}
|colspan="2"|0x03F6 - 0x03F6
|-
|[[Super I/O|Super I/O Serial]]
|N/A
|0x03F8 - 0x03FF
|-
|[[PCI|PCI Configuration]]
|colspan="2"|0x0CF8 - 0x0CFF
|-
|[[SMBus|SMBus (I2C)]]
|colspan="2"|0x1000 - 0x100F
|-
|rowspan="2"|Modem (MC97)
|colspan="2"|0x1080 - 0x10FF
|-
|colspan="2"|0x1400 - 0x14FF
|-
|rowspan="2"|[[SMBus|SMBus (I2C)]]
|colspan="2"|0xC000 - 0xC00F
|-
|colspan="2"|0xC200 - 0xC21F
|-
|rowspan="2"|[[ACI|ACI (AC97)]]
|colspan="2"|0xD000 - 0xD0FF
|-
|colspan="2"|0xD200 - 0xD27F
|-
|NIC (NVNet)
|colspan="2"|0xE000 - 0xE007
|-
|IDE
|colspan="2"|0xFF60 - 0xFF6F
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
d576b897266fbe00b2793266d96a2738a9acacba
6957
6956
2021-05-26T16:40:52Z
X86corez
2533
/* I/O port map */ Fixes from AMD-768 Peripheral Bus Controller datasheet.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|[[ACI|ACI (AC97) Registers]]
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable" style="text-align: center;"
! Device
! Retail Xbox Range
! Debug/Chihiro Range
|-
|DMA Channels 0-3
|colspan="2"|0x0000 - 0x000F
|-
|Master PIC
|colspan="2"|0x0020 - 0x0021
|-
|[[Super I/O|Super I/O Configuration]]
|N/A
|0x002E - 0x002F
|-
|[[Porting an Operating System to the Xbox HOWTO #Timer Frequency|PIT]]
|colspan="2"|0x0040 - 0x0043
|-
|[[17 Mistakes Microsoft Made in the Xbox Security System #The Xbox Hardware|A20 Gate]] / [[MCPX #Pin L21: PC Speaker|Speaker]]
|colspan="2"|0x0060 - 0x006F
|-
|CMOS / RTC
|colspan="2"|0x0070 - 0x0073
|-
|DMA Page Address
|colspan="2"|0x0080 - 0x008F
|-
|Slave PIC
|colspan="2"|0x00A0 - 0x00A1
|-
|DMA Channels 4-7
|colspan="2"|0x00C0 - 0x00DF
|-
|FPU Error Control
|colspan="2"|0x00F0 - 0x00F1
|-
|IDE
|colspan="2"|0x01F0 - 0x01F7
|-
|vesafb {{FIXME|reason=Does XGPU expose I/O ports?}}
|colspan="2"|0x03C0 - 0x03DF
|-
|IDE {{FIXME|reason=Really? This is rather one of FDC ports}}
|colspan="2"|0x03F6 - 0x03F6
|-
|[[Super I/O|Super I/O Serial]]
|N/A
|0x03F8 - 0x03FF
|-
|[[PCI|PCI Configuration]]
|colspan="2"|0x0CF8 - 0x0CFF
|-
|[[SMBus|SMBus (I2C)]]
|colspan="2"|0x1000 - 0x100F
|-
|rowspan="2"|Modem (MC97)
|colspan="2"|0x1080 - 0x10FF
|-
|colspan="2"|0x1400 - 0x14FF
|-
|rowspan="2"|[[SMBus|SMBus (I2C)]]
|colspan="2"|0xC000 - 0xC00F
|-
|colspan="2"|0xC200 - 0xC21F
|-
|rowspan="2"|[[ACI|ACI (AC97)]]
|colspan="2"|0xD000 - 0xD0FF
|-
|colspan="2"|0xD200 - 0xD27F
|-
|NIC (NVNet)
|colspan="2"|0xE000 - 0xE007
|-
|IDE
|colspan="2"|0xFF60 - 0xFF6F
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
bc10e7b94ef84380ebfb6a16eb5e056f1c758f89
6958
6957
2021-05-26T16:50:18Z
X86corez
2533
/* I/O port map */ Add LPC PM address space.
wikitext
text/x-wiki
The Xbox has 64MB Memory. This could be expanded to 128MB of memory on boards of revision 1.0-1.4 (Boards of revision 1.0-1.4 have empty spots for the extra memory, but they were later removed on 1.6 boards) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.
The memory was shared between the CPU and GPU. On the retail Xbox, the [[Flash ROM]] and [[MCPX ROM]] are also mapped to memory at the top 16 MiB and the top 512 Bytes respectively. However on Debug Xboxes and Chihiro, only the Flash is mapped as they don't contain an MCPX ROM.
= Memory map =
{| class="wikitable" style="text-align: center;"
! Memory Type
! Retail Xbox Range
! Debug/Chihiro Range
|-
|Main Memory
|0x00000000 - 0x03FFFFFF
|0x00000000 - 0x07FFFFFF
|-
|[[GPU|GPU (NV2A) Registers]]
|colspan="2"|0xFD000000 - 0xFDFFFFFF
|-
|[[APU|APU Registers]]
|colspan="2"|0xFE800000 - 0xFE87FFFF
|-
|[[ACI|ACI (AC97) Registers]]
|colspan="2"|0xFEC00000 - 0xFEC00FFF
|-
|USB 0 Registers
|colspan="2"|0xFED00000 - 0xFED00FFF
|-
|USB 1 Registers
|colspan="2"|0xFED08000 - 0xFED08FFF
|-
|NIC (NVNet) Registers
|colspan="2"|0xFEF00000 - 0xFEF003FF
|-
|[[Flash ROM]]
|colspan="2"|0xFF000000 - 0xFFFFFFFF
|-
|[[MCPX ROM]]
|0xFFFFFE00 - 0xFFFFFFFF
|N/A
|}
= I/O port map =
{{FIXME|reason=Taken from the KVMBOX memorymap.txt, not confirmed}}
{| class="wikitable" style="text-align: center;"
! Device
! Retail Xbox Range
! Debug/Chihiro Range
|-
|DMA Channels 0-3
|colspan="2"|0x0000 - 0x000F
|-
|Master PIC
|colspan="2"|0x0020 - 0x0021
|-
|[[Super I/O|Super I/O Configuration]]
|N/A
|0x002E - 0x002F
|-
|[[Porting an Operating System to the Xbox HOWTO #Timer Frequency|PIT]]
|colspan="2"|0x0040 - 0x0043
|-
|[[17 Mistakes Microsoft Made in the Xbox Security System #The Xbox Hardware|A20 Gate]] / [[MCPX #Pin L21: PC Speaker|Speaker]]
|colspan="2"|0x0060 - 0x006F
|-
|CMOS / RTC
|colspan="2"|0x0070 - 0x0073
|-
|DMA Page Address
|colspan="2"|0x0080 - 0x008F
|-
|Slave PIC
|colspan="2"|0x00A0 - 0x00A1
|-
|DMA Channels 4-7
|colspan="2"|0x00C0 - 0x00DF
|-
|FPU Error Control
|colspan="2"|0x00F0 - 0x00F1
|-
|IDE
|colspan="2"|0x01F0 - 0x01F7
|-
|vesafb {{FIXME|reason=Does XGPU expose I/O ports?}}
|colspan="2"|0x03C0 - 0x03DF
|-
|IDE {{FIXME|reason=Really? This is rather one of FDC ports}}
|colspan="2"|0x03F6 - 0x03F6
|-
|[[Super I/O|Super I/O Serial]]
|N/A
|0x03F8 - 0x03FF
|-
|[[PCI|PCI Configuration]]
|colspan="2"|0x0CF8 - 0x0CFF
|-
|[[SMBus|SMBus (I2C)]]
|colspan="2"|0x1000 - 0x100F
|-
|rowspan="2"|Modem (MC97)
|colspan="2"|0x1080 - 0x10FF
|-
|colspan="2"|0x1400 - 0x14FF
|-
|[[PCI #00.01:0 - ISA Bridge|LPC PM]]
|colspan="2"|0x8000 - 0x80FF
|-
|rowspan="2"|[[SMBus|SMBus (I2C)]]
|colspan="2"|0xC000 - 0xC00F
|-
|colspan="2"|0xC200 - 0xC21F
|-
|rowspan="2"|[[ACI|ACI (AC97)]]
|colspan="2"|0xD000 - 0xD0FF
|-
|colspan="2"|0xD200 - 0xD27F
|-
|NIC (NVNet)
|colspan="2"|0xE000 - 0xE007
|-
|IDE
|colspan="2"|0xFF60 - 0xFF6F
|}
= Emulation =
Code for emulating the memory might consist of:
<pre>
#ifdef DEBUG || CHIHIRO
#define MEMORY_SIZE 128 * 1024 * 1024
int mcpx_active = 0;
#else
#define MEMORY_SIZE 64 * 1024 * 1024
int mcpx_active = 1;
#endif
#define FLASH_SIZE 256 * 1024
#define FLASH_MAP_SIZE 16 * 1024 * 1024
#define FLASH_MAP_ADDRESS (0xFFFFFFFF - FLASH_MAP_SIZE + 1)
#define MCPX_SIZE 0x200
#define MCPX_MAP_ADDRESS (0xFFFFFFFF - MCPX_MAP_SIZE + 1)
uint8_t memory[MEMORY_SIZE] = {0};
uint8_t flash[FLASH_SIZE] = {0};
uint8_t mcpx[MCPX_SIZE] = {0};
uint8_t get_memory_byte(uint32_t location) {
if (location < MEMORY_SIZE) {
return memory[location];
}
if (mcpx_active && location >= MCPX_MAP_ADDRESS) {
return mcpx[location - MCPX_MAP_ADDRESS];
}
if (location >= FLASH_MAP_ADDRESS) {
return flash[(location - FLASH_MAP_ADDRESS) % FLASH_SIZE];
}
printf("Memory in unspecified range: %08X\n", location);
return 0;
}
uint16_t get_memory_word(uint32_t location) {
return get_memory_byte(location + 1) << 8 | get_memory_byte(location);
}
uint32_t get_memory_dword(uint32_t location) {
return get_memory_word(location + 2) << 16 | get_memory_word(location);
}
void deactivate_mcpx() {
mcpx_active = 0;
}
</pre>
a2d74a0819f053d69125fa218d25d5a1bddc805e
File:SerialIOBoard.jpeg
6
4010
6959
2021-06-26T22:19:24Z
Codeasm
2480
The Super I/O board of a DVT4
wikitext
text/x-wiki
The Super I/O board of a DVT4
0da7e7fbad535862f83718624599438a475dca2c
Super I/O
0
3820
6960
6368
2021-06-26T22:25:05Z
Codeasm
2480
Finnaly added that image, a Super I/O board from a DVT4
wikitext
text/x-wiki
The Super I/O board is a feature of some [[Development Kits]]. The board is build around a SMSC LPC47M157 chip ([https://drive.google.com/uc?export=download&id=0BxOesalXbGtOanoxenlqQUh6Y0k Datasheet]) and interfaces with the Xbox via a ribbon cable connected to the [[LPC Debug Port]].
[[File:SerialIOBoard.jpeg|400px|thumb|right|Super I/O board from a DVT4]]
The board provides the following ports:
* RS232 (used for [[Kernel Debug | Kernel debugging]], not to be confused with [[Xbox Debug Monitor]])
unpopulated ports or functions are:
* PS/2 Mouse port{{citation needed}}
* PS/2 Keyboard port{{citation needed}}
* something MCPX (SMBus?){{citation needed}}
* Temp something (SMBus?){{citation needed}}
* Post code (SMBus?){{citation needed}}
* Flash-ROM / BIOS (like modchips, replaces onboard kernel?){{citation needed}}
== Schematic ==
Its a four layer board, layers 2 and 3 are filled on the entire board, probably ground and power planes.
north, or up in the next tables is up as written the layer numbers and silkscreen common direction.
The folowing main parts are populated on the board:
{| class="wikitable"
!| total
! Labels
! Description
|-
|1
| U1
| SMSC LPC47M157-NC (1996 )
|-
| 0
| U2
| unpopulated DIP24 MCU(?)
|-
|1
| U3
| MAX223EAI (0104, first week 2004?)
|-
|1
|Y2
|CMX-309FB B (14.3181Mhz standard Clock Oscillator )
|-
|1
|J7
|AMP rs232 Male connector
|-
|1
|J9
|16 pins male header (LPC bus)
|-
|5
|R1,R7,R10,R11,R12
|10Kohm smd resistor
|-
|7
|C10,C12,C13,C16,C17,C36,C37
|Bigger, probably NOT all the same caps
|-
|17
|C1,C2,C9,C15,C1?(8?),C21,C22,C23,C24,C25,C26,C28,C31,C32,C33,C34,C35
|Smaller, also, asuming not all the same
|}
The connections in the following tables are checked with the continuity test on a VOM(Multimeter).
but for now here are the listings of wich pin goes where:
=== U3 MAX223EAI [https://datasheets.maximintegrated.com/en/ds/MAX220-MAX249.pdf] ===
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 1
| T3OUT
|
|
|
|
|-
| 2
| T1OUT
|
|
|
|
|-
| 3
| T2OUT
|
|
|
|
|-
| 4
| R2IN
|
|
|
|
|-
| 5
| R2OUT
|
|
|
|
|-
| 6
| T2IN
|
|
|
|
|-
| 7
| T1IN
|
|
|
|
|-
| 8
| R1OUT
|
|
|
|
|-
| 9
| R1IN
|
|
|
|
|-
| 10
| GND
|
|
|
|
|-
| 11
| VCC
| Power
| 5V supply voltage
| J9 6
|
|-
| 12
| C1+
|
|
|
|
|-
| 13
| V+
|
|
|
|
|-
| 14
| C1-
|
|
|
|
|-
| 15
| T4OUT
|
|
|
|
|-
| 16
| R3IN
|
|
|
|
|-
| 17
| R3OUT
|
|
|
|
|-
| 18
| SHDN
|
|
|
|
|-
| 19
| EN
|
|
|
|
|-
| 20
| R4IN
|
|
|
|
|-
| 21
| R4OUT
|
|
|
|
|-
| 22
| T4IN
|
|
|
|
|-
| 23
| T3IN
|
|
|
|
|-
| 24
| R5OUT
|
|
|
|
|-
| 25
| R5IN
|
|
|
|
|-
| 26
| V-
|
|
|
|
|-
| 27
| C2-
|
|
|
|
|-
| 28
| C2+
|
|
|
|
|}
=== U1 SMsC LPC ic ===
Still lots to fill out here, but all connections required for kernel debugging via null-modem cable tied to TX/RX/GND have been accounted for.
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 6
| CLKI32
| Input
| 32.768kHz trickle clock input
| GND (C17)
| Disabled via GND
|-
| 7
| VSS
| Power
| Ground
| GND (C17)
|
|-
| 18
| VTR
| Power
| 3.3V standby voltage
| C17 bypass to 3.3V
| Connected to VCC because no wakeup functionality is required
|-
| 19
| CLOCKI
| Input
| 14.318MHz clock input
| Y2 3
|
|-
| 20
| LAD0
| I/O
| LPC address/data bus
| J9 11
| Multiplexed command, address and data bus.
|-
| 21
| LAD1
| I/O
| LPC address/data bus
| J9 10
| Multiplexed command, address and data bus.
|-
| 22
| LAD2
| I/O
| LPC address/data bus
| J9 8
| Multiplexed command, address and data bus.
|-
| 23
| LAD3
| I/O
| LPC address/data bus
| J9 7
| Multiplexed command, address and data bus.
|-
| 24
| LFRAME#
| Input
| Frame signal
| J9 3
| Indicates start of a new cycle and termination of broken cycle.
|-
| 26
| PCI_RESET#
| Input
| PCI reset
| J9 5
| Used as LPC interface reset.
|-
| 27
| LPCPD#
| Input
| Power down signal
| R7 (10k) pull-up to 3.3V
| Indicates that it should prepare for power to be shut down on the LPC interface. Tied high relying on PCI_RESET to do its job.
|-
| 29
| PCI_CLK
| Input
| PCI clock
| J9 1
|
|-
| 30
| SER_IRQ
| Output
| Serial interrupt requests
| J9 16
| Provides a serial interrupt request line for mouse/keyboard implementations of the IO board.
|-
| 31
| VSS
| Power
| Ground
| GND
|
|-
| 32
| GP10/J1B1
|
|
| Trace open?
|
|-
| 33
| GP11/J1B2
|
|
| Trace open?
|
|-
| 34
| GP12/J2B1
|
|
| Trace open?
|
|-
| 37
| GP15/J1Y
|
|
| Trace open?
|
|-
| 38
| GP16/J2X
|
|
| Trace open?
|
|-
| 39
| GP17/J2Y
|
|
| Trace open?
|
|-
| 40
| AVSS
| Power
| Analog ground
| GND
|
|-
| 42
| GP21/P16/nDS1
|
|
| Trace open?
|
|-
| 44
| VREF
| Power
| 3.3V reference voltage
| C2 bypass to 3.3V
| 5V or 3.3V used for the game port logic
|-
| 45
| GP24/SYSOPT
|
|
| R1 (10k) pull-down to GND
| Set the configuration base I/O address of 0x2E (R2 would be a pullup to 3.3V with a different configuration address)
|-
| 47
| GP26/MIDI_OUT
|
|
| Trace open?
|
|-
| 49
| GP61/LED2
|
|
| Trace open?
|
|-
| 51
| GP30/FAN_TACH2
|
|
| Trace open?
|
|-
| 53
| VCC
| Power
| 3.3V supply voltage
| C1 bypass to 3.3V
|
|-
| 55
| P33/FAN1
|
|
| Trace open?
|
|-
| 57
| KCLK
|
|
| Trace open?
|
|-
| 59
| MCLK
|
|
| Trace open?
|
|-
| 60
| VSS
| Power
| Ground
| GND
|
|-
| 61
| IRRX2/GP34
|
|
| Trace open?
|
|-
| 65
| VCC
| Power
| 3.3V supply voltage
| C9 bypass to 3.3V
|
|-
| 76
| VSS
| Power
| Ground
| GND (C10)
|
|-
| 84
| RXD1
| Input
|
| U3 8
U2 18
|
|-
| 85
| TXD1
| Output
|
| U3 6
U2 17
|
|-
| 86
| nDSR1
| Input
| Data set ready
| U3 ?
| Optional flow control
|-
| 87
| nRTS1
| Output
| Request to send
| U3 ?
| Optional flow control
|-
| 93
| VCC
| Power
|
| C21 bypass to 3.3V
|
|-
| 95
| RXD2
| Input
|
| Trace open?
|
|-
| 96
| TXD2
| Output
|
| Trace hidden under IC?
|
|-
| 97
| nDSR2
| Input
| Data set ready
| Trace open?
| Optional flow control
|-
| 98
| nRTS2
| Output
| Request to send
| Trace hidden under IC?
| Optional flow control
|-
| 101
| HVSS
| Power
|
| GND
|
|-
| 102
| HVCC
| Power
|
| C24 bypass to 3.3V
|
|-
| 103
| SDA
| I/O
|
| J9 14
|
|-
| 104
| SCLK
| I/O
|
| J9 13
|
|-
| 105
| A0/RESET#
|
|
| R10 (10k) pull-up to 3.3V
|
|-
| 111
| HVCC
| Power
|
| C32 bypass to 3.3V
|
|-
| 112
| HVSS
| Power
|
| GND
|
|-
| 121
| HVCC
| Power
|
| C33 bypass to 3.3V
|
|-
| 122
| HVCC
| Power
|
| C34 bypass to 3.3V
|
|-
| 125
| HVSS
| Power
|
| GND
|
|-
| 126
| HVSS
| Power
|
| GND
|
|-
| 127
| HVSS
| Power
|
| GND
|
|-
| 128
| HVSS
| Power
|
| GND
|
|}
=== J9 LPC header===
NOTE: version 1.3+ motherboards are missing the LFRAME signal which will need to be generated by an external CPLD [https://www.reddit.com/r/originalxbox/comments/7uo3lq/got_an_xbox_for_free_dvd_tray_wont_stop_ejecting/dtmqmn3/]
NOTE: version 1.5 motherboards are missing pins 2 (GND) and 9 (VCC3), and pins 12 (GND) and 15 (VCC3) haven't been confirmed to work correctly{{citation needed}}
{| class="wikitable"
!| Pin
! Name
! Type
! Description
! Termination(s)
! Notes
|-
| 1
| LCLK
| Output
| PCI clock
| U1 29
|
|-
| 2
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 3
| LFRAME#
| Output
| Frame signal
| U1 24
| Indicates start of a new cycle and termination of broken cycle.
|-
| 4
| ---
| ---
| ---
| ---
| Voided to ensure correct ribbon cable alignment.
|-
| 5
| LRST#
| Output
| PCI reset
| U1 26
| Used as LPC interface reset.
|-
| 6
| VCC5
| Power
| 5V power supply
| (see other parts)
| C12(e), C13(S), C15(S), U3 11
|-
| 7
| LAD3
| I/O
| LPC address/data bus
| U1 23
| Multiplexed command, address and data bus.
|-
| 8
| LAD2
| I/O
| LPC address/data bus
| U1 22
| Multiplexed command, address and data bus.
|-
| 9
| VCC3
| Power
| 3.3V power supply
| (see other parts)
|
|-
| 10
| LAD1
| I/O
| LPC address/data bus
| U1 21
| Multiplexed command, address and data bus.
|-
| 11
| LAD0
| I/O
| LPC address/data bus
| U1 20
| Multiplexed command, address and data bus.
|-
| 12
| VSS
| Power
| System ground
| (see other parts)
|
|-
| 13
| SCL
| I/O
| SMBus clock signal
| U1 104
|
|-
| 14
| SDA
| I/O
| SMBus data signal
| U1 103
|
|-
| 15
| VCC3
| Power
| 3.3V power supply
| (see other parts)
| Intended to be used for external IO board
|-
| 16
| L_SER_IRQ
| Input
| Serial interrupt requests
| U1 30
| Provides a serial interrupt request line for mouse/keyboard implementations of the IO board.
|}
== Related links ==
* [https://github.com/espes/xqemu/blob/xbox/hw/xbox/lpc47m157.c Super I/O emulation in XQEMU]
(SMBus?)
* [https://imgur.com/a/ROMYa Images (CC0 License) by Codeasm with detailed shots of the SuperIO board]
64634cdcac65a358020ab3df40edcca2db52de79
DVD Emulator
0
3821
6961
6883
2021-06-28T10:51:47Z
Codeasm
2480
added the manufacturer of the emulator board
wikitext
text/x-wiki
The DVD emulator is a feature of [[Development Kits]].
It enables a developer to create and test for DVD remastering.
This means deciding which files to store on the DVD and where on the disk to store them (layout).{{citation needed}}
this is then tested using the DVD emulator software, and hardware for loading speeds and possibly potential faults that could occur.
Its been developed by AMC, Applied Microsystems Corporation for microsoft
[https://web.archive.org/web/20000829084821/http://www.codejunkies.com:80/archive/microsystems_develop_xbox_dvd.htm]
[https://web.archive.org/web/20000815073611/http://www.amc.com/news/press/2000/7-21.html]
The Hardware required for this was a Developement kit, (with the DVD emulation board) some sort of scsi cable, and an XDK-Raptor card.{{citation needed}}
The complete kit, a Raptor PCI Scsi card and Hardisk was numbered: 940-75004 Rev.01
two or more versions of the PCI scsi card are known:
* 700-75307 Rev.01
* 700-75307 Rev 03 [https://assemblergames.com/threads/sealed-xbox-raptor-card-for-xdk-dvd-emu.41763/ Assemblergames](posibly same as rev1?)
The software was bundled with the official xdk software and a (40GB ?{{citation needed}})Hardisk was connected to the Raptorcard where the DVD mastering image was stored on.
This wasn't the fastest way to get an executable to the Xbox for development, and is useless for Homebrew.{{citation needed}}
{{FIXME|reason=Describe the purpose in more detail}}
Picture: [[File:https://i.imgur.com/VNFxuya.jpg]]
Next to serial debugging board: [[File:https://i.imgur.com/OZqxKyH.jpg]]
d71baf8a85752d75e918433761911f6a3d95af0a
Hardware Revisions
0
3669
6962
6882
2021-06-28T11:03:22Z
Codeasm
2480
/* THOMSON TGM600 */ Xbox news article
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
a news article officially anouncing thomson to be producing the DVD drive for the original xbox back in 20 Juli of 2000[https://web.archive.org/web/20000829085016/http://www.codejunkies.com:80/archive/thomson_supplier_for_xbox.htm]
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILIPS VAD6035/21 ====
Also named: VAD6011/21 appears to have no brand or part number on its large main controller, might be Cirrus Logic based on its size and use of a Philips secondary smaller MCU. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC DVD-ROM drive Pioneer 500M with the Philips firmware to be an Xbox DVD-ROM drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
bf64851e14c4467912ccae1a0dbbbd9b3ff8f4ab
6963
6962
2021-06-28T11:04:32Z
Codeasm
2480
/* THOMSON TGM600 */ Capitals
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
* Xbox 1.1
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout
** Switched to ATX Power connector
* Xbox 1.3
** Removed LFrame signal from LPC Port
* Xbox 1.4
** Updated Board Layout
** Switched to the "Focus" Video Encoder
* Xbox 1.5
** 3.3v and GND removed from LPC
* Xbox 1.6
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
There has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards.
They possibly never existed{{citation needed}}, but will otherwise be very rare. Production was halted and 1.4 was produced again{{citation needed|reason=Sooo.. do these exist or not?!}}.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original Xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
A news article officially announcing Thomson to be producing the DVD drive for the original Xbox back in 20 Juli of 2000[https://web.archive.org/web/20000829085016/http://www.codejunkies.com:80/archive/thomson_supplier_for_xbox.htm]
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILIPS VAD6035/21 ====
Also named: VAD6011/21 appears to have no brand or part number on its large main controller, might be Cirrus Logic based on its size and use of a Philips secondary smaller MCU. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC DVD-ROM drive Pioneer 500M with the Philips firmware to be an Xbox DVD-ROM drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
d8d2280973516b602d7c9a9b1648b869f7277f9b
MCPX
0
3671
6964
6746
2021-06-28T11:22:10Z
Codeasm
2480
Added Dolby news
wikitext
text/x-wiki
The MCPX is the southbridge chip of the Xbox chipset made by Nvidia. It contains the sound processors ([[APU]] and [[ACI]]) as well as the USB, PCI, IDE, etc, controllers [https://web.archive.org/web/20010418214256/http://www.ga-hardware.com:80/preview.cfm?id=NVIDIAMCP], [https://web.archive.org/web/20010410003338/http://www.nvnews.net/previews/mcpx/mcpx.shtml].
Dolby Laboratories anounced in April 2001, The xbox will feature a new "Dolby Interactive Content Encoder" of which the Xbox is the first console to get this.[https://web.archive.org/web/20010419091049/http://www.codejunkies.com:80/Xbox/news.asp?id=9422][https://www.ign.com/articles/2001/04/16/xbox-to-feature-dolby-digital-51-surround-sound-in-games]
== ROM ==
The MCPX is home to the secret [[MCPX ROM]].
== Pin L21: PC Speaker ==
The MCPX has a PC Speaker pin which can be controlled using [https://wiki.osdev.org/PC_Speaker the standard PC Speaker interface].
However, no actual speaker is connected to the pin, so while the signal exists, there will be no audible sound on a stock Xbox.
A speaker can be soldered to this pin in order to make the signal audible [https://www.youtube.com/watch?v=Te4MSskbBEE][https://github.com/0DaveX/beep/]
The original Microsoft code does not drive the PC Speaker at all, so this otherwise unused pin can also be used for inaudible forms of unidirectional communication.
<gallery mode="slideshow">
Image:XboxWithPcSpkr.jpg|'' ''
Image:XboxPcSpkrTrace.jpg|'' ''
Image:XboxPcSpkrSolderPoints.jpg|'' ''
</gallery>
== See Also ==
* [[NForce]]
* [http://siliconpr0n.org/archive/doku.php?id=azonenberg:nvidia:mcpx Die Inspection]
d6b8a3d8a10285fe5abc81f0c021abe0a1d9e2a1
Xbox Memory Unit
0
3790
6965
6944
2021-06-28T12:59:03Z
BinToss
2535
Add MadCatz Memory Card for Xbox
wikitext
text/x-wiki
The memory units are typically formatted with [[FATX]].
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes"
|-
| Microsoft Corp. Xbox Memory Unit (8MB) || 0x045e || 0x0280 || 8MB || Official one
|-
| ThrustMaster, Inc. || 0x044f || 0x0f0c || 8MB || Green logo Xbox and white "Trustmaster"
|-
| MadCatz Memory Card for Xbox || 0x0738 || 0x4507 || 8MB || Currently unknown if this originally had a front sticker
|}
== Unlicensed Xbox Memory Units ==
Some unlicensed Memory Units were made.
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
| Weltrend Semiconductor XBOX Xploder || 0x040b || 0x6520 || 8MB || Green sticker "Gamesaves"
|}
== Compatible USB sticks ==
Aside from the official licensed Memory Units, some standard USB storage devices can be reformatted as Xbox Memory Unit. (It is rumored that the capacity should not exceed 4GB)
However, not all devices are compatible, so the following table gives a list of known devices:
{| class="wikitable"
! Product name !! VID !! PID !! Capacity !! Notes
|-
|BESTRUNNER 256MB Speicherstick || 0xABCD || 0x1234 || 256MB ||
|-
|USB Mass Storage Device || 0x058F || 0x9381 || 64MB || Generic Mass Storage Device
|-
|[https://www.aliexpress.com/item/33007483881.html Generic Aliexpress Flash Drive] || 0xABCD || 0x1234 || 128MB||
|-
|}
== Protocol ==
=== USB Descriptor (Offical Memory Unit) ===
<pre>
Bus 002 Device 003: ID 045e:0280 Microsoft Corp. Xbox Memory Unit (8MB)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0280 Xbox Memory Unit (8MB)
bcdDevice 0.0e
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0020
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 60mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 66
bInterfaceProtocol 80
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
</pre>
=== USB Descriptor (MadCatz Memory Card 2001) ===
via [https://docs.microsoft.com/en-us/powershell/module/pnpdevice/get-pnpdeviceproperty?view=windowsserver2019-ps Get-PnpDeviceProperty cmdlet]
{| class="wikitable"
! InstanceId !! KeyName !! Type !! Data
|-
| USB\VID_0… || DEVPKEY_Device_HardwareIds || StringList || {USB\VID_0738&PID_4507&REV_000>, USB\VID_0738&PID_4507}
|-
| USB\VID_0… || DEVPKEY_Device_CompatibleIds || StringList || {USB\Class_08&SubClass_42&Prot_50, USB\Class_08&SubClass_4…
|-
| USB\VID_0… || DEVPKEY_Device_ConfigFlags || UInt32 || 64
|-
| USB\VID_0… || DEVPKEY_Device_LocationInfo || String || Port_#0003.Hub_#0006
|-
| USB\VID_0… || DEVPKEY_Device_PDOName || String || \Device\USBPDO-11
|-
| USB\VID_0… || DEVPKEY_Device_Capabilities || UInt32 || 4
|-
| USB\VID_0… || DEVPKEY_Device_BusTypeGuid || Guid || {9D7DEBBC-C85D-11D1-9EB4-006008C3A19A}
|-
| USB\VID_0… || DEVPKEY_Device_LegacyBusType || UInt32 || 15
|-
| USB\VID_0… || DEVPKEY_Device_BusNumber || UInt32 || 0
|-
| USB\VID_0… || DEVPKEY_Device_EnumeratorName || String || USB
|-
| USB\VID_0… || DEVPKEY_Device_Address || UInt32 || 3
|-
| USB\VID_0… || DEVPKEY_Device_PowerData || Binary || {56, 0, 0, 0…}
|-
| USB\VID_0… || DEVPKEY_Device_RemovalPolicy || UInt32 || 3
|-
| USB\VID_0… || DEVPKEY_Device_RemovalPolicyDefault || UInt32 || 3
|-
| USB\VID_0… || DEVPKEY_Device_InstallState || UInt32 || 2
|-
| USB\VID_0… || DEVPKEY_Device_BaseContainerId || Guid || {B4097C92-D7E7-11EB-B8AF-287FCF765565}
|-
| USB\VID_0… || DEVPKEY_Device_InstanceId || String || USB\VID_0738&PID_4507\6&4FE9DBE&2&3
|-
| USB\VID_0… || DEVPKEY_Device_DevNodeStatus || UInt32 || 25191424
|-
| USB\VID_0… || DEVPKEY_Device_ProblemCode || UInt32 || 28
|-
| USB\VID_0… || DEVPKEY_Device_ProblemStatus || NTStatus || 3221226640
|-
| USB\VID_0… || DEVPKEY_Device_Parent || String || USB\VID_045E&PID_0288\5&c1bd4d0&0&7
|-
| USB\VID_0… || DEVPKEY_Device_Siblings || StringList || {USB\VID_045E&PID_0289\6&4fe9dbe&2&1}
|-
| USB\VID_0… || DEVPKEY_Device_SafeRemovalRequired || Boolean || False
|-
| USB\VID_0… || DEVPKEY_Device_ContainerId || Guid || {B4097C92-D7E7-11EB-B8AF-287FCF765565}
|-
| USB\VID_0… || DEVPKEY_Device_IsPresent || Boolean || True
|-
| USB\VID_0… || DEVPKEY_Device_HasProblem || Boolean || True
|-
| USB\VID_0… || {83DA6326-97A6-4088-9453-A1923F573B29} 15 || Boolean || True
|-
| USB\VID_0… || DEVPKEY_Device_IsRebootRequired || Boolean || False
|-
| USB\VID_0… || DEVPKEY_Device_ReportedDeviceIdsHash || UInt32 || 1284365040
|-
| USB\VID_0… || DEVPKEY_Device_InLocalMachineContainer || Boolean || False
|-
| USB\VID_0… || DEVPKEY_Device_Stack || StringList || {\Driver\USBHUB3}
|-
| USB\VID_0… || {A8B865DD-2E3D-4094-AD97-E593A70C75D6} 26 || Boolean || False
|-
| USB\VID_0… || {3464F7A4-2444-40B1-980A-E0903CB6D912} 10 || UInt32 || 3
|-
| USB\VID_0… || DEVPKEY_Device_ConfigurationId || String ||
|-
| USB\VID_0… || {80497100-8C73-48B9-AAD9-CE387E19C56E} 6 || UInt32 || 0
|-
| USB\VID_0… || {83DA6326-97A6-4088-9453-A1923F573B29} 5 || Error || 3758096936
|-
| USB\VID_0… || {83DA6326-97A6-4088-9453-A1923F573B29} 10 || String || USB\VID_045E&PID_0288\5&c1bd4d0&0&7
|-
| USB\VID_0… || DEVPKEY_Device_InstallDate || FileTime || 2021-06-28 4:48:12 AM
|-
| USB\VID_0… || DEVPKEY_Device_FirstInstallDate || FileTime || 2021-06-28 4:48:12 AM
|-
| USB\VID_0… || DEVPKEY_Device_LastArrivalDate || FileTime || 2021-06-28 4:48:12 AM
|-
| USB\VID_0… || DEVPKEY_Device_LocationPaths || StringList || {PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(7)#USB(3), ACPI(_SB_)…
|}
== References ==
* [http://imgur.com/a/8QmDA Thrustmaster XBOX Memory Unit images by DarkGabz]
* [http://imgur.com/gallery/M0PZ6 3 XBOX memory units images by CodeAsm]
* [https://imgur.com/a/yOwZdUe MadCatz Memory Card for Xbox (2001-09-26 PCB)]
* [https://www.lukiegames.com/xbox-madcatz-memory-card-xbox-360-accessory MadCatz Memory Card for Xbox (2005-07-14 PCB)]
* [https://xbox.fandom.com/wiki/Mad_Catz_Memory_Card Mad Catz Memory Card on the Xbox Fandom wiki, for redundancy's sake]
0314ae20dde1f2d1c3bacf87947cecd3fa99b314
Soundtracks
0
3965
6966
6521
2021-08-08T16:36:30Z
Lycoder
2537
numSongGroups doesn't actually count the amount of song groups, but the amount of songs in the soundtrack, change to numSongs.
wikitext
text/x-wiki
The Xbox allows for soundstracks to be stored on the harddrive and played in-game. Music is copied from audio CDs using the dashboard and converted to WMA audio files. The notes gathered here are from decompiling StDB.dll from ''Xbox Soundtrack Manager''.
== Folder Structure ==
All soundtrack related data is stored in E:\TDATA\fffe0000. Songs are organized into groups of folders containing up to 6 WMA files. Zero-padded 4 decimal integers are used for the folder names, and zero-padded 8 decimal integers are used for the WMA file names. Metadata such as song title and which soundtrack a song belongs to is stored in the ST.DB file
== ST.DB ==
The ST.DB file contains information about soundtracks loaded on the Xbox. Up to 100 soundtracks with 500 songs each can be used. Each header and struct described below is padded to 512 bytes, and all values are stored as little-endian.
'''File Layout:'''
<pre>(start of file)
0000 Main Header
0200 Soundtrack Struct 1
0400 [Soundtrack Struct 2]
... (Zero-filled)
CA00 Song Group 1
CC00 [Song Group 2]
...
(end of file)
</pre>
=== Main Header ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00000001
|-
| int32
| numSoundtracks
|
|-
| int32
| nextSoundtrackId
|
|-
| int32
| soundtrackIds[100]
|
|-
| int32
| nextSongId
|
|-
| char
| padding[96]
|
|}
=== Soundtrack Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00021371
|-
| int32
| id
|
|-
| uint32
| numSongs
|
|-
| int32
| songGroupIds[84]
|
|-
| int32
| totalTimeMilliseconds
|
|-
| wchar
| name[64]
| Unicode{{FIXME|reason=Encoding? UCS-2?}} string
|-
| char
| padding[64]
|
|}
=== Song Group Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00031073
|-
| int32
| soundtrackId
|
|-
| int32
| id
|
|-
| int32
| padding
|
|-
| int32
| songId[6]
|
|-
| int32
| songTimeMilliseconds[6]
|
|-
| wchar
| songName[192]
| 6 Unicode{{FIXME|reason=Encoding? UCS-2?}} strings, each padded to 64 characters
|-
| char
| padding[64]
|
|}
== Default Encoding Settings ==
These are the encoding settings used by the dashboard when encoding WMA files:
{| class="wikitable"
! Key
! Value
|-
| Format
| WMA Version 2
|-
| Codec Description
| Windows Media Audio V8
|-
| Encoding Tool
| Windows Media Encoding Utility 8.0.0.403
|-
| Bit Rate
| 128 kbps
|-
| Channels
| 2
|-
| Sampling Rate
| 44.1 kHz
|-
| Bit Depth
| 16 bit
|}
The track number is added to the metadata.
8a62cc7c77162b343c999bdb98139cedb04e4690
6972
6966
2021-11-03T03:08:29Z
KaosEngineer
2482
/* Folder Structure */ soundtrack NNNN named subfolders are created in E:\TDATA\fffe0000\music\.
wikitext
text/x-wiki
The Xbox allows for soundstracks to be stored on the harddrive and played in-game. Music is copied from audio CDs using the dashboard and converted to WMA audio files. The notes gathered here are from decompiling StDB.dll from ''Xbox Soundtrack Manager''.
== Folder Structure ==
All soundtrack related data is stored in E:\TDATA\fffe0000\. Songs are organized into groups of folders containing up to 6 WMA files. Zero-padded 4 decimal integers are used for the folder names stored in a subfolder named music, and zero-padded 8 decimal integers are used for the WMA file names. Metadata such as song title and which soundtrack a song belongs to is stored in the ST.DB file
== ST.DB ==
The ST.DB file contains information about soundtracks loaded on the Xbox. Up to 100 soundtracks with 500 songs each can be used. Each header and struct described below is padded to 512 bytes, and all values are stored as little-endian.
'''File Layout:'''
<pre>(start of file)
0000 Main Header
0200 Soundtrack Struct 1
0400 [Soundtrack Struct 2]
... (Zero-filled)
CA00 Song Group 1
CC00 [Song Group 2]
...
(end of file)
</pre>
=== Main Header ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00000001
|-
| int32
| numSoundtracks
|
|-
| int32
| nextSoundtrackId
|
|-
| int32
| soundtrackIds[100]
|
|-
| int32
| nextSongId
|
|-
| char
| padding[96]
|
|}
=== Soundtrack Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00021371
|-
| int32
| id
|
|-
| uint32
| numSongs
|
|-
| int32
| songGroupIds[84]
|
|-
| int32
| totalTimeMilliseconds
|
|-
| wchar
| name[64]
| Unicode{{FIXME|reason=Encoding? UCS-2?}} string
|-
| char
| padding[64]
|
|}
=== Song Group Struct ===
{| class="wikitable"
! Type
! Description
! Comment
|-
| int32
| magic
| always 0x00031073
|-
| int32
| soundtrackId
|
|-
| int32
| id
|
|-
| int32
| padding
|
|-
| int32
| songId[6]
|
|-
| int32
| songTimeMilliseconds[6]
|
|-
| wchar
| songName[192]
| 6 Unicode{{FIXME|reason=Encoding? UCS-2?}} strings, each padded to 64 characters
|-
| char
| padding[64]
|
|}
== Default Encoding Settings ==
These are the encoding settings used by the dashboard when encoding WMA files:
{| class="wikitable"
! Key
! Value
|-
| Format
| WMA Version 2
|-
| Codec Description
| Windows Media Audio V8
|-
| Encoding Tool
| Windows Media Encoding Utility 8.0.0.403
|-
| Bit Rate
| 128 kbps
|-
| Channels
| 2
|-
| Sampling Rate
| 44.1 kHz
|-
| Bit Depth
| 16 bit
|}
The track number is added to the metadata.
2e9732bd8a418c53942c2d618abd4933b545844b
FATX
0
3708
6967
6621
2021-09-29T11:05:23Z
Teufelchen
2518
wikitext
text/x-wiki
The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
== Implementations ==
{| class="wikitable
|-
! Name
! Platform
! Read/Write
! Description
|-
| Official
| Xbox
| Read/Write
| Official FATX implementation by Microsoft
|-
| [https://github.com/mborgerson/fatx fatxfs]
| GNU/Linux, macOS
| Read-Only
| [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]-based implementation
|}
== Further Reading ==
* Most up to date: [https://hackmd.io/DXo0p8VnQLy3XQ7YR1Ny_w?view The FATX filesystem]
* Archive of the xbox-linux project from 2010: [https://web.archive.org/web/20100617022009/http://www.xbox-linux.org/wiki/Differences_between_Xbox_FATX_and_MS-DOS_FAT Differences between Xbox FATX and MS-DOS FAT]
* Private writings from 2002: [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
a706f00e80868180cc1414cca4ffdfd8babaac22
Xbe
0
3706
6968
6942
2021-10-06T17:13:26Z
Thrimbor
2531
Add info about the LibraryVersion Table
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. Standard windows format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from.
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== LibraryVersion Table ==
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0008
| Library Name
| 8-byte ASCII-name of this library. (i.e. "XAPILIB")
|-
! 0x0008
! 0x0002
| Major Version
| Major version for this library (2-byte WORD).
|-
! 0x000A
! 0x0002
| Minor Version
| Minor version for this library (2-byte WORD).
|-
! 0x000C
! 0x0002
| Build Version
| Build version for this library (2-byte WORD).
|-
! 0x000E
! 0x0002
| Library Flags
| Various flags for this library. The fields are:
QFEVersion = 0x1FFF (13-Bit Mask)
Approved = 0x6000 (02-Bit Mask)
Debug Build = 0x8000 (01-Bit Mask)
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format =
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
= Resources and links =
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
c30e4525d025a70aa23a8b32909a723ec84cbf2c
Xbox DVD Movie Playback Kit
0
3768
6969
6946
2021-10-15T02:39:27Z
Ryzee119
2519
Add DVD Playback IR dongle Firmware dump protocol
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they didn't have to pay the [[wikipedia:DVD Forum|DVD Forum]] (and apparently also Dolby) for every Xbox sold, but just for every DVD Remote kit sold[https://www.youtube.com/watch?v=gquAV8f7OAY&t=2059]. This allowed them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|-
| X08-25597 || Indonesia || 1.1 || 4 || 229790 Bytes || <code>1E6D7F4F526B56527447AA09EDA41FFF05665A16</code> ||
|-
| X08-96288-002 || Indonesia || 1.1 || 3 || 229790 Bytes || <code>0447373BF9326DFF95808CD028ED19FACD54C759</code> ||
|}
=== USB Protocol ===
==== USB Descriptor ====
<pre>
Bus 001 Device 002: ID 045e:0284 Microsoft Corp. Xbox DVD Playback Kit
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0284 Xbox DVD Playback Kit
bcdDevice 0.0a
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0022
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x00
(Missing must-be-set bit!)
(Bus Powered)
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 16
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 89
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
</pre>
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used (Always 0x0A with offical Microsoft remote)
// Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).
// A value close to 0x0040 is returned for continously holding a button.
// When holding, the value often goes back and forth between 0x0040 / 0x0041.
// It is unknown if the receiver / remote intentionally does this.
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
When holding two or more buttons at once on the remote the IR receiver stops sending interrupt transfers. The last transfer will be the first button pressed.
The keycodes read from an official Microsoft IR remote are as follows:
{| class="wikitable"
!Button
!data_low
!data_high
|-
|INFO
|0xC3
|0x0A
|-
|9
|0xC6
|0x0A
|-
|8
|0xC7
|0x0A
|-
|7
|0xC8
|0x0A
|-
|6
|0xC9
|0x0A
|-
|5
|0xCA
|0x0A
|-
|4
|0xCB
|0x0A
|-
|3
|0xCC
|0x0A
|-
|2
|0xCD
|0x0A
|-
|1
|0xCE
|0x0A
|-
|0
|0xCF
|0x0A
|-
|SELECT
|0x0B
|0x0A
|-
|UP
|0xA6
|0x0A
|-
|DOWN
|0xA7
|0x0A
|-
|RIGHT
|0xA8
|0x0A
|-
|LEFT
|0xA9
|0x0A
|-
|STOP
|0xE0
|0x0A
|-
|REVERSE
|0xE2
|0x0A
|-
|FORWARD
|0xE3
|0x0A
|-
|TITLE
|0xE5
|0x0A
|-
|PAUSE
|0xE6
|0x0A
|-
|PLAY
|0xEA
|0x0A
|-
|POWER
|0xD5
|0x0A
|-
|BACK
|0xD8
|0x0A
|-
|SKIP-
|0xDD
|0x0A
|-
|SKIP+
|0xDF
|0x0A
|-
|MENU
|0xF7
|0x0A
|-
|}
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit (PC Python based) or https://github.com/Ryzee119/Dongle_Dumper (Xbox homebrew).
The firmware locatedn on the DVD dongle is accessed over USB by a vendor specific control request.
The setup packet for the control transfer should have the below format:
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Field !! Value !! Notes
|-
| bmRequestType || 0xC1 || Device-to-host / Vendor / Interface.
|-
| bRequest || 1 or 2 || 1 = Request ROM info, 2 = Request ROM data.
|-
| wValue || What 1024 byte chunk || 0 = the first 1024 bytes, 1 = Second 1024 bytes etc.
|-
| wIndex || 1 (Normally) || Should point to the bInterfaceNumber that has a bInterfaceClass of 0x59. That happens to be 1 on most DVD Playback dongles.
|-
| wLength || Up to 1024 || Number of bytes to read from chunk set by wValue. Note the max value here is 1024. To read the next chunk, issue another setup packet with a new wValue.
|-
|}
bRequest = 1 can be used to obtain the header of the ROM. This is a 6 byte header in the form:
<pre>
typedef struct
{
uint16_t version; //The version of the embedded ROM
uint32_t rom_size; //In bytes
} xremote_info_t;
</pre>
The rom size can then be used with bRequest = 2 to obtain the entire ROM contents. It should be noted that the ROM header obtained with bRequest = 2 is also present at the first 6 bytes of the full ROM image. So it is possible to obtain the ROM header info with bRequest = 2 requesting the first 6 bytes.
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
8bae0875ccdff3e94288168f3103d9f6fa2a4c18
6974
6969
2022-01-26T16:42:20Z
JohnVeness
2539
/* References */ Added MS link
wikitext
text/x-wiki
[[File:Xbox-Remote-and-Receiver.jpg|thumb|200px|Remote and Receiver]]
==Introduction==
The DVD Movie Playback Kit contains 2 parts: A remote and a dongle for the Xbox{{FIXME|reason=One of these parts, or both, seem to have a model number PG8012?}}.
== Remote Control ==
=== Infrared interface ===
{{FIXME|reason=Missing info about light frequency, timing, possible preamble and more}}
{{FIXME|reason=The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/Xbox and all logic was extrapolated; it's entirely unconfirmed}}
<pre>
struct {
uint8_t check_high; // 8 bit check
uint8_t check_low__data_high; // 4 bit check, 4 bit data
uint8_t data_low; // 8 bit data
};
</pre>
The first part of the transfer consists of the negated data signal (<code>check</code>).
The data integrity can be confirmed by XOR-ing both parts:
<pre>
check = (check_high << 4) | check_low
data = (data_high << 8) | data_low
check ^ data = 0xFFF
</pre>
The <code>check</code>, which marks the start of the transfer{{FIXME|reason=There might be a preamble}}, always starts with 0b0101, therefore the <code>data</code> always starts with 0b1010.
== Dongle ==
The dongle contains a ROM with an XBE which provides some functions for the DVD playback application. However, the XBE is not standalone.
Why would they not just put this little < 512kiB library on the harddisk? Why another ROM which contains the program?
One could think it is to allow them to upgrade the application easily, but the real reason seems to be different: licensing. As the label on the back notes: "Made under license from Dolby Laboratories". By including the software in the DVD Remote kit, they didn't have to pay the [[wikipedia:DVD Forum|DVD Forum]] (and apparently also Dolby) for every Xbox sold, but just for every DVD Remote kit sold[https://www.youtube.com/watch?v=gquAV8f7OAY&t=2059]. This allowed them to keep the cost of the Xbox down.
Additionally the dongle contains an IR receiver to receive commands from the Remote control.
=== Known versions ===
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Part No. !! Manufactured in !! Version !! DVD Region !! ROM Size !! ROM SHA1 !! Notes
|-
| X08-25402 || Indonesia || 1.1 || 2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25402-002 || Indonesia || 1.1 ||2 || 229790 Bytes || <code>70d4b5f8e073b05610fba9e9617d7356196b61ff</code> ||
|-
| X08-25387 || Indonesia || || || || ||
|-
| X08-25387-002 || Indonesia || 1.1 || 1 || 229790 Bytes || <code>73814aa736d83d636380f5c6b1c291441b35354d</code> || Sticker: "2341P" on PCB
|-
| X08-25597 || Indonesia || 1.1 || 4 || 229790 Bytes || <code>1E6D7F4F526B56527447AA09EDA41FFF05665A16</code> ||
|-
| X08-96288-002 || Indonesia || 1.1 || 3 || 229790 Bytes || <code>0447373BF9326DFF95808CD028ED19FACD54C759</code> ||
|}
=== USB Protocol ===
==== USB Descriptor ====
<pre>
Bus 001 Device 002: ID 045e:0284 Microsoft Corp. Xbox DVD Playback Kit
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0284 Xbox DVD Playback Kit
bcdDevice 0.0a
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0022
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x00
(Missing must-be-set bit!)
(Bus Powered)
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 16
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 89
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
</pre>
==== Infrared signals ====
<!-- The following information has been derived from http://lirc.sourceforge.net/remotes/microsoft/lircd.conf.xbox + own research -->
When infrared signals are received from the Remote Control, they can be read using an interrupt transfer {{FIXME|reason=What interface etc?}}. Each USB payload is 6 bytes long:
<pre>
struct {
uint8_t unk; // always 0x00 (These could be length high bits?)
uint8_t length_low; // always 0x06
uint8_t data_low;
uint8_t data_high; // only lower 4 bit are used (Always 0x0A with offical Microsoft remote)
// Milliseconds since last press (will clamp to 0xFFFF when no button was pressed in a long time).
// A value close to 0x0040 is returned for continously holding a button.
// When holding, the value often goes back and forth between 0x0040 / 0x0041.
// It is unknown if the receiver / remote intentionally does this.
uint8_t timer_low;
uint8_t timer_high;
};
</pre>
When holding two or more buttons at once on the remote the IR receiver stops sending interrupt transfers. The last transfer will be the first button pressed.
The keycodes read from an official Microsoft IR remote are as follows:
{| class="wikitable"
!Button
!data_low
!data_high
|-
|INFO
|0xC3
|0x0A
|-
|9
|0xC6
|0x0A
|-
|8
|0xC7
|0x0A
|-
|7
|0xC8
|0x0A
|-
|6
|0xC9
|0x0A
|-
|5
|0xCA
|0x0A
|-
|4
|0xCB
|0x0A
|-
|3
|0xCC
|0x0A
|-
|2
|0xCD
|0x0A
|-
|1
|0xCE
|0x0A
|-
|0
|0xCF
|0x0A
|-
|SELECT
|0x0B
|0x0A
|-
|UP
|0xA6
|0x0A
|-
|DOWN
|0xA7
|0x0A
|-
|RIGHT
|0xA8
|0x0A
|-
|LEFT
|0xA9
|0x0A
|-
|STOP
|0xE0
|0x0A
|-
|REVERSE
|0xE2
|0x0A
|-
|FORWARD
|0xE3
|0x0A
|-
|TITLE
|0xE5
|0x0A
|-
|PAUSE
|0xE6
|0x0A
|-
|PLAY
|0xEA
|0x0A
|-
|POWER
|0xD5
|0x0A
|-
|BACK
|0xD8
|0x0A
|-
|SKIP-
|0xDD
|0x0A
|-
|SKIP+
|0xDF
|0x0A
|-
|MENU
|0xF7
|0x0A
|-
|}
==== Firmware download ====
See https://github.com/XboxDev/dump-dvd-kit (PC Python based) or https://github.com/Ryzee119/Dongle_Dumper (Xbox homebrew).
The firmware locatedn on the DVD dongle is accessed over USB by a vendor specific control request.
The setup packet for the control transfer should have the below format:
{| class="wikitable" <!-- Version is: "%X.%X" % (version >> 8, version & 0xFF) -->
! Field !! Value !! Notes
|-
| bmRequestType || 0xC1 || Device-to-host / Vendor / Interface.
|-
| bRequest || 1 or 2 || 1 = Request ROM info, 2 = Request ROM data.
|-
| wValue || What 1024 byte chunk || 0 = the first 1024 bytes, 1 = Second 1024 bytes etc.
|-
| wIndex || 1 (Normally) || Should point to the bInterfaceNumber that has a bInterfaceClass of 0x59. That happens to be 1 on most DVD Playback dongles.
|-
| wLength || Up to 1024 || Number of bytes to read from chunk set by wValue. Note the max value here is 1024. To read the next chunk, issue another setup packet with a new wValue.
|-
|}
bRequest = 1 can be used to obtain the header of the ROM. This is a 6 byte header in the form:
<pre>
typedef struct
{
uint16_t version; //The version of the embedded ROM
uint32_t rom_size; //In bytes
} xremote_info_t;
</pre>
The rom size can then be used with bRequest = 2 to obtain the entire ROM contents. It should be noted that the ROM header obtained with bRequest = 2 is also present at the first 6 bytes of the full ROM image. So it is possible to obtain the ROM header info with bRequest = 2 requesting the first 6 bytes.
=== Components ===
Different versions of the dongle seem to use different hardware internally.
==== X08-25387-002 (PCB: "X01469-100") ====
* U1 ATMEL AT43USB352M-AC{{FIXME|reason=Can't find datasheet.. only for AT43USB351M-AC and AT43USB353M-AC; both of which have various differences}}
* U2 TSOP-1556
* U3 X393121C{{FIXME|reason=What is this? a ROM? how large?}}
==== X08-25387 (PCB: "IR DONGLE REV B") ====
[[File:X08-25387-Sticker.jpeg|thumb|200px|X08-25387 Rev B Sticker]]
[[File:IR_DONGLEREVB-FRNT.jpeg|thumb|200px|Front PCB of X08-25387]]
* U3 MX23C4000TC-10
{{FIXME|reason=Didn't get rear components photographed yet}}73814aa736d83d636380f5c6b1c291441b35354d
==== Unknown version (PCB: "REV C.") ====
[[File:Xbox-linux-dvd-dongle-front.jpg|thumb|200px|Frontside]]
[[File:Xbox-linux-dvd-dongle-back.jpg|thumb|200px|Backside]]
* U1 92163 [https://web.archive.org/web/20100617020513/http://www.st.com/ STMicroelectronics] <[https://web.archive.org/web/20100617020513/http://www.st.com/stonline/books/pdf/docs/5521.pdf Datasheet]>
: This big square IC on the backside is the microcontroller. STMicroelectronics describes it as "8/16-BIT FULL SPEED USB MCU FOR COMPOSITE DEVICES WITH 16 ENDPOINTS, 20K ROM, 2K RAM, I 2 C, SCI, & MFT". Since the program resides inside in its ROM, it is almost impossible to extract the program from inside.
* U2 TSOP-1556 [https://web.archive.org/web/20100617020513/http://www.vishay.com/ Vishay Telefunken] <[https://web.archive.org/web/20100617020513/http://www.vishay.com/docs/82029/82029.pdf Datasheet]>
: This black box on the middle of the frontside is an integrated IR receiver. It filters the received infrared pulses and demodulates them. Its filter frequency is 56kHz, while 38kHz is standard for most remote controls. Therefore, chances are few other remotes will work with the Xbox receiver.
* U3 MX23C4000TC-10 [https://web.archive.org/web/20100617020513/http://www.macronix.com/ Macronix] <[https://web.archive.org/web/20100617020513/http://www.macronix.com/QuickPlace/hq/PageLibrary48256D9D002BA613.nsf/h_6057FA6682A90C3948256DCE0052D2D3/67DCB124F1BE4E7D48256DC50039AC31/$File/MX23C4000-4.2.pdf/?OpenElement Datasheet]>
: This wide TSOP IC on the frontside could be the most interesting of all. It is a 4MBit mask ROM.
* U4 HC574 [https://web.archive.org/web/20100617020513/http://www.ti.com/ Texas Instruments] <[https://web.archive.org/web/20100617020513/http://focus.ti.com/lit/ds/symlink/sn74hc574.pdf Datasheet]>
: This 20-pin standard logic IC is an octal D-flipflop, which splits the databus from the 92163 to 8 adress bits. This technique is very well known from the 8051 and other microcontrollers.
== References ==
* [https://ibb.co/album/cmr5rF Pictures of X08-25387-002 including internals]
* [https://web.archive.org/web/20100617020513/http://www.xbox-linux.org/wiki/DVD-IR_Internals DVD-IR Internals]
* [https://www.betaarchive.com/wiki/index.php/Microsoft_KB_Archive/817041 Microsoft KB817041 document "Xbox: Description of the DVD Movie Playback Kit"]
ffc92459206ae156859a8719daf875a0d9467f9a
Manufacturing Process
0
3912
6970
6343
2021-10-23T02:10:16Z
KaosEngineer
2482
Updated PlasticsToday URL to one that has the pictures and not 3 redirects on the Wayback Machine to access it.
wikitext
text/x-wiki
[[File:Manufacturing26.jpg|thumb|Sárvár, Hungary factory]]
The Xbox was manufactured by Flextronics in four locations throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; Doumen, China; and Taiwan{{FIXME|reason=City?}}.
== Serial Number ==
[[File:Serial-sticker.jpg|frame|An example of a serial number sticker]]
Every Xbox has a sticker on the bottom with a manufacturing date and a 12-digit serial number. The serial number encodes information about where and when the hardware was manufactured.
Using the pictured serial number as an example:
{| class="wikitable" style="text-align:center"
! Line !! Number !! Year !! Week !! Factory
|-
| 1 || 166356 || 2 || 09 || 03
|}
The first field is the factory production line number. The second field is the Xbox's number for the week (for the whole factory, not just the one line). The third field is the last digit of the year. The fourth field is the week of the year. Finally, the fifth field is the factory number. Mexico is 02, Hungary is 03, China is 05, and Taiwan is 06.
So this Xbox was the 166,356<sup>th</sup> to be manufactured in week 9 of the year 2002 on production line 1 in Sárvár, Hungary.
The bar code is the 12-digit serial number in standard [https://en.wikipedia.org/wiki/Code_39 Code 39] format.
== Timeline ==
{| class="wikitable"
! scope="col" |
! scope="col" | Mexico
! scope="col" | Hungary
! scope="col" | China
|-
! colspan=4 scope="col" | 2001
|-
! scope="row" | October
| colspan=2 | Production of 110V 1.0 Xboxes with Thomson DVD drives begins for USA/Canada.
| style="background:white" |
|-
! colspan=4 scope="col" | 2002
|-
! scope="row" | January
| Production begins for Japan.
| Production switches to 220V 1.0 models for Europe/Australia.
| style="background:white" |
|-
! scope="row" | April
| Production lines 1 and 6 are moved to China. 50% of new units now produced with Philips DVD drives.
|
| {{FIXME|reason=Which markets did China take up production for?}}
|-
! scope="row" | May
|
| Production stops after ~3 million units. All four production lines moved to China.
|
|-
! scope="row" | August
|
| style="background:white" |
| Production of the 220V 1.1 Xbox for Europe/Australia begins, with mostly Philips and sometimes Thomson DVD drives.
|-
! scope="row" | September
|
| style="background:white" |
| Most units now use Samsung DVD drives.
|-
! scope="row" | October
| Remaining four lines switched to version 1.1.
| style="background:white" |
|
|-
! scope="row" | November
|
| style="background:white" |
| Production extended to 110V USA/Canada/Japan models.
|-
! scope="row" | December
| Production ends after ~7 million units.
| style="background:white" |
| First line changes to version 1.2.
|-
! colspan=4 scope="col" | 2003
|-
! scope="row" | February
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.2.
|-
! scope="row" | March
| style="background:white" |
| style="background:white" |
| First line changes to version 1.3.
|-
! scope="row" | April
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.3.
|-
! scope="row" | July
| style="background:white" |
| style="background:white" |
| First line changes to version 1.4.
|-
! scope="row" | August
| style="background:white" |
| style="background:white" |
| First line changes to version 1.5.
|-
! colspan=4 scope="col" | 2004 {{FIXME|reason=Need timeline for 1.6 models.}}
|-
! scope="row" | ?
| style="background:white" |
| style="background:white" |
| ?
|}
== Hardware assembly ==
The Xbox was manufactured just like many other mass-produced electronic products. Printed circuit boards were made in bulk and populated by pick-and-place machines, the plastic case was formed by injection molding, and finally all of the pieces were assembled by hand on production lines.
The overall process didn't vary much between hardware revisions. The only notable change was related to the BIOS ROM. Up until version 1.6, the BIOS was flashed onto a TSOP ROM before being soldered to the motherboard. Revision 1.6 introduced the Xyclops chip, which integrated both the [[System Management Controller]] and the BIOS ROM on a single die. This meant the BIOS had to be flashed by the chip manufacturer instead of on the Xbox production line.
<gallery>
File:Manufacturing19.jpg|Plastic case molding & assembly.
File:Manufacturing18.jpg|Lids
File:Manufacturing9.jpg|Green jewels
File:Manufacturing10.jpg|Green jewels
File:Manufacturing16.jpg|Jewels are dispensed from hoppers.
File:Manufacturing7.jpg|Lid shield is positioned.
File:Manufacturing3.jpg|Lid is placed over shield.
File:Manufacturing5.jpg|Jewel is aligned...
File:Manufacturing4.jpg|...and then applied.
File:Manufacturing6.jpg|The tape is left on to prevent scratches.
File:Manufacturing15.jpg|Shield and drive caddies are installed in the bottom half.
File:Manufacturing20.jpg|Assembled cases are placed on pallets.
File:Manufacturing11.jpg
File:Manufacturing12.jpg
File:Manufacturing13.jpg
File:Manufacturing14.jpg|Cases ready for their electronics.
File:Manufacturing25.jpg|Components arrive in bulk at the assembly line.
File:Manufacturing26.jpg
File:Manufacturing24.jpg|Technicians assemble components.
File:Manufacturing23.jpg
File:Manufacturing22.jpg
File:Manufacturing27.jpg
File:Manufacturing28.jpg
File:Manufacturing21.jpg|Fully assembled consoles are placed on carts, ready for initialization.
</gallery>
== Software initialization ==
When a fully-assembled Xbox reached the end of the production line, it had a:
* valid BIOS image
* blank EEPROM
* blank, unlocked hard disk
To initialize the EEPROM and hard disk in the final stage of production, a technician would insert a DVD containing a setup program. The setup program, named default.xbe just like any other primary Xbox executable, was built by the XDK with the "allow eject" flag set and the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from the DVD, which does the following:
# Format the three swap partitions
# Copy XMTAXBOX.XBE from the DVD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
=== XMTAXBOX.XBE ===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
# Retrieve the EEPROM contents from a network server
# Retrieve the contents of the system and data partitions from a network server
# Lock the hard disk
# Run some self tests and send a report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<gallery>
File:Manufacturing30.jpg|Consoles are initialized by setup program.
File:Manufacturing33.jpg|Initialized consoles undergo final integration testing.
File:Manufacturing34.jpg
File:Manufacturing2.jpg
</gallery>
== Packing and shipping ==
<gallery>
File:Manufacturing17.jpg|Styrofoam inserts are prepared.
File:Manufacturing31.jpg|Consoles are packed into boxes.
File:Manufacturing32.jpg|Boxes are sealed...
File:Manufacturing29.jpg|...and loaded on pallets, ready for shipping.
</gallery>
== Videos ==
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Factory Tour Video (Sárvár, Hungary; 2002)] - Demonstrates almost the entire assembly process from start to finish (not including case manufacturing).
* [https://www.youtube.com/watch?v=_iR0eNuyUKI Flextronics Advertisement] - Contains still photos of the PCB manufacturing and testing processes.
== Further Reading ==
* [https://web.archive.org/web/20100617013616/http://www.ifm.eng.cam.ac.uk/ctm/idm/cases/xbox.html Case study - Microsoft Xbox], Innovation and Design Management, University of Cambridge
* O'Brien, J. [https://web.archive.org/web/20100617013616/http://www.wired.com/wired/archive/9.11/flex_pr.html The making of the Xbox], Wired, Issue 9.11, November 2001
* Shah, J. and Serant, C. [https://web.archive.org/web/20100617013616/http://www.ebnonline.com/story/OEG20020311S0076 Microsoft's Xbox sets supply chain standard], EBN Online, 11 March 2002
* Olavsrud, T. [https://web.archive.org/web/20100617013616/http://www.internetnews.com/bus-news/article.php/1129171 Flextronics relocates Xbox manufacturing facility], Internetnews.com, 15 May 2002
* Penz, B. [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-06/articles/16-06_27.asp Game Over? Xbox production heads east], Business Hungary, Vol 16 No 6, June 2002
* Carbone, J. [https://web.archive.org/web/20100617013616/http://manufacturing.net/pur/article/CA237778?stt=001&pubdate=08%2F15%2F02 Outsourcing the Xbox], Purchasing Magazine Online, 15 August 2002
* Neilley, R. [https://www.plasticstoday.com/molding-big-man-campus], PlasticsToday, 1 December 2001
== Credits ==
This article is adapted from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process Xbox Manufacturing Process] by Michael Steil. Its content is reproduced here under the [https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html GNU Free Documentation License 1.2].
Production line photos are from [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ Andy Rostad's gallery].
e6bcf998e394edfa1335382fd87e42d5f66c9f9d
6971
6970
2021-10-23T02:13:48Z
KaosEngineer
2482
Fixed link to show more than [1] but the article title.
wikitext
text/x-wiki
[[File:Manufacturing26.jpg|thumb|Sárvár, Hungary factory]]
The Xbox was manufactured by Flextronics in four locations throughout its lifetime: Guadalajara, Mexico; Sárvár, Hungary; Doumen, China; and Taiwan{{FIXME|reason=City?}}.
== Serial Number ==
[[File:Serial-sticker.jpg|frame|An example of a serial number sticker]]
Every Xbox has a sticker on the bottom with a manufacturing date and a 12-digit serial number. The serial number encodes information about where and when the hardware was manufactured.
Using the pictured serial number as an example:
{| class="wikitable" style="text-align:center"
! Line !! Number !! Year !! Week !! Factory
|-
| 1 || 166356 || 2 || 09 || 03
|}
The first field is the factory production line number. The second field is the Xbox's number for the week (for the whole factory, not just the one line). The third field is the last digit of the year. The fourth field is the week of the year. Finally, the fifth field is the factory number. Mexico is 02, Hungary is 03, China is 05, and Taiwan is 06.
So this Xbox was the 166,356<sup>th</sup> to be manufactured in week 9 of the year 2002 on production line 1 in Sárvár, Hungary.
The bar code is the 12-digit serial number in standard [https://en.wikipedia.org/wiki/Code_39 Code 39] format.
== Timeline ==
{| class="wikitable"
! scope="col" |
! scope="col" | Mexico
! scope="col" | Hungary
! scope="col" | China
|-
! colspan=4 scope="col" | 2001
|-
! scope="row" | October
| colspan=2 | Production of 110V 1.0 Xboxes with Thomson DVD drives begins for USA/Canada.
| style="background:white" |
|-
! colspan=4 scope="col" | 2002
|-
! scope="row" | January
| Production begins for Japan.
| Production switches to 220V 1.0 models for Europe/Australia.
| style="background:white" |
|-
! scope="row" | April
| Production lines 1 and 6 are moved to China. 50% of new units now produced with Philips DVD drives.
|
| {{FIXME|reason=Which markets did China take up production for?}}
|-
! scope="row" | May
|
| Production stops after ~3 million units. All four production lines moved to China.
|
|-
! scope="row" | August
|
| style="background:white" |
| Production of the 220V 1.1 Xbox for Europe/Australia begins, with mostly Philips and sometimes Thomson DVD drives.
|-
! scope="row" | September
|
| style="background:white" |
| Most units now use Samsung DVD drives.
|-
! scope="row" | October
| Remaining four lines switched to version 1.1.
| style="background:white" |
|
|-
! scope="row" | November
|
| style="background:white" |
| Production extended to 110V USA/Canada/Japan models.
|-
! scope="row" | December
| Production ends after ~7 million units.
| style="background:white" |
| First line changes to version 1.2.
|-
! colspan=4 scope="col" | 2003
|-
! scope="row" | February
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.2.
|-
! scope="row" | March
| style="background:white" |
| style="background:white" |
| First line changes to version 1.3.
|-
! scope="row" | April
| style="background:white" |
| style="background:white" |
| Last line changes to version 1.3.
|-
! scope="row" | July
| style="background:white" |
| style="background:white" |
| First line changes to version 1.4.
|-
! scope="row" | August
| style="background:white" |
| style="background:white" |
| First line changes to version 1.5.
|-
! colspan=4 scope="col" | 2004 {{FIXME|reason=Need timeline for 1.6 models.}}
|-
! scope="row" | ?
| style="background:white" |
| style="background:white" |
| ?
|}
== Hardware assembly ==
The Xbox was manufactured just like many other mass-produced electronic products. Printed circuit boards were made in bulk and populated by pick-and-place machines, the plastic case was formed by injection molding, and finally all of the pieces were assembled by hand on production lines.
The overall process didn't vary much between hardware revisions. The only notable change was related to the BIOS ROM. Up until version 1.6, the BIOS was flashed onto a TSOP ROM before being soldered to the motherboard. Revision 1.6 introduced the Xyclops chip, which integrated both the [[System Management Controller]] and the BIOS ROM on a single die. This meant the BIOS had to be flashed by the chip manufacturer instead of on the Xbox production line.
<gallery>
File:Manufacturing19.jpg|Plastic case molding & assembly.
File:Manufacturing18.jpg|Lids
File:Manufacturing9.jpg|Green jewels
File:Manufacturing10.jpg|Green jewels
File:Manufacturing16.jpg|Jewels are dispensed from hoppers.
File:Manufacturing7.jpg|Lid shield is positioned.
File:Manufacturing3.jpg|Lid is placed over shield.
File:Manufacturing5.jpg|Jewel is aligned...
File:Manufacturing4.jpg|...and then applied.
File:Manufacturing6.jpg|The tape is left on to prevent scratches.
File:Manufacturing15.jpg|Shield and drive caddies are installed in the bottom half.
File:Manufacturing20.jpg|Assembled cases are placed on pallets.
File:Manufacturing11.jpg
File:Manufacturing12.jpg
File:Manufacturing13.jpg
File:Manufacturing14.jpg|Cases ready for their electronics.
File:Manufacturing25.jpg|Components arrive in bulk at the assembly line.
File:Manufacturing26.jpg
File:Manufacturing24.jpg|Technicians assemble components.
File:Manufacturing23.jpg
File:Manufacturing22.jpg
File:Manufacturing27.jpg
File:Manufacturing28.jpg
File:Manufacturing21.jpg|Fully assembled consoles are placed on carts, ready for initialization.
</gallery>
== Software initialization ==
When a fully-assembled Xbox reached the end of the production line, it had a:
* valid BIOS image
* blank EEPROM
* blank, unlocked hard disk
To initialize the EEPROM and hard disk in the final stage of production, a technician would insert a DVD containing a setup program. The setup program, named default.xbe just like any other primary Xbox executable, was built by the XDK with the "allow eject" flag set and the region code set to 0x80000000 ("DEBUG").
When the Xbox kernel initializes, it checksums the EEPROM. If it fails, the Xbox will be in DEBUG mode, i.e. the region code is set to 0x80000000. With the region code set to this value, the kernel ignores it if the hard disk is not locked. Because the region code matches, the kernel will run the executable from the DVD, which does the following:
# Format the three swap partitions
# Copy XMTAXBOX.XBE from the DVD to the first cache partition and run it
Then the DVD can be ejected and put into the next Xbox.
=== XMTAXBOX.XBE ===
This XMTAXBOX.XBE is an XBE retail-signed for hard disk, also with the region code set to 0x80000000, that does the following:
# Retrieve the EEPROM contents from a network server
# Retrieve the contents of the system and data partitions from a network server
# Lock the hard disk
# Run some self tests and send a report to the server
A new Xbox still contains the file XMTAXBOX.XBE on the first cache partition, as well as some temporary files on the third one.
Xbox kernels since version 4034 have another backdoor that even works if the EEPROM check succeeds: If bit 30 of the media flag of an XBE is set, the condition of the hard disk is ignored as well. This change allows Microsoft to replace broken hard disks without replacing a valid EEPROM on an Xbox sent in for repair. Before this change, they had to rewrite the EEPROM whenever they replaced the drive.
<gallery>
File:Manufacturing30.jpg|Consoles are initialized by setup program.
File:Manufacturing33.jpg|Initialized consoles undergo final integration testing.
File:Manufacturing34.jpg
File:Manufacturing2.jpg
</gallery>
== Packing and shipping ==
<gallery>
File:Manufacturing17.jpg|Styrofoam inserts are prepared.
File:Manufacturing31.jpg|Consoles are packed into boxes.
File:Manufacturing32.jpg|Boxes are sealed...
File:Manufacturing29.jpg|...and loaded on pallets, ready for shipping.
</gallery>
== Videos ==
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Factory Tour Video (Sárvár, Hungary; 2002)] - Demonstrates almost the entire assembly process from start to finish (not including case manufacturing).
* [https://www.youtube.com/watch?v=_iR0eNuyUKI Flextronics Advertisement] - Contains still photos of the PCB manufacturing and testing processes.
== Further Reading ==
* [https://web.archive.org/web/20100617013616/http://www.ifm.eng.cam.ac.uk/ctm/idm/cases/xbox.html Case study - Microsoft Xbox], Innovation and Design Management, University of Cambridge
* O'Brien, J. [https://web.archive.org/web/20100617013616/http://www.wired.com/wired/archive/9.11/flex_pr.html The making of the Xbox], Wired, Issue 9.11, November 2001
* Shah, J. and Serant, C. [https://web.archive.org/web/20100617013616/http://www.ebnonline.com/story/OEG20020311S0076 Microsoft's Xbox sets supply chain standard], EBN Online, 11 March 2002
* Olavsrud, T. [https://web.archive.org/web/20100617013616/http://www.internetnews.com/bus-news/article.php/1129171 Flextronics relocates Xbox manufacturing facility], Internetnews.com, 15 May 2002
* Penz, B. [https://web.archive.org/web/20100617013616/http://www.amcham.hu/BusinessHungary/16-06/articles/16-06_27.asp Game Over? Xbox production heads east], Business Hungary, Vol 16 No 6, June 2002
* Carbone, J. [https://web.archive.org/web/20100617013616/http://manufacturing.net/pur/article/CA237778?stt=001&pubdate=08%2F15%2F02 Outsourcing the Xbox], Purchasing Magazine Online, 15 August 2002
* Neilley, R. [https://www.plasticstoday.com/molding-big-man-campus Molding is big man on this campus], PlasticsToday, 1 December 2001
== Credits ==
This article is adapted from [https://web.archive.org/web/20100617013616/http://www.xbox-linux.org/wiki/Xbox_Manufacturing_Process Xbox Manufacturing Process] by Michael Steil. Its content is reproduced here under the [https://www.gnu.org/licenses/old-licenses/fdl-1.2.en.html GNU Free Documentation License 1.2].
Production line photos are from [https://web.archive.org/web/20100608022830/http://andy.saturn9.ws:80/Photo%20Albums/Xbox%20Manufacturing%20Facility/ Andy Rostad's gallery].
af791e72e26662577f7733c61e7665039805aff3
Main Page/Header
0
3688
6973
6448
2022-01-12T19:22:58Z
Haxar
2485
Former freenode is now Libera.Chat; gitter link is decommissioned
wikitext
text/x-wiki
<div style="background-color:#e7eef6; border: 1px solid #ccc; color:#000; margin-top: 15px; margin-bottom: 10px; padding: 8px; text-align:center;">
<div style="font-size: 162%; border: none; margin: 0; padding:.1em;">Welcome to XboxDevWiki.net,</div>
<div style="font-size: 95%">a wiki dedicated to research of the original Microsoft Xbox.</div>
<div style="text-align:left;">
<hr>
XboxDevWiki is an effort to document the inner workings of the original Microsoft Xbox and Xbox-based SEGA Chihiro.
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.
Also check out the [https://github.com/xboxdev XboxDev GitHub organization] where we provide tools and code related to Xbox research and development.
<hr>
'''Want to help? Contact us!'''
This wiki is the place for all remaining Xbox projects to come together.
Please come chat with us in [https://discord.gg/WxJPPyz XboxDev on Discord] or in [irc://irc.libera.chat/xqemu #xqemu on Libera.Chat IRC] ([https://web.libera.chat/#xqemu Webchat]).
You'll also get the details for wiki account creation there.
</div>
</div>
e4d3a8d5c33561c67f6aa0fa8b28b41a2f797b20
Talk:Xbox DVD Movie Playback Kit
1
4011
6975
2022-01-31T09:35:55Z
JohnVeness
2539
Created page with "== Roms == I have an X08-25387 from which I could probably dump the ROM. Is there a repository somewhere to upload/store them? Also, what is the "Version" in the wiki table (a..."
wikitext
text/x-wiki
== Roms ==
I have an X08-25387 from which I could probably dump the ROM. Is there a repository somewhere to upload/store them? Also, what is the "Version" in the wiki table (always seems to be 1.1)? --[[User:JohnVeness|JohnVeness]] ([[User talk:JohnVeness|talk]]) 09:35, 31 January 2022 (UTC)
0d4e1dde1f289ff9af05bd2301d04ebb145c2b0c
XDVDFS
0
3906
6976
6295
2022-02-04T11:23:15Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
All games with xblayout > 4808 use a new random padding algorithm.
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2, but Microsoft upgraded their tool to use new random padding.
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4721 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
529b99f8d7c2f4c0b9d50284aa9384e5a2e163b3
6977
6976
2022-02-04T11:24:45Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
All games with xblayout > 4808 use a new random padding algorithm.
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2, but Microsoft upgraded their tool to use new random padding.
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4721 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
9b83ec7238474cb36d9706247c83f9eedaa835d5
6978
6977
2022-02-04T11:25:17Z
Qubits
2540
/* Wave 3 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
All games with xblayout > 4808 use a new random padding algorithm.
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4721 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
455c64a82bfb4d8af0142f864458fbf79e9bbc37
6979
6978
2022-02-04T11:27:03Z
Qubits
2540
/* Version 3926 - 4808 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
All games with xblayout > 4808 use a new random padding algorithm.
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
bb5d56da022a776e0cce26e2c15649ffb2305840
6980
6979
2022-02-09T08:19:59Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
All games with xblayout > 4808 use a new random padding algorithm.
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (Europe) (Rev 1)
** xblayout version: 1.0.4721.1 (new algorithm)
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
e0747cca3a94f54b3b164350a9a2e2e9901ab170
6981
6980
2022-02-09T10:04:47Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
All games with xblayout > 4808 use a new random padding algorithm.
Microsoft generated the final image.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Classic)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
3ce172f8a070ec59bed8ce331beae96cb9b267ea
6982
6981
2022-02-09T10:07:54Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Classic)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
f2863f93ef35f31af1ef35fd0858a2e02a38cf5f
6983
6982
2022-02-09T10:45:17Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
fc99b4f91c1db97667230b05cf8b8b2fcb7af971
6984
6983
2022-02-09T10:47:02Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
11fed878ddfc42ed3ef8665ef73aada2336ad947
Xboxen Info
0
4006
6985
6922
2022-02-13T22:39:27Z
Useruser
2541
Add Chihiro info, taken from a single row power connector Chihiro, it's likely the dual row will have different values
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
|
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| ?
| ?
| ?
| ?
| "1.2"
| ?
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 461532733706
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro (Single Row)"
| 346301512362
| N
| Andy
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCPX X2
| ?
| ?
| "Development Kit"
| Y
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
174431fb82809a59b96c6c72644229130345dff9
File:14305-xbox-development-kit@800x600min.jpg
6
4012
6986
2022-02-14T20:19:08Z
Useruser
2541
playright dvt3 1
wikitext
text/x-wiki
playright dvt3 1
b37b326624d2d0585998555497397cda40293245
File:14306-xbox-development-kit@800x600min.jpg
6
4013
6987
2022-02-14T20:19:28Z
Useruser
2541
playright dvt3 2
wikitext
text/x-wiki
playright dvt3 2
4aa264ff77403c74b8753fdac558477afac709aa
File:14307-xbox-development-kit@800x600min.jpg
6
4014
6988
2022-02-14T20:20:08Z
Useruser
2541
playright dvt3 3
wikitext
text/x-wiki
playright dvt3 3
f6aab7e705e61ce93fab1f3bc7e99d473390aeac
File:14308-xbox-development-kit@800x600min.jpg
6
4015
6989
2022-02-14T20:20:31Z
Useruser
2541
playright dvt3 4
wikitext
text/x-wiki
playright dvt3 4
6fc61510951e86ced0c0cd8d6e8ba03a64251a76
File:14309-xbox-development-kit@800x600min.jpg
6
4016
6990
2022-02-14T20:20:52Z
Useruser
2541
playright dvt3 5
wikitext
text/x-wiki
playright dvt3 5
6ba13b697a8a64d730ad52336f1cc561a8b483bd
File:14310-xbox-development-kit@800x600min.jpg
6
4017
6991
2022-02-14T20:21:14Z
Useruser
2541
playright dvt3 6
wikitext
text/x-wiki
playright dvt3 6
d04fb00fdb59bc7d3899f627f1290f99e1fa9b76
File:14311-xbox-development-kit@800x600min.jpg
6
4018
6992
2022-02-14T20:21:36Z
Useruser
2541
playright dvt3 7
wikitext
text/x-wiki
playright dvt3 7
6de386092b2b5503d27ecd1466ed017b34f9c527
File:14312-xbox-development-kit@800x600min.jpg
6
4019
6993
2022-02-14T20:22:01Z
Useruser
2541
playright dvt3 8
wikitext
text/x-wiki
playright dvt3 8
dffb5990003f43250da261589a858c284e0fa68e
File:19199-xbox-development-kit@800x600min.jpg
6
4020
6994
2022-02-14T20:23:49Z
Useruser
2541
playright dvt3 9
wikitext
text/x-wiki
playright dvt3 9
d1f13e16837e8eaa514943ec12d111466104e002
File:Battery6rx.jpg.5f52d09ea4518af8070c4d0d58a1f267.jpg
6
4021
6995
2022-02-14T20:26:03Z
Useruser
2541
random ag poster dvt3 1
wikitext
text/x-wiki
random ag poster dvt3 1
65a7da87a06c19dbc9cc7c47b670b1edc0636ba4
File:Full9vl.jpg.9e6cdc85092434ca85f349459e7a0337.jpg
6
4022
6996
2022-02-14T20:26:19Z
Useruser
2541
random ag poster dvt3 2
wikitext
text/x-wiki
random ag poster dvt3 2
2991d590d63b5cc33f9aa651e3f9130005f5037d
File:Full29du.jpg.21e2b9917c7441d9ba55d30169c1ad3b.jpg
6
4023
6997
2022-02-14T20:26:36Z
Useruser
2541
random ag poster dvt3 3
wikitext
text/x-wiki
random ag poster dvt3 3
805c6e93267cc42b22a6e368c93dec52409a943a
File:5zJDKAd.jpg
6
4024
6998
2022-02-14T20:27:08Z
Useruser
2541
Syclopse dvt3 1
wikitext
text/x-wiki
Syclopse dvt3 1
0e61d25c515e4644220dbdb3e443aaad9f9307db
File:FfxmT9R.jpg
6
4025
6999
2022-02-14T20:27:24Z
Useruser
2541
Syclopse dvt3 2
wikitext
text/x-wiki
Syclopse dvt3 2
d589c51c165bec75ca24981f8de4a4c81b7b5f70
File:IGjgamj.jpg
6
4026
7000
2022-02-14T20:27:59Z
Useruser
2541
Syclopse dvt3 3
wikitext
text/x-wiki
Syclopse dvt3 3
b8bfe36c3639887adc4130d6e1161abf4ac8df95
File:Krf2YCJ.jpeg
6
4027
7001
2022-02-14T20:28:42Z
Useruser
2541
Syclopse dvt3 4
wikitext
text/x-wiki
Syclopse dvt3 4
565400be49fe84822ebed14946f764e4f85b1a06
File:Obzm4Yh.jpg
6
4028
7002
2022-02-14T20:29:05Z
Useruser
2541
Syclopse dvt3 5
wikitext
text/x-wiki
Syclopse dvt3 5
345304fee121fcdbeca40cc78bf1721bcf69f666
File:ONTRHQX-min.jpg
6
4029
7003
2022-02-14T20:31:07Z
Useruser
2541
Syclopse dvt3 6
wikitext
text/x-wiki
Syclopse dvt3 6
4c7176fbac432617d45c70e6d8ba9e21022770fd
File:PqOE4JK.jpg
6
4030
7004
2022-02-14T20:31:36Z
Useruser
2541
Syclopse dvt3 7
wikitext
text/x-wiki
Syclopse dvt3 7
9919d806471fa4223159361b0575fa88d1d3f8bb
File:PZ16zsL.jpg
6
4031
7005
2022-02-14T20:32:07Z
Useruser
2541
Syclopse dvt3 8
wikitext
text/x-wiki
Syclopse dvt3 8
5338574151b99983ef9c179a442b4909e5b921b2
File:WavX4dB.jpg
6
4032
7006
2022-02-14T20:32:37Z
Useruser
2541
Syclopse dvt3 9
wikitext
text/x-wiki
Syclopse dvt3 9
e73e6a063bc85b42940463535ec28162c92c10a3
File:WsJBnxr.jpg
6
4033
7007
2022-02-14T20:33:29Z
Useruser
2541
Syclopse dvt3 10
wikitext
text/x-wiki
Syclopse dvt3 10
dc50ed6397885f9b2dbc81d4b232e40a59201aff
Xboxen Info
0
4006
7008
6985
2022-02-14T20:42:01Z
Useruser
2541
model was in the wrong spot, and we need a better 1.3 run
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| ?
| ?
| ?
| ?
| "1.2"
| ?
| N
|
|-
| ?
| ?
| ?
| ?
| "1.3"
| ?
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro (Single Row)"
| 346301512362
| N
| Andy
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCPX X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
284c2aa2d1f9da9bf03ed025712088ccca8f496d
7012
7008
2022-02-24T02:55:05Z
Useruser
2541
add acceptable 1.3
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| ?
| ?
| ?
| ?
| "1.2"
| ?
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| N
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro (Single Row)"
| 346301512362
| N
| Andy
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCPX X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
735b0dd085c41c53951ead6f04708eea3f950ee5
7014
7012
2022-02-24T18:50:51Z
Useruser
2541
Add pre-launch debug kit
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| ?
| ?
| ?
| ?
| "1.2"
| ?
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| N
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| DXF
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro (Single Row)"
| 346301512362
| N
| Andy
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCPX X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
62884e35bfbd78ea179466a056a18555f4154d52
7015
7014
2022-02-24T18:52:36Z
Useruser
2541
cato's debug is a really early machine, aug 01 and has a MCP X2 NOT MCPX X2
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| ?
| ?
| ?
| ?
| "1.2"
| ?
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| N
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro (Single Row)"
| 346301512362
| N
| Andy
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCPX X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
098ad8778e1a3469fdea82a4dc0005ee28505d54
7017
7015
2022-02-25T02:00:56Z
Useruser
2541
add acceptable 1.2
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| N
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| N
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro (Single Row)"
| 346301512362
| N
| Andy
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCPX X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
5a955a1a7207f4bfe727c92f035ec60741ca17bc
7018
7017
2022-02-25T02:06:28Z
Useruser
2541
wikitext
text/x-wiki
Need a confirmed 1.2 kit (would accept someone testing with a device which requires lframe, missing "Development Kit" boxes - would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| N
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
| N
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| N
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| N
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| N
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| N
| dracc
|-
| -
| -
| -
| -
| -
| -
| -
| -
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 600370522902
| Y
| DarkGabbz "1.0 debug"
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro (Single Row)"
| 346301512362
| N
| Andy
|}
Some earlier revisions and ones we can't easily more identify.
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a driveby and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
d387ec057df2f83a8df24e8d939e9c10257344c4
7019
7018
2022-02-25T09:39:17Z
Useruser
2541
remodel
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.2"
| ?
|
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
df07200f319f8a0f3bf7b76342a533e2d7b14693
7020
7019
2022-02-25T09:53:16Z
Useruser
2541
add a 1.2 debug box, is smc rev correct?
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 604644435005
| Haguero
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
564656b00f8f48f41db594fee550f5121e657cc5
7021
7020
2022-02-26T05:33:46Z
Useruser
2541
Undo revision 7020 by [[Special:Contributions/Useruser|Useruser]] ([[User talk:Useruser|talk]])
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.2"
| ?
|
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
df07200f319f8a0f3bf7b76342a533e2d7b14693
7022
7021
2022-02-28T21:24:16Z
Useruser
2541
Add another pre launch debug kit
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.2"
| ?
|
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
e13fb1e14c8768e0282fbc42dec58d78bf4927bb
7024
7022
2022-03-03T02:23:34Z
Useruser
2541
catawalks board says MCPX X2, surprising, odd board
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.2"
| ?
|
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
50cf200178dd9a2a5d6dcf369d7d3d600d2e8749
7033
7024
2022-03-20T02:31:24Z
Useruser
2541
doom has another weird box, machine was made in aug of 01, NULL SN not 0's.
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.2"
| ?
|
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
405eadfe8e1aae649afbd9168b04317986a25fa6
7034
7033
2022-03-21T23:46:38Z
Useruser
2541
Add xbox7887's 1.2 debug kit
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| ?
| ?
| XboxSurgeon's 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo
|}
8c699a5dceff32a53acda1c95ab6867ddbddd613
7035
7034
2022-03-21T23:57:10Z
Useruser
2541
more info about '
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo | xbox7887
|}
50b969fbdf74408eaea6113807b76748a5703089
7036
7035
2022-03-21T23:57:59Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC.
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
865c8928a36910bf3dbd6cb793bfd928e4fdb100
7039
7036
2022-05-18T19:45:56Z
Doom
2542
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
a6a2668aadb06921ecebc679b903b7d0e9373a3f
7041
7039
2022-06-29T22:16:55Z
Doom
2542
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| ?
| ?
| ?
| ?
| "Chihiro - Dual row connector"
| ?
|
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| Y
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
6cbb8a564eb84defe7c7c584606aa5af2ac64d9f
XDVDFS
0
3906
7009
6984
2022-02-15T21:56:31Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
045674dde5a465cb95d3a691af8b6dae6ee3b036
7010
7009
2022-02-17T22:24:21Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
e6a96ce5f55059c73d6c236be5d4d56b18f1ae0b
7011
7010
2022-02-22T09:44:03Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
1e20957bb826f8943c663fb08394a3360f922921
7023
7011
2022-03-02T12:49:29Z
Qubits
2540
/* Wave 2 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
32 sectors which are zero-filled.
The Volume descriptor is 4096 bytes, but split into 2x 2048 sections.
* '''Section 1:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first data is the magic at sector 32. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA), Syberia (USA, Europe)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
c20af2bf7b91bc113e68c655210c79ddcdc28d70
7025
7023
2022-03-06T07:03:02Z
Qubits
2540
/* Volume descriptor */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
The Volume descriptor Sector #32 and #33 of the game partition.
* '''Section 1:''' The first 20 Bits is the magic. It is always "MICROSOFT*XBOX*MEDIA". {{FIXME|reason=How does this work?}}
* '''Section 2:''' The first 24 Bits is the magic. It is always "XBOX_DVD_LAYOUT_TOOL_SIG". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA), Syberia (USA, Europe)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
abd600ff5751d8419a601a35291f4a7d8cf8d051
7026
7025
2022-03-06T07:11:22Z
Qubits
2540
/* Volume descriptor */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
The Volume descriptor Sector #32 and #33 of the game partition.
* '''Sector #32:'''
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0x0 || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|-
|0x14 || u32 || Root Directory Table Sector || Multiply with 0x800 for offset
|-
|0x18 || u32 || Root Directory Table Size || Size in bytes. Always multiple of 0x800
|-
|0x1C || u64 || || Timestamp
|-
|0x7EC || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|}
* '''Sector #33:''' The first 24 Bits is the magic. It is always "XBOX_DVD_LAYOUT_TOOL_SIG". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA), Syberia (USA, Europe)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
a70b13b677e4d4a4f60ef1c86907f9ee58f24f24
7027
7026
2022-03-06T07:15:17Z
Qubits
2540
/* Volume descriptor */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
The Volume descriptor Sector #32 and #33 of the game partition.
* '''Sector #32:'''
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0x0 || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|-
|0x14 || u32 || Root Directory Table Sector || Multiply with 0x800 for offset
|-
|0x18 || u32 || Root Directory Table Size || Size in bytes. Always multiple of 0x800
|-
|0x1C || u64 || || Timestamp (LDAP/Win32 FILETIME)
|-
|0x7EC || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|}
* '''Sector #33:''' The first 24 Bits is the magic. It is always "XBOX_DVD_LAYOUT_TOOL_SIG". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA), Syberia (USA, Europe)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
e1afbe2b29ea41b8b252c66d95e7cfae202258e6
7028
7027
2022-03-06T09:08:23Z
Qubits
2540
/* Version 3926 - 4808 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
The Volume descriptor Sector #32 and #33 of the game partition.
* '''Sector #32:'''
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0x0 || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|-
|0x14 || u32 || Root Directory Table Sector || Multiply with 0x800 for offset
|-
|0x18 || u32 || Root Directory Table Size || Size in bytes. Always multiple of 0x800
|-
|0x1C || u64 || || Timestamp (LDAP/Win32 FILETIME)
|-
|0x7EC || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|}
* '''Sector #33:''' The first 24 Bits is the magic. It is always "XBOX_DVD_LAYOUT_TOOL_SIG". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA), Syberia (USA, Europe)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
Edit: This assumption is not true, at least not for all instances. For example, all region variants of Conker Live & Reloaded share the same padding stream.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
4e3d8c4798a7e1701b958b78dcbff486136f8027
7029
7028
2022-03-06T09:09:06Z
Qubits
2540
/* Version 3926 - 4808 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
The Volume descriptor Sector #32 and #33 of the game partition.
* '''Sector #32:'''
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0x0 || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|-
|0x14 || u32 || Root Directory Table Sector || Multiply with 0x800 for offset
|-
|0x18 || u32 || Root Directory Table Size || Size in bytes. Always multiple of 0x800
|-
|0x1C || u64 || || Timestamp (LDAP/Win32 FILETIME)
|-
|0x7EC || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|}
* '''Sector #33:''' The first 24 Bits is the magic. It is always "XBOX_DVD_LAYOUT_TOOL_SIG". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA), Syberia (USA, Europe)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
e1afbe2b29ea41b8b252c66d95e7cfae202258e6
7030
7029
2022-03-06T09:09:36Z
Qubits
2540
/* Version 4831 - 5849 */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
The Volume descriptor Sector #32 and #33 of the game partition.
* '''Sector #32:'''
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0x0 || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|-
|0x14 || u32 || Root Directory Table Sector || Multiply with 0x800 for offset
|-
|0x18 || u32 || Root Directory Table Size || Size in bytes. Always multiple of 0x800
|-
|0x1C || u64 || || Timestamp (LDAP/Win32 FILETIME)
|-
|0x7EC || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|}
* '''Sector #33:''' The first 24 Bits is the magic. It is always "XBOX_DVD_LAYOUT_TOOL_SIG". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA), Syberia (USA, Europe)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
Edit: This assumption is not true, at least not for all instances. For example, all region variants of Conker Live & Reloaded share the same padding stream.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
b7a40d00950f5e3b238a8e06ff73532744a6c2d2
7031
7030
2022-03-06T15:47:40Z
Qubits
2540
/* Volume descriptor */
wikitext
text/x-wiki
XDVDFS (Also known as XISO) is the image format used for [[Xbox Game Disc|Xbox Game Discs]].
It is stored in the data area.
== Format ==
Each sector is 2048 bytes.
=== Filesystem ===
{{FIXME|reason=More info}}
=== Volume descriptor ===
The Volume descriptor islocated at Sector #32 and #33 of the game partition.
* '''Sector #32:'''
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0x0 || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|-
|0x14 || u32 || Root Directory Table Sector || Multiply with 0x800 for offset
|-
|0x18 || u32 || Root Directory Table Size || Size in bytes. Always multiple of 0x800
|-
|0x1C || u64 || || Timestamp (LDAP/Win32 FILETIME)
|-
|0x7EC || ascii_char[20] || MAGIC|| MICROSOFT*XBOX*MEDIA
|}
* '''Sector #33:''' The first 24 Bits is the magic. It is always "XBOX_DVD_LAYOUT_TOOL_SIG". {{FIXME|reason=Describe version information}}
==== Examples ====
<!-- The "Wave n" is not a standard naming and I just made it up myself; we should confirm these and possibly find a better name - JayFoxRox -->
{{FIXME|reason=The tool names appearing in this section are guessed by me, we should confirm each of these - JayFoxRox}}
{{FIXME|reason=This lacks a couple of XDK versions}}
{{FIXME|reason=The byte offsets of each version field are missing}}
===== Wave 1 =====
Developers used xblayout to create DVD layout.
Then generated the final image using xbpremaster.
The final image was submitted to Microsoft.
* [[Azurik: Rise of Perathia]] (NTSC)
** xblayout version: 1.0.3926.1
** xbpremaster version: 1.0.3926.1
* [[Genma Onimusha]] (PAL)
** xblayout version: 1.0.4039.1
** xbpremaster version: 1.0.4039.2
* [[Max Payne]] (PAL)
** xblayout version: 1.0.4134.1
** xbpremaster version: 1.0.4242.1
* [[Petit Copter]] (Japanese)
** xblayout version: 1.0.4361.1
** xbpremaster version: 1.0.4361.2
* [[007 - Agent Under Fire]] (PAL)
** xblayout version: 1.0.4432.1
** xbpremaster version: 1.0.4432.1
===== Wave 2 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Developers used a new version of xblayout and submitted the layout + content to Microsoft
Microsoft generated the final image.
Sometime during this wave, the new padding algorithm got introduced. Judging from the examples below, the padding algorithm does not seem to be bound to the xblayout version or to a specific date.
* [[Metal Gear Solid 2 - Substance]] (NTSC)
** xblayout version: 1.0.4721.1 (old algorithm)
* [[Hitman 2 - Silent Assassin]] (France) (Original)
** xblayout version: 1.0.4721.1 (new algorithm)
** DMI Timestamp: 2002/09/18
* [[Hitman 2 - Silent Assassin]] (France) (Classic Edition)
** xblayout version: 1.0.4721.1 (old algorithm)
** DMI Timestamp: 2002/12/03
* [[Blade II]] (NTSC)
** xblayout version: 1.0.4808.1 (old algorithm)
* [[Battle Engine Aquila]] (PAL)
** xblayout version: 1.0.4831.1 (new algorithm)
Other Examples of games with 1.0.4721.1 version that don't use the old algorithm: Mat Hoffman's Pro BMX 2 (France), MLB SlugFest 2003 (USA), NCAA Football 2003 (USA), Phantom Crash (USA), Syberia (USA, Europe)
===== Wave 3 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 2
* [[Metal Gear Solid 2 - Substance]] (PAL)
** xblayout version: 1.0.5120.1
* [[Shenmue II]] (PAL)
** xblayout version: 1.0.5120.1
===== Wave 4 =====
{{FIXME|reason=This is a theory. Confirm please}}.
Same as wave 3, but developers now had to use the xbgamedisc tool instead of xblayout.
The mastering tool used by microsoft also leaves a version identifier now.
* [[Star Wars - Knights of the Old Republic]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Indiana Jones and the Emperor's Tomb]] (PAL)
** xbgamedisc version: 2.1.0.5233.1
** mastering tool version: 2.1.0.5233.1
* [[Dynasty Warriors 4]] (PAL)
** xbgamedisc version: 2.1.0.5344.1
** mastering tool version: 2.1.0.5344.1
* [[The Matrix - Path of Neo]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[The Suffering - Ties That Bind]]
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
* [[Reservoir Dogs]] (PAL)
** xbgamedisc version: 2.1.0.5849.1
** mastering tool version: 2.1.0.5849.1
=== Directory Entry ===
==== Version 4361 <!-- Game: Petit Copter --> ====
File entry flags:
* READONLY = 0x01
* HIDDEN = 0x02
* SYSTEM = 0x04
* DIRECTORY = 0x10
* ARCHIVE = 0x20
* NORMAL = 0x80
=== File data blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Incomplete sectors are padded with 0x00 bytes.
=== Random blocks ===
==== Version 3926 - 4808 ====
Seeded and then starting to emit bytes in data area.
Filled with the following algorithm:
<pre>
// State
uint32_t a;
uint32_t b;
uint32_t c;
// Helper
static uint32_t Value(void) {
uint64_t result;
result = c;
result += 1;
result *= b;
result %= 0xFFFFFFFB;
c = result & 0xFFFFFFFF;
return c ^ a;
}
// buffer must be at even address, length must be multiple of 2
void Fill(uint16_t* buffer, size_t length) {
while(length >= 2) {
*buffer++ = Value() >> 8;
length -= 2;
}
}
void Seed() {
const uint32_t b_seeds[8] = {
0x52F690D5,
0x534D7DDE,
0x5B71A70F,
0x66793320,
0x9B7E5ED5,
0xA465265E,
0xA53F1D11,
0xB154430F
};
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
uint32_t seed = ft.dwLowDateTime ^ ft.dwHighDateTime;
a = 0;
b = b_seeds[seed & 7];
c = seed;
a = Value();
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
==== Version 4831 - 5849 ====
The algorithm was switched to RC4-256-drop-2048.
<pre>
#include <openssl/rc4.h>
RC4_KEY rc4key;
void Fill(uint8_t* buffer, size_t length) {
// We need a zero buffer as OpenSSL will want to XOR the keystream with data.
// The XDVDFS random data is the keystream without changes, so we let XOR OpenSSL XOR with 0x00 bytes.
uint8_t zero_buffer[length];
memset(zero_buffer, 0x00, length);
RC4(&rc4key, length, zero_buffer, buffer);
}
void Seed() {
union {
uint8_t raw[16];
struct {
struct _FILETIME SystemTimeAsFileTime; // first 8 bytes, little-endian
uint64_t tsc; // later 8 bytes, little-endian
};
} key;
// Initialize seed
key.tsc = rdtsc();
GetSystemTimeAsFileTime(&key.SystemTimeAsFileTime);
RC4_set_key(&rc4key, 16, &key);
// Drop the first 2048 bytes of the RC4 keystream
uint8_t discard_buffer[2048];
Fill(discard_buffer, 2048);
}
</pre>
The RNG is seeded when the mastering tool / wizard is started.
The first portion of the code to use this random number generator is the code which generates layer 0 and layer 1.
Edit: This assumption is not true, at least not for all instances. For example, all region variants of Conker Live & Reloaded share the same padding stream.
=== Security blocks ===
==== Version 4361 <!-- Game: Petit Copter --> ====
Treated like random block.
== Tools ==
* [https://github.com/OpenXDK/xbiso XBISO]
* [https://github.com/mborgerson/extract-xiso extract-xiso]
857e4212490138840c881ec28154d8c1e4d7293f
Alpha card tests
0
4034
7013
2022-02-24T05:45:34Z
Useruser
2541
Created page with "{| class="wikitable" |- ! DEV_ID ! 0526 ! 0816 ! 3146 ! 3223 ! 3424 ! 3521 ! Notes |- | 10de:0150 | X | ✓ | X | X | X | X | 526 will install but crash in some nv_disp.sys f..."
wikitext
text/x-wiki
{| class="wikitable"
|-
! DEV_ID
! 0526
! 0816
! 3146
! 3223
! 3424
! 3521
! Notes
|-
| 10de:0150
| X
| ✓
| X
| X
| X
| X
| 526 will install but crash in some nv_disp.sys function, 3146+ check for this dev_id and will not allow you to continue
|-
| 10de:0200
| X
| X
| X
| X
| ✓
| ✓
| 3146 & 3223 will run but not display anything but a blinking cursor, missing something?
|-
| 10de:0201
| X
| X
| X
| X
| ✓
| ✓
| 3146 & 3223 will run but not display anything but a blinking cursor, missing something?
|}
534f74d4fb93f12f0183eab25ce9fc5ec119e469
File:Cato debug kit aug 2001 mcp x2.jpg
6
4035
7016
2022-02-24T18:56:59Z
Useruser
2541
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Xbox Game Disc
0
3700
7032
6831
2022-03-11T02:31:08Z
Doom
2542
/* USB Adapters */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|[https://web.archive.org/web/20091206023615/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200506021808200872_SH-D162C_TS02.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS02] <br> [https://web.archive.org/web/20090604123608/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509161625477201_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS03<sup>Korean</sup>] <br> [https://web.archive.org/web/20091105003814/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509261128121531_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS03] <br> [https://web.archive.org/web/20100217012245/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200512221448334972_SH-D162C_TS04.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS04<sup>Korean</sup>] <br> [https://web.archive.org/web/20110920084807/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701091709466301_SH-D162C_TS05.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS05]
|rowspan=2 |
* TS04 Kreon 0.5 (June 23rd 2006)
* TS04 Kreon 0.60 (July 30th 2006)
* TS04 Kreon 0.80 (September 9th 2006)
* TS04{{FIXME|reason=README claims SB00}} Kreon 0.81 (October 4th 2006)
* TS05{{FIXME|reason=README claims SB01}} Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|[https://web.archive.org/web/20110921065924/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200505121909111802_TS-H352C_SC00.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ SC00<sup>Korean</sup>]
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|CH01{{FIXME|reason=http://samsungodd.com/korLib/download.asp?no=200904281542399901_TS-H352D_CH01.exe&fname=200904281542399901_TS-H352D_CH01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> CM01{{FIXME|reason=https://web.archive.org/web/20100105225621/http://samsungodd.com/korLib/download.asp?no=200904281539184301_TS-H352D_CM01.exe&fname=200904281539184301_TS-H352D_CM01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> [https://web.archive.org/web/20100105234118/http://samsungodd.com/korLib/download.asp?no=200910081442017201_TS-H352D_CM02.exe&fname=200910081442017201_TS-H352D_CM02.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ CM02]
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|[https://web.archive.org/web/20090402052540/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191824214901_SH-D163B_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20091204131429/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200910081448023301_SH-D163B_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|CH01{{FIXME|reason=https://web.archive.org/web/*/http://samsungodd.com/chn/globalLib/Download.asp?path=Info_FWDownload&fname=200904281544595271_TS-H353B_CH01.exe dead}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* [https://web.archive.org/web/20160904080433/http://www.tsstodd.com:80/TotalLib/popup/Download.asp?path=program&lang=eng&fname=TSDNMAC.ZIP TSDNMAC] for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* [https://web.archive.org/web/20100105230358/http://samsungodd.com/KorLib/File/Tsdnwin.exe TSDNWIN] for Microsoft Windows Vista and 7
* [https://web.archive.org/web/20060328075340/http://www.samsungodd.com/eng/information/Application/Files/sfdndos.exe SFDNDOS] [https://web.archive.org/web/20060328072528/http://www.samsungodd.com/eng/information/Application/Files/Sfdndosm.exe SFDNDOSM] and the newer TSDNDOS ([https://www.dell.com/support/home/de/de/debsdt1/drivers/driversdetails?driverid=r205571 included here]) for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.com/Vantec-CB-ST00U3-NexStar-Optical-Storage/dp/B07452Z3KH Vantec CB-ST00U3 NexStar USB 3.0 to SATA 6Gbps Optical/Storage Adapter]
<code>152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp</code>
| TS-H353B/DEWH
<code>H/W:A Ver.B APRIL 2007</code>
| Windows 11. No extra drivers required. Drive flashed. Works with MFP 2.3.
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator. '''These adapters did NOT work with two separate TS-H353B drives on Windows (No media detected, extremely slow to respond).'''
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
7e3fd65744b08a7b1efed42c64e50c4c207ddfdd
Hard Drive
0
3707
7037
6870
2022-03-22T04:55:02Z
Monocasa
2506
Fill in config area partition path
wikitext
text/x-wiki
The original Xbox hard disk drive was 8 GB in size. Later releases, 10 GB drives; however, only the first 8 GB of the drive was used. See [[Hardware Revisions]] for more information.
== Partitions ==
The Xbox hard disk contains multiple partitions. Unlike a PC, which typically contains either a [https://en.wikipedia.org/wiki/Master_boot_record Master Boot Record] or [https://en.wikipedia.org/wiki/GUID_Partition_Table GUID Partition Table] to specify the partition information, the Xbox kernel uses a fixed partition layout. The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
{{FIXME|reason=Is this the same for all HDD sizes? could the number of free blocks in the savegame menu be used to calculate what kind of HDD you have?}}
{| class="wikitable"
|-
! Drive Letter{{FIXME|reason=This is under control of running application / variation even in official products?}}
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| N/A
| [[Config Sector|Config Area]]
| 0x00000000
| 0x00080000
| Fixed Structure
| \Device\Harddisk0\Partition0
|-
| X
| Game Cache
| 0x00080000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition3
|-
| Y
| Game Cache
| 0x2ee80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition4
|-
| Z
| Game Cache
| 0x5dc80000
| 0x2ee00000
| FATX
| \Device\Harddisk0\Partition5
|-
| C
| System
| 0x8ca80000
| 0x1f400000
| FATX
| \Device\Harddisk0\Partition2
|-
| E
| Data
| 0xabe80000
| 0x131f00000
| FATX
| \Device\Harddisk0\Partition1
|}
::::::::::::::::::::::''side note: CD/DVD Drive "D:" <=> "\Device\CdRom0"''
::::::::::::::::::::::''and usually: added Drive "F:" <=> "\Device\Harddisk0\Partition6"''{{FIXME|reason=Mark as unofficial / homebrew}}
::::::::::::::::::::::::: ''added Drive "G:" <=> "\Device\Harddisk0\Partition7"''{{FIXME|reason=Mark as unofficial / homebrew}}
'''Debug/Devkit HDD:'''
{| class="wikitable"
|-
! Drive Letter
! Description
! Offset (bytes)
! Size (bytes)
! Filesystem
! Device Object (MS Retail Kernel)
|-
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
| [FIXME]
|-
|}
'''FIXME:'''
* Add info on how extended partitions are added.
== Locking Mechanism and Basics ==
The hard drives in the Xbox are standard IDE drives locked with a key (referred to as the HDKey). The drive is unlocked by the Kernel at boot. The XBox uses a User Password with the Maximum security mode (see below).
The password is generated in two distinct phases:
* Extract the HDKey from the [[EEPROM]] which is unique to each Xbox making this phase dependent only on the [[EEPROM]].
* Generate a drive specific password (keyed to the model and serial number of the drive) with the extracted HDKey from the [[EEPROM]].
The security feature of the hard drive can be enabled and disabled by sending special ATA commands to the drive. If a device is locked, it will refuse all access until it is unlocked.
=== Locking Mechanism ===
The ATA/ATAPI Command Set - 2 (ACS-2) specification <ref>[http://www.t13.org/documents/UploadedDocuments/docs2011/d2015r7-ATAATAPI_Command_Set_-_2_ACS-2.pdf Draft: ATA/ATAPI Command Set - 2 (ACS-2) - T13/2015-D - Revision 7, June 22, 2011] (t13.org); Note: T13 drafts are freely available, only the final standards are behind a paywall.</ref> defines an optional ''SECURITY'' feature subset (chapter 7.43 - 7.48) which allows to limit access to the drive's data behind a hardware implemented locking mechanism:
* SECURITY DISABLE PASSWORD (Chapter 7.43)
* SECURITY ERASE PREPARE (Chapter 7.44)
* SECURITY ERASE UNIT (Chapter 7.45)
* SECURITY FREEZE LOCK (Chapter 7.46)
* SECURITY SET PASSWORD (Chapter 7.47)
* SECURITY UNLOCK (Chapter 7.48)
==== The Password ====
A device can have two passwords; either or both may be set with a maximum of 32 byte each. A device can be locked in two modes: High security mode or Maximum security mode. If the User password is not available, the only remaining way to get at least the bare hardware back to a usable state is to issue the SECURITY ERASE PREPARE command, immediately followed by SECURITY ERASE UNIT. In Maximum security mode, the SECURITY ERASE UNIT command requires the Master password and will completely erase all data on the disk.
===== User Password =====
If a ''User Password'' is set (SECURITY SET PASSWORD), the drive blocks the access on a reboot again so you have to re-enter the password (SECURITY UNLOCK). Setting the ''User Password'' will also set the ''Master Password Capability''.
===== Master Password =====
If the ''Master Password Capability'' is set the drive could be locked in one of two modes. Bit 8 in word 128 of the IDENTIFY response shows which mode the drive is in:
* 0 = High: the ''Master Password'' could be used to unlock (SECURITY UNLOCK) just like the ''User Password'' or to deactivate the ''User Password'' (SECURITY DISABLE PASSWORD).
* 1 = Maximum: the ''Master Password'' could only be used to wipe the drive (SECURITY ERASE UNIT). This makes the drive usable again but all data on it is lost.
=== Drive Data ===
During the second phase, the serial and model numbers are needed. These values are available in the response data from the DEVICE_IDENTITY ATA command. However, the data needs to be reorganized. It is read in Big Endian words, and needs to be byte swapped first to get the byte ordering correct. Then, starting from the end of the data (serial == 20 bytes, model == 40 bytes) ignore ASCII spaces (byte value of 0x20) at the end of the data. Zeros are *not* trimmed, *only* spaces. Do not be fooled into believing that this data is a string. On some drives this is the case, but on others there are non-ASCII values in the fields.
=== Basic Security Algorithms ===
There are three primary cryptography routines/functions needed when generating an XBox drive password:
* SHA1: Hashing algorithm. It's primary purpose is to take an input message and create a (relatively) small signature (called a digest) which is unique to the original message. One of the goals of SHA1 is to make it difficult to alter the input message in such a way as to result in the same output digest.
* RC4: Symmetric cipher. This means that the algorithm for encryption is the same as that for decryption. The purpose is to make one key work in both directions.
* HMAC: Uses a hashing algorithm (in this case SHA1) to generate a cryptographically "strong" signature.
==== Password Algorithm ====
- Key data is shown entering functions from the side
- Data is shown entring from above or below in order of presentation from left to right
<pre> RC4_key >--(second)-->--,
/|\ |
| |
.-<--|__eeprom_key__|-->-----------> HMAC_SHA1 |
| /|\ |
| | |
| .--->-----------' |
| | |
| eeprom_data = |__data_hash___|__enc_conf__|__enc_data__| |
| | | | |
| | \|/ | |
| | rc4_decrypt <----|---------<|
| | | | |
| \|/ | | |
| (must be equal) | \|/ |
| /|\ | rc4_decrypt <---'
| | | |
| | \|/ \|/
| | |_confounder_|____data____|
| | / / |
| | / / |
| | / / |
| | / / |
| | \|/ / \|/
`--->-----------------> HMAC_SHA1 / |__HDKey__|__|
/|\ / |
\______/ |
|
.-------------------------<--------'
|
| model_number serial_number
| \ /
| \ /
`--->-----------------> HMAC_SHA1
|
\|/
HD_password
</pre>
This seems to be the easiest way to show the required calculations.
Basically there are several intermediate steps. First, generate the RC4_key from the eeprom_key and the data_hash (first 20 bytes of eeprom_data). Use the RC4_key to decrypt the encrypted confounder (8 bytes 20 bytes into eeprom_data) and the encrypted data (20 bytes 28 bytes into eeprom_data). Now generate an HMAC_SHA1 hash from the eeprom_key and the decrypted confounder and data. Verify that this hash matches the data_hash stored in the eeprom. If they don't match then the eeprom data is not correct. If the hashes match then the first 16 bytes of the decrypted data field is the HDKey.
Once you have the HDKey get the model and serial number from the drive. Generate an HMAC_SHA1 hash from the HDKey, model and serial numbers. The resulting 20 bytes are the HD password. The remaining 12 bytes needed for the password are zeros.
== Unlocking ==
Before connecting an Xbox HDD to a PC for a backup or modification, the drive must first be unlocked. This can be done with alternative dashboards (such as EvoX). But beware, once you unlock the disk you cannot use it with an official BIOS until you re-lock the disk! For this reason it is suggested to use a patched BIOS which does not require the disk to be locked. If you are unable to run unsigned code (needed to unlock the HDD before powering off), it is possible to hot-swap the drive after the Xbox has started. This is not a suggested method, but it has been known to work. The idea is that you start the Xbox and wait for the dashboard, at which point the drive will be unlocked. Then, while the Xbox is running, you disconnect the IDE cable (but not the power!), and then connect the drive to your PC. Then the drive can be mounted for read/write (using XboxHDM), or imaged directly.
=== Unlock via Serial for Seagate drives ===
Look here: http://www.os2museum.com/wp/seagate-serial-talk/
=== Universal Unlock Method(s) ===
'''TODO'''
'''FIXME:'''
* Provide more info on locking/unlocking procedure.
* Provide details about the key and how it can be derived from the [[EEPROM]] data.
== How To: Backup an HDD ==
There are two general methods to back up your HDD: copying the files, or creating a byte-for-byte image of the drive.
=== Method 1: File Copy ===
This is an acceptable backup method, but it is not as accurate an exact copy. This method requires less work to create the backup, but more work to re-create a usable disk image. The dashboard files (found in C:) are the most essential part of a backup, and a complete disk image can be re-created (with some effort) with a copy of the dashboard files using a tool such as XboxHDM.
==== Remote ====
Simply run an XBE on your Xbox that provides an FTP server. This is a standard feature for alternative dashboards (such as EvoX). Then connect to your Xbox from another system and copy all files in '''C:''' and '''E:'''.
==== Direct ====
Unlock the HDD, connect it to your PC, mount the drive (see [[FATX]]), copy the files.
=== Method 2: Exact Copy ===
This is the most accurate method to backup your hard disk. This method requires more work to create the backup, but does not require any effort to create a usable disk image like the first method. There are multiple ways to implement this method, one is provided here.
Unlock the HDD, connect it to your PC using a USB-IDE adapter ([https://www.amazon.com/Sabrent-USB-DSC9-SATA-Drive-Converter/dp/B00DQJME7Y available for ~$20USD]). In GNU/Linux and other *NIX variants, DD can be used to perform the block copy. For example: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512</code>. append <code>status=progress</code> to see the progress during copying if you run a recent distro, like so: <code>sudo dd if=/dev/sdb of=xbox_hdd.raw bs=512 status=progress</code>.If you're dumping an original Xbox HDD (capacity 8G or 10G), this will finish pretty quickly. The files can be extracted by mounting the filesystems in the image (see [[FATX]]).
== Further Reading ==
* [https://web.archive.org/web/20150502210033/http://hackipedia.org/Disk%20formats/Partition%20tables/X-Box/Xbox_Partitioning_and_Filesystem_Details.htm Xbox Partitioning and Filesystem Details]
* [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
a933f782b242a1faff203f4b83ec28139fc5facc
Xbe
0
3706
7038
6968
2022-05-14T16:12:23Z
Edness
2544
manually derived beta keys used by Re-Volt and Lamborghini for xbox live beta testing (see ObscureGamers server for context)
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. Standard windows format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0xE682F45B, Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from.
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0x46437DCD, Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== LibraryVersion Table ==
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0008
| Library Name
| 8-byte ASCII-name of this library. (i.e. "XAPILIB")
|-
! 0x0008
! 0x0002
| Major Version
| Major version for this library (2-byte WORD).
|-
! 0x000A
! 0x0002
| Minor Version
| Minor version for this library (2-byte WORD).
|-
! 0x000C
! 0x0002
| Build Version
| Build version for this library (2-byte WORD).
|-
! 0x000E
! 0x0002
| Library Flags
| Various flags for this library. The fields are:
QFEVersion = 0x1FFF (13-Bit Mask)
Approved = 0x6000 (02-Bit Mask)
Debug Build = 0x8000 (01-Bit Mask)
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format =
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
= Resources and links =
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
1ae3c4f5207d8b8964719a9d5fb6afd5c4159cf0
Xbox 360 Backward Compatibility
0
3701
7040
6843
2022-06-22T12:51:16Z
XENON
2545
Just added some clarity and fixed a typo
wikitext
text/x-wiki
Xbox 360 Backward Compatibility, also known as '''FU''' or '''Fusion''' is Microsoft's original Xbox emulator for the Xbox 360.
The emulator binary is called xefu.xex. The first resource is xb1krnl which is a modified version of [[Kernel|xboxkrnl.exe]].
=== Modifications to xboxkrnl.exe ===
The IDEXPRDT section has been dropped, additionally the extra data from the MS-DOS header is gone.
==== Guest to host communication ====
The entrypoint of the kernel looks like:
<pre>
80030878: 56 push %esi
80030879: 57 push %edi
8003087a: 8d 05 4c ac 02 80 lea 0x8002ac4c,%eax
80030880: 0f 3f (bad)
80030882: 04 20
80030884: 8d 05 6c ac 02 80 lea 0x8002ac6c,%eax
8003088a: 0f 3f (bad)
8003088c: 04 20
8003088e: 8d 05 8c ac 02 80 lea 0x8002ac8c,%eax
80030894: 0f 3f (bad)
80030896: 04 21
80030898: 8d 05 70 94 01 80 lea 0x80019470,%eax
...
</pre>
According to [https://web.archive.org/web/20070216172548/https://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf this document by symantec] (Page 5, Left-hand-side) the patterns <code>0F 3F x1 x2</code> and <code>0F C7 C8 y1 y2</code> are used for communication with the host.
{| class="wikitable"
! x1 !! x2 !! Notes
|-
| 0x04 || 0x20 || Seems to use eax (address) as parameter? eax points to a zero terminated list of pointers into the kernel memory [7 elements]
|-
| 0x04 || 0x21 || Seems to use eax (address) as parameter? " [4 elements]
|-
| 0x04 || 0x22 || Seems to use eax (address) as parameter? Seems to be some call to that address?!
|-
| 0x04 || 0x23 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x24 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x35 || Seems to use eax (address) as parameter?
|-
| 0x04 || 0x50 || Seems to use eax (address) as parameter? " [3 elements]
|-
| colspan="3" | Cleaner list starts here {{FIXME}}
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x20 ||
|-
| 0x04 || 0x21 ||
|-
| 0x04 || 0x22 ||
|-
| 0x04 || 0x23 ||
|-
| 0x04 || 0x24 ||
|-
| 0x04 || 0x35 ||
|-
| 0x04 || 0x50 ||
|-
| 0x06 || 0x00 || Seems to use eax (address) and ecx (size) as parameter? Memory is 0x00 filled before. location is 0x8002b420, size would be 0x3000
|-
| 0x06 || 0x02 ||
|-
| 0x06 || 0x20 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x21 ||
|-
| 0x06 || 0x22 ||
|-
| 0x06 || 0x23 || Some call or callback registration to the address pointed to by eax
|-
| 0x06 || 0x24 ||
|-
| 0x06 || 0x25 ||
|-
| 0x06 || 0x26 ||
|-
| 0x06 || 0x27 ||
|-
| 0x06 || 0x28 ||
|-
| 0x06 || 0x29 ||
|-
| 0x06 || 0x40 ||
|}
== References and links ==
* [http://support.xbox.com/en-US/legacy-devices/original-console/play-original-games Official compatibility list by Microsoft]
* [http://michaelbrundage.com/project/xbox-360-emulator/ Michael Brundages (Microsoft) page about the original Xbox emulator in the Xbox 360]
** [http://michaelbrundage.com/note/2005/05/15/xbox-360-emulator/ More information about the original Xbox emulator in the Xbox 360]
* [https://randomascii.wordpress.com/2019/03/20/exercises-in-emulation-xbox-360s-fma-instruction/ Blog post about FMA math emulation by Bruce Dawson (Microsoft)]
* [https://www.youtube.com/watch?v=Da_ont-2AG0 Modern Vintage Gamer: Revisiting Original Xbox Backward Compatibility on the Xbox 360]
00da079978f25630ab09fe9bc1ed8d6e8e3b1c77
User:VannevarKush
2
4036
7042
2022-06-29T22:46:08Z
VannevarKush
2546
Creating user page
wikitext
text/x-wiki
Hello World
Working on Xbox linux, particularly modern FATX support
31c7ac53061cbd6a6711265770b456089b170144
Main Page
0
1
7043
6935
2022-06-29T23:20:31Z
VannevarKush
2546
Added Linux and ReactOS under "Operating Systems" header
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
*** [[Xbox Live/Machine Account|Machine Account]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[Xemu|xemu]]
** [[Cxbx-Reloaded]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Operating Systems ==
* [[Linux]]
* [[ReactOS]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
d295c82dad71a2d79eb0c9b4d915305944110f2c
Linux
0
4037
7044
2022-06-29T23:49:53Z
VannevarKush
2546
Creating page, created a basic intro and links section
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application of the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. But, it would also be possible to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
==Links==
Many of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://cs.oberlin.edu/~ctaylor/classes/341F2012/xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System] A security review of the Xbox made by Michael Steil, a member of the Xbox Linux team
68232895eef2725858b24438a009f0cb1c16b412
7045
7044
2022-06-29T23:59:11Z
VannevarKush
2546
Added the xboxhdm repo to historical links
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. But, it would also be possible to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
==Links==
Many of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
* [https://cs.oberlin.edu/~ctaylor/classes/341F2012/xbox.pdf 17 Mistakes Microsoft Made in the Xbox Security System] A security review of the Xbox made by Michael Steil, a member of the Xbox Linux team
5ab815717e52cdbc7bf76fc79f2e7b9780354764
7046
7045
2022-06-30T00:01:02Z
VannevarKush
2546
Moving 17 mistakes to See Also since it's an article on here
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. But, it would also be possible to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
==Links==
Many of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
[[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System]] by Michael Steil, a member of the Xbox Linux team
b60e1c29d44093753ea675c1858b5893c5d874b9
7047
7046
2022-06-30T00:01:55Z
VannevarKush
2546
Correcting formatting
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. But, it would also be possible to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
==Links==
Many of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
8d833f3a8f6840fd018dd699fa1c5243d5cc957c
7048
7047
2022-06-30T00:11:18Z
VannevarKush
2546
Added link to Xbox Linux Issues
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
To see the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
Many of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
54f384c098f323bc4b3f2fa273e4bdfdcc10a8d1
7049
7048
2022-06-30T00:11:52Z
VannevarKush
2546
grammar
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
To see the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
95fd43f13cd523dc3a7ef0abebe43e1fe4c115d7
7050
7049
2022-06-30T00:13:50Z
VannevarKush
2546
phrasing
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
d4b6e841f47419d2b36c6c39d5ad7f44b6229123
Xbox Linux Issues
0
4038
7051
2022-06-30T01:20:30Z
VannevarKush
2546
Creating page, adding FATX/MBR issue
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==XBPartitioner Table and MBR incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and load linuxboot.cfg, the kernel, and the initrd. As Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since an actual boot record isn't needed, the first 440 bytes are filled with zeroes when using fdisk. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. The XBPartitioner table provides 14 partition "slots" for FATX partitions. The partition table is written into unused space in the FATX config area. XBPartitioner wipes the entire config area when writing a partition table including any MBR contents, other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR. Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR.
This struct shows the layout of the partition table:
From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools that support this. Xbox-based, Linux-based, and PC-based Xbox partition management tools would have to be updated to support this, and the BIOS patches would probably have to be updated.
'''Pros'''
* Cromwell would not need to be modified
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap for full kernel support
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution, but fatxfs performance still needs to be evaluated on Xbox.
d94f9a014d62950cf55b2df41fdb05ef9625922b
7052
7051
2022-06-30T01:29:54Z
VannevarKush
2546
Some cleanup
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==XBPartitioner Table and MBR incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. The XBPartitioner table provides 14 partition "slots" for FATX partitions. The partition table is written into unused space in the FATX config area. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution, but fatxfs performance still needs to be evaluated on Xbox.
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
3e853f20d30a83f7d44490d7d22f616120d7de56
7053
7052
2022-06-30T01:48:07Z
VannevarKush
2546
Added Lack of FATX Kernel Support and Advanced Video Support
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==XBPartitioner Table and MBR incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. The XBPartitioner table provides 14 partition "slots" for FATX partitions. The partition table is written into unused space in the FATX config area. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution, but fatxfs performance still needs to be evaluated on Xbox.
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
ced1ced79a3204b749253aa1a6f426e66f52b5fe
7054
7053
2022-06-30T20:22:43Z
VannevarKush
2546
/* XBPartitioner Table and MBR incompatibility */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==XBPartitioner Table and MBR incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. The XBPartitioner table provides 14 partition "slots" for FATX partitions. The partition table is written into unused space in the FATX config area. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
2a63b7ba9bea43b8e5bfebbd5594b776ac70e552
7055
7054
2022-06-30T20:26:36Z
VannevarKush
2546
/* A 12 partition XBPartitioner Table */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==XBPartitioner Table and MBR incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. The XBPartitioner table provides 14 partition "slots" for FATX partitions. The partition table is written into unused space in the FATX config area. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
96ee4bda2eb2acb7b9b51153696de377b4d0b244
7056
7055
2022-06-30T20:55:41Z
VannevarKush
2546
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==XBPartitioner Table and MBR incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
e5eb63e632038961a0cb7d9881fe06716d240227
7064
7056
2022-06-30T21:52:40Z
VannevarKush
2546
Adding info about cromwell boot partition issues
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg, the kernel, and the initrd.
A boot partition formatted with ext2 using an old version of X-DSL worked fine for a native install. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon for the user to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Note that Cromwell is able to use an ext2/ext3 partition as a combined boot and root partition; a reserved boot partition is not strictly needed here, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of boot partitions does Cromwell support? How can these be reliably formatted with a terminal command? Since a boot partition is only needed for Cromwell to load the kernel and initrd, and depending on the complexity of any fix to Cromwell, it would be acceptable for a more archaic filesystem configuration to be used for the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice. Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
392dd1efbce40c47f57c23275883c0e9c32a0bfc
7065
7064
2022-06-30T21:56:25Z
VannevarKush
2546
/* Native Boot Partition Filesystem Compatibility with Cromwell */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install of X-DSL, a boot partition formatted with ext2 worked fine as formatted by X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there; a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can these partitions be reliably formatted using a terminal command? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice. Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
2e27234f83285ef888ac82d8a422dc8439556c4f
7066
7065
2022-06-30T22:05:29Z
VannevarKush
2546
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install of X-DSL, a boot partition formatted with ext2 worked fine as formatted by X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there; a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can these partitions be reliably formatted using a terminal command? Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice. Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
e3941420a55bb946c0267d446fb775a5b1a37899
7067
7066
2022-06-30T22:07:05Z
VannevarKush
2546
/* Native Boot Partition Filesystem Compatibility with Cromwell */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there; a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can these partitions be reliably formatted using a terminal command? Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice. Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
2b1fe567eaee56fadd4e4768c2867d65bf2f4f2e
7068
7067
2022-06-30T22:34:18Z
VannevarKush
2546
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there; a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can these partitions be reliably formatted using a terminal command? Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
fb151b576c7fbc9cef7ccc6ec1398b7576ff53df
7072
7068
2022-07-01T22:04:42Z
VannevarKush
2546
/* Native Boot Partition Filesystem Compatibility with Cromwell */ Adding info about successful format in Windows
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
bc8ef8b9caf1685b59e101902b0dea72bd837536
7073
7072
2022-07-02T20:53:03Z
VannevarKush
2546
/* XBPartitioner Table and MBR Incompatibility */ Adding mborgerson's proposal for fatx partition table issue
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions can be temporarily accessed, but once the contiguous files are created and the range of the is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, aside from the mounting process itself.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. Maybe a Linux tool could be built to defragment the drive first and then handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
b51b4b77bdb640afc5b09701f24b4477c5ff1f38
7074
7073
2022-07-02T20:55:40Z
VannevarKush
2546
/* Using Contiguous Files Allocated on FATX as a Filesystem */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, but once the contiguous files are created and the range of the is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, aside from the mounting process itself.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. Maybe a Linux tool could be built to defragment the drive first and then handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
7a4fcbf3dd44f52aa8a01a29819f98467dd8d693
7075
7074
2022-07-02T20:56:12Z
VannevarKush
2546
/* Using Contiguous Files Allocated on FATX as a Filesystem */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, but once the contiguous files are created and the range of the files is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, aside from the mounting process itself.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. Maybe a Linux tool could be built to defragment the drive first and then handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
371cc14f759d23881022e87bae1957fe387f5a1b
7076
7075
2022-07-02T20:56:59Z
VannevarKush
2546
/* Using Contiguous Files Allocated on FATX as a Filesystem */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, aside from the mounting process itself.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. Maybe a Linux tool could be built to defragment the drive first and then handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
1fbe99dc71694fccd91fa9cfb3e9a9a170bbf98a
7077
7076
2022-07-02T21:00:55Z
VannevarKush
2546
/* Using Contiguous Files Allocated on FATX as a Filesystem */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, aside from the mounting process itself.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. Maybe a Linux tool could be built to defragment the drive first and then handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
12ec14fff117a3003b58a2987cd4afb5948b36a5
7078
7077
2022-07-02T21:02:32Z
VannevarKush
2546
/* Using Contiguous Files Allocated on FATX as a Filesystem */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, aside from the mounting process itself.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. Maybe a Linux tool could be built to defragment the drive first and then handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
c1bfe5b46a1c9597fd0bc80e4d0df8dd7e87f80c
7079
7078
2022-07-02T21:04:02Z
VannevarKush
2546
/* Using Contiguous Files Allocated on FATX as a Filesystem */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. Maybe a Linux tool could be built to defragment the drive first and then handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
2eedf24ec33dc82670bbe21b625f5268aba06df9
7080
7079
2022-07-02T21:06:18Z
VannevarKush
2546
/* Using Contiguous Files Allocated on FATX as a Filesystem */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
189428f139a3efcb71977783a724111db6f336bf
7081
7080
2022-07-02T21:06:45Z
VannevarKush
2546
/* Using Contiguous Files Allocated on FATX as a Filesystem */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
5123e98e9080b067488a689ca2020913b92b5d6a
7082
7081
2022-07-02T21:08:26Z
VannevarKush
2546
/* Possible Solutions */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel, and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
f6c404d19c11304615770c0ee8a27144ff4bcce9
7083
7082
2022-07-02T21:09:19Z
VannevarKush
2546
/* Native Boot Partition Filesystem Compatibility with Cromwell */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
4e782583b1d4b50c8a5f9eea12d805c82ed5519a
Linux
0
4037
7057
7050
2022-06-30T21:11:19Z
VannevarKush
2546
/* Links */ Adding mborgerson's fatx library to links
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
23b184040ca4bbf57ea8c597c48a04fd43d19493
7058
7057
2022-06-30T21:13:55Z
VannevarKush
2546
/* Links */ Adding info about a repo that doesn't have useful content but looks like it does
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux.
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
ba321af6cedea574ab99f834d57840ec49f8fe0e
7059
7058
2022-06-30T21:14:34Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux.
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
6c343161c6c8a3c69c90a6838a6134b493338284
7060
7059
2022-06-30T21:15:25Z
VannevarKush
2546
/* Links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
a31484bd0ef75e9537b40fecc7e3c460eb2b5ea0
7061
7060
2022-06-30T21:22:34Z
VannevarKush
2546
/* Links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
c7d28a7c6579150881ef93d224468b5119ad61f8
7062
7061
2022-06-30T21:24:21Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The downloads section contains various Xoox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
f9cada9d6ba55ebd68d3335faf0fe7770259b025
7063
7062
2022-06-30T21:24:46Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
200ba8d4bc463e15423dcd9f8fb392a8adfeaed2
7069
7063
2022-06-30T23:36:46Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [[https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch]] Some inspiration
b91d01d22eb1a7df98fa2b26b3ca47d6ecb8c88f
7070
7069
2022-06-30T23:37:00Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
449057beff42ebcea30157f8ce27f827f07d84d6
7071
7070
2022-07-01T00:18:18Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis
d4a335b9fe4bf5c2d757fa244f15175e99712c46
7085
7071
2022-07-02T21:28:09Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
74e30d9479e484e527eeca1b34a60604786387e0
7086
7085
2022-07-02T22:07:39Z
VannevarKush
2546
More info on historical Xbox Linux
wikitext
text/x-wiki
==Historical Xbox Linux==
===Introduction===
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''GentooX''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and well-developed Xbox Linux distro.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, which is a PC-based CD bootable set of Linux tools
==Current Xbox Linux==
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
94317169f30aac59a48c4ff95f8700c72d40ac32
7087
7086
2022-07-02T22:08:52Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
==Historical Xbox Linux==
===Introduction===
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''GentooX''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, which is a PC-based CD bootable set of Linux tools
==Current Xbox Linux==
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
0d59cbf631a7053fe3ecd5ceacd5fcb6a784a71a
7088
7087
2022-07-02T22:09:55Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
==Historical Xbox Linux==
===Introduction===
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''GentooX''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, which is a PC-based CD bootable set of Linux tools
==Current Xbox Linux==
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
a89e8fdb235eae09da5b5715afb14ff631ad30d6
7089
7088
2022-07-02T22:11:41Z
VannevarKush
2546
Reformatting
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''GentooX''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, which is a PC-based CD bootable set of Linux tools
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
0922c8f06cf4a7050c5c5611b85a7dc2d651d1ac
7090
7089
2022-07-02T22:12:36Z
VannevarKush
2546
More reformatting
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 are woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''GentooX''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, which is a PC-based CD bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
e2843934235945b89eafc790603745f8b58bff00
7091
7090
2022-07-02T22:12:51Z
VannevarKush
2546
/* Current Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''GentooX''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, which is a PC-based CD bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
7e3b75adf5791b6752e436005a79b1eef8fa5446
7092
7091
2022-07-02T22:13:16Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''GentooX''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, which is a PC-based CD bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
09132f6e2d82f8fa7895240f8a02266c75c95384
7093
7092
2022-07-02T22:16:58Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''GentooX''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
dca9560b1e86f55b85cfbd9cdd6c044302acc793
Xbox Linux
0
4039
7084
2022-07-02T21:27:19Z
VannevarKush
2546
Redirected page to [[Linux]]
wikitext
text/x-wiki
#REDIRECT [[Linux]]
d51bf9cff7954e6e54dbf1d79c250d00103fffdc
Xbox Linux Tips and Tricks
0
4040
7094
2022-07-02T22:48:49Z
VannevarKush
2546
Adding some basic tips and tricks
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing the Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The Gentoo LiveCD command line environments worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it could be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux). Does Linux have any sort of write levelling support for swap?
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build to that hard drive.
===Using xbox7887's serial board===
(put in necessary kernel config options)
be9394acd2668034c35c3f010b5ddefbe18cc2c6
7095
7094
2022-07-02T22:50:20Z
VannevarKush
2546
/* 128MB RAM Upgrade */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing the Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it could be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux). Does Linux have any sort of write levelling support for swap?
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build to that hard drive.
===Using xbox7887's serial board===
(put in necessary kernel config options)
cfb4b83e0f0ecc1c564f2cac196cc0ade21c9c0d
7096
7095
2022-07-02T22:54:19Z
VannevarKush
2546
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing the Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build to that hard drive.
===Using xbox7887's serial board===
(put in necessary kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
734cfc7863c48b49b118143198dc842d9c7cf42d
7097
7096
2022-07-02T22:55:41Z
VannevarKush
2546
/* Using the Extra 2GB on a 10GB FATX Hard Drive */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing the Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install.
===Using xbox7887's serial board===
(put in necessary kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
14281f147b6bdf5c593ab1686bb1c8d00b49b657
7098
7097
2022-07-02T22:56:47Z
VannevarKush
2546
/* Using the Extra 2GB on a 10GB FATX Hard Drive */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing the Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically.
===Using xbox7887's serial board===
(put in necessary kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
1b0ce87d47c5db3f9b801281dea65ba68ec56002
7099
7098
2022-07-02T23:04:18Z
VannevarKush
2546
/* Using the Extra 2GB on a 10GB FATX Hard Drive */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing the Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatted drives. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's serial board===
(put in necessary kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
dea90cc5e512e847b9b87e0e0a1deac25b33a853
7100
7099
2022-07-02T23:05:06Z
VannevarKush
2546
/* Using the Extra 2GB on a 10GB FATX Hard Drive */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing the Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's serial board===
(put in necessary kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
0a510b90541bf1995292dd076ac82687e0dd338d
Xbox Linux Tips and Tricks
0
4040
7101
7100
2022-07-02T23:06:20Z
VannevarKush
2546
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's serial board===
(put in necessary kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
20db9eafe19532831f0cf48ae58d7b07b03ef8cf
7102
7101
2022-07-02T23:12:03Z
VannevarKush
2546
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's serial board===
(put in necessary kernel config options, compatible Xbox BIOSes)
===Using USB serial devices===
(kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
91f9a51ede22d8ed3d4636d96f82cc978e7d4d2a
7103
7102
2022-07-02T23:46:15Z
VannevarKush
2546
/* Using xbox7887's serial board */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created a SuperIO board, which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and were used on computer motherboards to provide PS/2, serial, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing kernel debugging over a serial connection provided by the SuperIO chip via the LPC.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? should probably be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
(kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
71dbde1a34c6c835e108483bd85d05832bc88377
7104
7103
2022-07-02T23:47:49Z
VannevarKush
2546
/* Using xbox7887's Serial USB Adapter (on the LPC bus) */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created a SuperIO board, which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? should probably be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
(kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
b82f6c6dbac8cb032d642dd5ac42463b7be071b8
7105
7104
2022-07-02T23:48:28Z
VannevarKush
2546
/* Using xbox7887's Serial USB Adapter (on the LPC bus) */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created a SuperIO board, which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
(kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
2ba0a7311bb758cc7f8df5a80bacd27ecda59b9d
7106
7105
2022-07-02T23:49:38Z
VannevarKush
2546
/* Using xbox7887's Serial USB Adapter (on the LPC bus) */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
(kernel config options)
===Unpacking and Repacking an initramfs/initrd===
(todo)
e9fc4cc898b467c1038bca3b00cb5618cf3bb7ac
7107
7106
2022-07-03T00:08:48Z
VannevarKush
2546
/* Using USB serial devices */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Since SSH can't connect early enough to debug the kernel on startup, a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this, which should probably be translated into actual config options:
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support #is this only for xbox7887's board?
1 port to register at runtime
===Unpacking and Repacking an initramfs/initrd===
(todo)
d7d8ff5857962a477ad1252eb6a585b96c05af60
7108
7107
2022-07-03T00:09:17Z
VannevarKush
2546
/* Using USB serial devices */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Since SSH can't connect early enough to debug the kernel on startup, a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support #is this only for xbox7887's board?
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
492c54403fb58c6e287a1cdfd4148be905fc756f
7109
7108
2022-07-03T00:10:20Z
VannevarKush
2546
/* Using USB serial devices */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Since SSH can't connect early enough to debug the kernel on startup, a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support #is this only for xbox7887's board?
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
d6c175ee0eeb09746c6d4d13a57d38b9f7a99806
7110
7109
2022-07-03T00:11:14Z
VannevarKush
2546
/* Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support #is this only for xbox7887's board?
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
5a09ffaaf5f08de6e22f8d78b5476cf8be9f6433
7111
7110
2022-07-03T00:12:00Z
VannevarKush
2546
/* Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
c5b2b948a1432f6b041a4e0d7db8f055867ce9e3
7112
7111
2022-07-03T00:14:43Z
VannevarKush
2546
/* Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
236145e392b0d991b1136b4757a279032961c1cb
7113
7112
2022-07-03T00:17:11Z
VannevarKush
2546
/* Using xbox7887's Serial USB Adapter (on the LPC bus) */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
c36f1d8a5dfde0db5a00d4c50aaa6999af0808e0
7114
7113
2022-07-03T00:19:50Z
VannevarKush
2546
/* Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine, if the Xbox hardware itself isn't required during development.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
73c9d8ab4446dbd4da749bc6ec2cd4d60bc5348d
7115
7114
2022-07-03T00:20:11Z
VannevarKush
2546
/* Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
6de7aa09fb4d6e3043dfbd51df98a2fe90d2b65b
7116
7115
2022-07-03T00:24:02Z
VannevarKush
2546
/* Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging */
wikitext
text/x-wiki
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
17234f05228d479ad9deb7736c8257a6fadda05f
7117
7116
2022-07-03T00:30:10Z
VannevarKush
2546
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
==See Also==
[[Xbox Linux Issues]]
[[Xbox Linux]]
546af5fe3f89d96ee6c5e1a885a70b9cfcb742bb
7118
7117
2022-07-03T00:30:25Z
VannevarKush
2546
/* See Also */
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
f563ec4d29c7d860b95683830a81ea0f2b269098
Xbox Linux Issues
0
4038
7119
7083
2022-07-03T00:31:18Z
VannevarKush
2546
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html|MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
8b47a75e73f616a4fee93a90f79ff6665bd79397
Linux
0
4037
7120
7093
2022-07-03T00:41:54Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com|GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
dfbe68d6aac54e85b172c279ceef94a428231030
7121
7120
2022-07-03T00:42:59Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome.
*'''X-DSL''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "New" Xbox Linux wiki], which was migrated to SourceForge from an old one. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
071ead22bdd6235c74b23acf5fb645cc1d3d911a
7122
7121
2022-07-03T00:50:31Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''dynebolic''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page] The "New" Xbox Linux wiki, which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
c80f2fe8064774944d9dfa88c4ff847f185fbc12
7123
7122
2022-07-03T01:25:27Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]] - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic II, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest iso of version 1 (compatible with Xbox, untested) is [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page] The "New" Xbox Linux wiki, which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
ec779b2dd9ddf48107885d6e3477728b8602ff3d
7124
7123
2022-07-03T01:25:57Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic II, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest iso of version 1 (compatible with Xbox, untested) is [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page] The "New" Xbox Linux wiki, which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
e37c10df3cb01788cbb6c9561b6f5b36f78a5c3d
7125
7124
2022-07-03T01:26:37Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest iso of version 1 (compatible with Xbox, untested) is [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page] The "New" Xbox Linux wiki, which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
d2ed06e37170041c4b46ec3eecacd74e1f0bf5f7
7126
7125
2022-07-03T01:28:15Z
VannevarKush
2546
/* Links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work).
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest iso of version 1 (compatible with Xbox, untested) is [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
34b1970e4a2e2310d55323215455c2d8a48325d9
7127
7126
2022-07-03T01:34:44Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''', '''Ed's Xebian''', '''Fedora''' (images on xbox linux sourceforge)
*'''Mandrake''', '''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
8994cf843b3314aab3dad45d4515523ecfa84515
7128
7127
2022-07-03T01:49:56Z
VannevarKush
2546
/* Historical Xbox Linux */ Added some archive links
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
3dde57a5ef82658f720fc52bef7dc1c55dcdde3d
7129
7128
2022-07-03T01:59:29Z
VannevarKush
2546
/* Historical Xbox Linux */ Added sXb
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[sXb https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php]''' - Slackware for the Original Xbox. Last version is [], availalble here: https://sourceforge.net/projects/sxb/files/ The versioning is a little unclear, but the most recent ISO on sourcefore is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
bcf068ab0b2fd7e94f9aa3e2feaddc6965da9b64
7130
7129
2022-07-03T02:00:16Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourcefore is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
a103407c0636f11a6832786fce42c462b792d9fa
7131
7130
2022-07-03T02:10:32Z
VannevarKush
2546
/* Links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourcefore is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20110110030414/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
90ca22bb4b9fa93802e24eee989d94f83511d3af
7132
7131
2022-07-03T02:14:06Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourcefore is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
7903bb8250ef1f6532882057a4f51f1328a995a2
7133
7132
2022-07-03T02:24:18Z
VannevarKush
2546
/* Historical Xbox Linux */ added FreeBSD
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourcefore is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''[FreeBSD https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. The patches were officially merged into FreeBSD. An iso can be found here [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] with the offically supported patches.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
8ed762e1dcac81bc7340ea289881cda09a128c0e
7134
7133
2022-07-03T02:24:49Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourcefore is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. The patches were officially merged into FreeBSD. An iso can be found here [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] with the offically supported patches.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
8cb759693e6f5a54c4c1eda2845cd131e9f91c51
7135
7134
2022-07-03T02:26:47Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourcefore is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. An iso can be found here [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here]
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
301266a2e5d6799b2b65a56fed97df36d8ac71a6
7136
7135
2022-07-03T02:27:38Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. An iso can be found here [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here]
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
02756ba6c602b519b4c98630d66a68636c34c393
7137
7136
2022-07-03T02:31:51Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A setup can be found here [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
dde8b89167ae685aef8d48a2655d014ac8e62d2f
7138
7137
2022-07-03T02:32:17Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake'''
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
1dc449807f42b84cb34c76cec8e7d54cbeb235f4
7139
7138
2022-07-03T02:42:07Z
VannevarKush
2546
/* Historical Xbox Linux */ mandrake linux
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' were spotted on the usual source
*'''xboxhdm''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
ad956262cb87bd5f166e79a4496b3e90aad80919
7140
7139
2022-07-03T02:50:05Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, it was released up to 0.3. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs. It currently has issues with anything other than "F takes all" schemes.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
4d1bf70e28ac75955a2ee77181415a70da2f5487
7141
7140
2022-07-03T02:50:38Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, it was released up to 0.3. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
9245693372d78b3b653775809da08099f6b0cc2a
7142
7141
2022-07-03T02:51:00Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
9a661fe6bc25afe1da1d0968168d9f493dc88b2f
7143
7142
2022-07-03T02:51:35Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - "xUbuntu" is a specific distribution built on top of Ubuntu GNU/Linux distribution. xUbuntu" is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. "xUbuntu" linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run live off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
81225a2aa47cc45f76f4db4e61b5fcf3d60471c7
7144
7143
2022-07-03T02:53:39Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''xUbuntu''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
3f61ad36d1f7ee1abe8fb38af0eb735e4f4477e0
7145
7144
2022-07-03T02:54:58Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
59867d33d6869933be37ea266829e6ec07bcdd9c
7146
7145
2022-07-03T02:55:44Z
VannevarKush
2546
/* Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of GentooX Home is 7.1, and the latest release of Pro was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
3c17e1f59e79bca13d3a6c375126a47d3f037830
7147
7146
2022-07-03T02:58:53Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
116e22e296f92ecc52f1cc9e2f42007ee10feb03
7148
7147
2022-07-03T03:16:25Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods:
- "Native" install: This may out your hard drive, format it for Linux, and expects you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you) For a native install with a boot partition, this is NOT compatible with the XBPartitioner table, and it will overwite the XBPartitioner table. So "F takes all", allowing coexistence with the stock partitions, is preferred here to a full drive format in most cases.
'''If you have a native install, DO NOT USE XBPARTITIONER. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
- "loopback" install: This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is much safer of an install method, if you have space for a small install on E, or if you are using an "F takes all" scheme. Drive F must be below the 137GB boundary, if doing a loopback install to it (or is drive F size constrained here?).
Note that larger drives (probably >137GB) are going to run into issues with Xbox Linux. At least, Xbox Linux partitions will have to be located before that boundary, and you'll essentially lose access to the rest of your drive. Also, Xbox Linux can't read files on FATX if the partition is too big.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
55fcd2e6373af4ca786fab72ccca0e0c9d6f0c77
7149
7148
2022-07-03T03:26:06Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods:
'''"Native" install'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
'''loopback install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme. Drive F must end below the 137GB boundary, if doing a loopback install to it. XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
7f4bbb25320997942896dd7e25d7ae111c85b9f9
7150
7149
2022-07-03T03:26:43Z
VannevarKush
2546
/* Installing Old Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods:
'''Native Install'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme. Drive F must end below the 137GB boundary, if doing a loopback install to it. XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
201f5df6d007016af5e4655a44f7ca2dff664c3f
Linux
0
4037
7151
7150
2022-07-03T03:28:20Z
VannevarKush
2546
/* Installing Old Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme. Drive F must end below the 137GB boundary, if doing a loopback install to it. XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
3ecb4d3d14d69451b84a09aa72949292593c1d22
7152
7151
2022-07-03T03:29:25Z
VannevarKush
2546
/* Installing Old Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
ba32a2f2ada76769824e1c494018c57eb89f0830
7153
7152
2022-07-03T03:42:49Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
305b456a28ee16ef7fe12b0590c631b9690b9f2c
7154
7153
2022-07-03T03:46:48Z
VannevarKush
2546
/* Installing Old Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
031258814c3ac58970bedf5d362aeab5171d683b
7155
7154
2022-07-03T03:47:49Z
VannevarKush
2546
/* Installing Old Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
a57b1a192302da6ef79f42a75e97dfdedff28d86
7156
7155
2022-07-03T03:48:21Z
VannevarKush
2546
/* Installing Old Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use an old hard drive for this)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
31cc3bcb62d7f3bce0fe15caf82f48360d1958f2
7157
7156
2022-07-03T03:50:39Z
VannevarKush
2546
/* Installing Old Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes in architecture. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
27313525ebdf93bcad29645151b011205b898401
7158
7157
2022-07-03T03:57:32Z
VannevarKush
2546
/* Historical Xbox Linux */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Historical Xbox Linux==
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
4836a2fbe1ff3c4e385a1dcbd0fcaae670c6b84f
7159
7158
2022-07-03T04:01:18Z
VannevarKush
2546
Removing historical content to put on new page
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Today, Xbox Linux has more of a hobbyist appeal. It would be possible, though, to use it to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
For information about old versions of Xbox Linux, see [[Historical Xbox Linux]].
==Current Xbox Linux==
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
6f0c97521825d3f15e2406a627ae47c017ab0a97
7164
7159
2022-07-03T04:12:24Z
VannevarKush
2546
wikitext
text/x-wiki
The first Xbox Linux releases were in 2003, and Xbox Linux reached its peak of popularity in 2003-2006. To read more about it, see [[Historical Xbox Linux]]. Today, Xbox Linux has more of a hobbyist appeal.
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
It would be possible to use Xbox Linux to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Status==
A CD-installable distro is currently being worked on.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
2708006cb3f3055b387f47b1df490be5c371968d
7165
7164
2022-07-03T04:12:39Z
VannevarKush
2546
wikitext
text/x-wiki
The first Xbox Linux releases were in 2003, and Xbox Linux reached its peak of popularity in 2003-2006. To read more about it, see [[Historical Xbox Linux]]. Today, Xbox Linux has more of a hobbyist appeal.
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
It would be possible to use Xbox Linux to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Status==
A CD-installable distro is currently being worked on.
For a list of the current issues that are blocking functionality on Xbox Linux, see [[Xbox Linux Issues]].
For some guides and information that might help you get Xbox Linux up and running, see [[Xbox Linux Tips and Tricks]].
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
fd72f256dffd565ec1022d87b701700ba5298ee3
7166
7165
2022-07-03T04:13:27Z
VannevarKush
2546
wikitext
text/x-wiki
The first Xbox Linux releases were in 2003, and Xbox Linux reached its peak of popularity in 2003-2006. To read more about it, see '''[[Historical Xbox Linux]]'''. Today, Xbox Linux has more of a hobbyist appeal.
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
It would be possible to use Xbox Linux to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Status==
A CD-installable distro is currently being worked on.
For a list of the current issues that are blocking functionality on Xbox Linux, see '''[[Xbox Linux Issues]]'''.
For some guides and information that might help you get Xbox Linux up and running, see '''[[Xbox Linux Tips and Tricks]]'''.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, a member of the Xbox Linux team
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
7905649f353f24ad76f176257655b99f16ff7504
7179
7166
2022-07-04T02:39:55Z
VannevarKush
2546
wikitext
text/x-wiki
The first Xbox Linux releases were in 2003, and Xbox Linux reached its peak of popularity in 2003-2006. To read more about it, see '''[[Historical Xbox Linux]]'''. Today, Xbox Linux has more of a hobbyist appeal.
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
It would be possible to use Xbox Linux to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Status==
A CD-installable distro is currently being worked on.
For a list of the current issues that are blocking functionality on Xbox Linux, see '''[[Xbox Linux Issues]]'''.
For some guides and information that might help you get Xbox Linux up and running, see '''[[Xbox Linux Tips and Tricks]]'''.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, the founder of the Xbox Linux team
* [https://www.ridemybike.org/command1.pdf In the beginning... Was the Command Line] by Neal Stephenson
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
d2fe4de7a6de1d981775be9569e5e61a84df1b6a
Historical Xbox Linux
0
4041
7160
2022-07-03T04:01:39Z
VannevarKush
2546
Moving historical content to new page, to keep new and old info separate
wikitext
text/x-wiki
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
===Historical Distros===
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
===Installing Old Distros===
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
===Historical links===
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
c4323de7eab98a33bb6e47df8123f6717211b7ca
7161
7160
2022-07-03T04:02:34Z
VannevarKush
2546
Formatting
wikitext
text/x-wiki
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
94cda4f944cbc57b428faca7cfea19523a0a42eb
7163
7161
2022-07-03T04:04:44Z
VannevarKush
2546
Moving history data here
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
fd31334e2fc4b08dbec904c1eebf2ddc9ca56de2
7171
7163
2022-07-03T09:00:02Z
VannevarKush
2546
Some important info
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
97e4fbf6b48bd61629e4c620862c4cb6907145a2
7172
7171
2022-07-03T09:00:28Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks to mod the Xbox
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
f9e0b5939d11f4c418176a0d5decfe67a5e3e610
7173
7172
2022-07-03T09:02:29Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox was support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
83e83ed0179c0ed5d4fef67a6b4af039d7309730
7174
7173
2022-07-03T09:05:13Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
5cd12663fcf128d684a0357aade88980f7332f77
7175
7174
2022-07-03T09:05:57Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". xUbuntu is based on Ubuntu 5.10 (Breezy Badgar) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
5360f8014e8c13a7353289cef292fc03ac613016
7176
7175
2022-07-03T09:06:26Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
6a534f22c8de853ca20dd6608e7d199fc1521aaf
7180
7176
2022-07-04T05:40:23Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
624b2a2aeb2c096284db0715adf7ad4fe371d500
7181
7180
2022-07-04T21:38:57Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
b4558d4b263ac25d55ceeaeb96a32ffb294fda98
7182
7181
2022-07-04T21:39:39Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here].
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
0d04729e3dda35a8406b16ab34a4e81212ca5fed
7183
7182
2022-07-04T22:14:15Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here].
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
6453ccdb2ab272dbd05bf8e6ef76e59b9753428c
7184
7183
2022-07-04T22:25:12Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
4a8358ebbefbc3cc8b3f4bf6bfd72d3ab5037594
7185
7184
2022-07-04T22:34:49Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Oddly enough, a recent Xromwell worked for these while GentooX loader did not. The pro version attempts to boot from the CD, so be sure set your BIOS not to boot from CD if it doesn't work this way.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
1462ed1dc781db19937d9d776963e8d0ea7f28fb
7186
7185
2022-07-04T22:35:55Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Oddly enough, a recent Xromwell worked for these while GentooX loader did not. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
f248e769c7a5d1a418a1ab29d57191ba4be0fec3
7187
7186
2022-07-04T22:39:30Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here].
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here].
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005)
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
8afcf93f6b578c15e7cf3716151b21de9e7a597f
7197
7187
2022-07-05T00:45:48Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. Requires composite cables. Works from DVD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cables. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. Was not detected as bootable by Xromwell.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
9b6b0244caa79fc44c5f7237272876a5d81d9505
7198
7197
2022-07-05T00:51:22Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here].
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. Requires composite cables. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cables. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. Was not detected as bootable by Xromwell.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
8c8d87d65c1b6ac2fe7d649e8e7c58cdfb27ea65
7199
7198
2022-07-05T00:54:19Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here].
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. Requires composite cables. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cables. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. Was not detected as bootable by Xromwell.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
1470ca9157ae834c25f2d032216ef9c656466764
7200
7199
2022-07-05T01:11:08Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. Although it requires a composite cable, this is distro has a lot of toys and is fun to check out. Also, it works from DVD!
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. Requires composite cables. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cables. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. Was not detected as bootable by Xromwell.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
42bb0142738e00fae59b0bc1449ec72967b7c85c
Xbox Linux Issues
0
4038
7162
7119
2022-07-03T04:02:44Z
KaosEngineer
2482
link to MBR layout information was not working, extraneous | character removed
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 bytes starting at the beginning of the drive. Only 48 bytes are officially used; the rest are zeroes. On a stock-formatted Xbox hard drive, the contents of this config area don't seem to matter much to ind-BIOS (tested), although Insignia may use it in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
8ac812cd413858379bc5bcbc4131bc84be5870ef
7177
7162
2022-07-03T23:31:15Z
VannevarKush
2546
/* XBPartitioner Table and MBR Incompatibility */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
eaf291d09de0015f96023dcf5c59a9399a3fbc67
FATX
0
3708
7167
6967
2022-07-03T05:33:33Z
VannevarKush
2546
Adding earlier version of Linux fatx doc
wikitext
text/x-wiki
The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
== Implementations ==
{| class="wikitable
|-
! Name
! Platform
! Read/Write
! Description
|-
| Official
| Xbox
| Read/Write
| Official FATX implementation by Microsoft
|-
| [https://github.com/mborgerson/fatx fatxfs]
| GNU/Linux, macOS
| Read-Only
| [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]-based implementation
|}
== Further Reading ==
* Most up to date: [https://hackmd.io/DXo0p8VnQLy3XQ7YR1Ny_w?view The FATX filesystem]
* Archive of the xbox-linux project from 2010: [https://web.archive.org/web/20100617022009/http://www.xbox-linux.org/wiki/Differences_between_Xbox_FATX_and_MS-DOS_FAT Differences between Xbox FATX and MS-DOS FAT]
* An older version of that document including info about unknown (XBLA?) sectors [http://web.archive.org/web/20040616143741/http://www.xbox-linux.org/docs/hdpartfs.html]
* Private writings from 2002: [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
4ab9a79ec1d38c1a66333e5073afbd532c4d871b
7168
7167
2022-07-03T05:34:12Z
VannevarKush
2546
wikitext
text/x-wiki
The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
== Implementations ==
{| class="wikitable
|-
! Name
! Platform
! Read/Write
! Description
|-
| Official
| Xbox
| Read/Write
| Official FATX implementation by Microsoft
|-
| [https://github.com/mborgerson/fatx fatxfs]
| GNU/Linux, macOS
| Read-Only
| [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]-based implementation
|}
== Further Reading ==
* Most up to date: [https://hackmd.io/DXo0p8VnQLy3XQ7YR1Ny_w?view The FATX filesystem]
* Archive of the xbox-linux project from 2010: [https://web.archive.org/web/20100617022009/http://www.xbox-linux.org/wiki/Differences_between_Xbox_FATX_and_MS-DOS_FAT Differences between Xbox FATX and MS-DOS FAT]
* An [older version of that document http://web.archive.org/web/20040616143741/http://www.xbox-linux.org/docs/hdpartfs.html] including info about unknown (XBLA?) config sectors
* Private writings from 2002: [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
9e494f663e0c933eaf2cf8df6af441a5127a4e1f
7169
7168
2022-07-03T05:34:40Z
VannevarKush
2546
wikitext
text/x-wiki
The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
== Implementations ==
{| class="wikitable
|-
! Name
! Platform
! Read/Write
! Description
|-
| Official
| Xbox
| Read/Write
| Official FATX implementation by Microsoft
|-
| [https://github.com/mborgerson/fatx fatxfs]
| GNU/Linux, macOS
| Read-Only
| [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]-based implementation
|}
== Further Reading ==
* Most up to date: [https://hackmd.io/DXo0p8VnQLy3XQ7YR1Ny_w?view The FATX filesystem]
* Archive of the xbox-linux project from 2010: [https://web.archive.org/web/20100617022009/http://www.xbox-linux.org/wiki/Differences_between_Xbox_FATX_and_MS-DOS_FAT Differences between Xbox FATX and MS-DOS FAT]
* An [http://web.archive.org/web/20040616143741/http://www.xbox-linux.org/docs/hdpartfs.html older version of that document] including info about unknown (XBLA?) config sectors
* Private writings from 2002: [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
b859a891e4b429fccd5bfae436014b8e75e5fb38
7170
7169
2022-07-03T05:38:18Z
VannevarKush
2546
wikitext
text/x-wiki
The file system used on the Xbox is [[FATX]], a variant of FAT16/32 developed by Microsoft specifically for the Xbox.
The [[Config Sector]] contains the filesystem magic number, some basic filesystem metadata, and Xbox Live account information.
== Implementations ==
{| class="wikitable
|-
! Name
! Platform
! Read/Write
! Description
|-
| Official
| Xbox
| Read/Write
| Official FATX implementation by Microsoft
|-
| [https://github.com/mborgerson/fatx fatxfs]
| GNU/Linux, macOS
| Read-Only
| [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]-based implementation
|}
== Further Reading ==
* Most up to date: [https://hackmd.io/DXo0p8VnQLy3XQ7YR1Ny_w?view The FATX filesystem]
* Archive of the xbox-linux project from 2010: [https://web.archive.org/web/20100617022009/http://www.xbox-linux.org/wiki/Differences_between_Xbox_FATX_and_MS-DOS_FAT Differences between Xbox FATX and MS-DOS FAT]
* An [http://web.archive.org/web/20040616143741/http://www.xbox-linux.org/docs/hdpartfs.html older version of that document] including info about unknown (XBLA?) config sectors
* Private writings from 2002: [https://web.archive.org/web/20020617181617/http://www.tardis.ed.ac.uk:80/~lucien/computing/projects/xbox/XBOX-disk-layout.htm XBOX DISK LAYOUT v0.13]
e867dd7580517335cfd99b9e450dfe7778ec1ff6
Xbox Linux Tips and Tricks
0
4040
7178
7118
2022-07-03T23:34:08Z
VannevarKush
2546
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
c945e45a35db8f1e7e4513ba484bfdbf60956878
7195
7178
2022-07-05T00:03:55Z
VannevarKush
2546
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). The 1.4Ghz Tualatin with a 256KB cache will result in >2x performance. Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much more than 2x faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. If instead of a DVD drive, a hard drive is connected hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
1fc7a48131c535e34bf8ac2ac5c020921f503ae5
7196
7195
2022-07-05T00:04:36Z
VannevarKush
2546
/* hdb as Swap */
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). The 1.4Ghz Tualatin with a 256KB cache will result in >2x performance. Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much more than 2x faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. Instead of a DVD drive, if a hard drive is connected on hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
(todo)
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
4d9648fd6c3974ec5dc4efc85c758ce268511a96
File:Xbox DVD Media Compatibility Chart.png
6
4042
7188
2022-07-04T23:36:27Z
VannevarKush
2546
Shows compatibility of different types CD/DVD media with the stock Xbox DVD drives.
wikitext
text/x-wiki
Shows compatibility of different types CD/DVD media with the stock Xbox DVD drives.
8404fe5d419c198439bd6967fdc98e9ce9717d66
DVD Drive
0
3704
7189
6110
2022-07-04T23:37:26Z
VannevarKush
2546
Added DVD media compatibility chart
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
For a list of drives Microsoft used in the Xbox, see [[Hardware Revisions]].
[[File:Xbox DVD Media Compatibility Chart.png]]
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition <br><br> This will be set to 0x01 by the kernel when the last challenge was verified. This is done by sending the same challenge again, the challenge id / value is not reset.
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated or authentication in progress <br><br> This will be set to 0x01 by the kernel when the first challenge is send.
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
c098dc6e092e97f3b1a3e99129b5e7f1ae1a1de8
7190
7189
2022-07-04T23:45:36Z
VannevarKush
2546
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
For a list of drives Microsoft used in the Xbox, see [[Hardware Revisions]].
Xbox DVD drives are dying left and right. It is not advisable to require anything to be launched from DVD anymore, although it can be provided as an option for those who have never upgraded their Xbox hard drives (and still have a working DVD drive...)
[[File:Xbox DVD Media Compatibility Chart.png]]
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition <br><br> This will be set to 0x01 by the kernel when the last challenge was verified. This is done by sending the same challenge again, the challenge id / value is not reset.
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated or authentication in progress <br><br> This will be set to 0x01 by the kernel when the first challenge is send.
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
fd4fa1f2d579b070f0feff06da1113c43a54343c
7191
7190
2022-07-04T23:46:25Z
VannevarKush
2546
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
For a list of drives Microsoft used in the Xbox, see [[Hardware Revisions]].
Xbox DVD drives are dying left and right. It is not advisable to require any new software to be launched from DVD, although this can be provided as an option for those who have never upgraded their Xbox hard drives (and still have a working DVD drive...)
[[File:Xbox DVD Media Compatibility Chart.png]]
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition <br><br> This will be set to 0x01 by the kernel when the last challenge was verified. This is done by sending the same challenge again, the challenge id / value is not reset.
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated or authentication in progress <br><br> This will be set to 0x01 by the kernel when the first challenge is send.
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
e757b434263acd6a877cba45a4c94c5ea2c332b0
7192
7191
2022-07-04T23:47:35Z
VannevarKush
2546
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
For a list of drives Microsoft used in the Xbox, see [[Hardware Revisions]].
Xbox DVD drives are dying left and right. It is not advisable to require any new software to be launched from optical media, although this can be provided as an option for those who have never upgraded their Xbox hard drives (and still have a working DVD drive...)
[[File:Xbox DVD Media Compatibility Chart.png]]
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition <br><br> This will be set to 0x01 by the kernel when the last challenge was verified. This is done by sending the same challenge again, the challenge id / value is not reset.
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated or authentication in progress <br><br> This will be set to 0x01 by the kernel when the first challenge is send.
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
1f7100af30e8b49bbcb94a3e5a7f56811635fdc5
7193
7192
2022-07-04T23:50:07Z
VannevarKush
2546
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
For a list of drives Microsoft used in the Xbox, see [[Hardware Revisions]].
Xbox DVD drives are dying left and right. It is not advisable to require any new software to be launched from optical media, although this can be provided as an option for those who have never upgraded their Xbox hard drives (and still have a working DVD drive...)
It is possible to replace an Xbox DVD drive with a PC DVD drive with [https://www.youtube.com/watch?v=lpEYLoA5jrc some modification].
[[File:Xbox DVD Media Compatibility Chart.png]]
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition <br><br> This will be set to 0x01 by the kernel when the last challenge was verified. This is done by sending the same challenge again, the challenge id / value is not reset.
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated or authentication in progress <br><br> This will be set to 0x01 by the kernel when the first challenge is send.
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
e43c70d0d148bb9bc14253eb98359f7367660adc
7194
7193
2022-07-04T23:50:45Z
VannevarKush
2546
wikitext
text/x-wiki
The Xbox contains a DVD Drive which can read [[Xbox Game Disc|Xbox Game Discs]].
For a list of drives Microsoft used in the Xbox, see [[Hardware Revisions]].
Xbox DVD drives are dying left and right. It is not advisable to require any new software to be launched from optical media, although this can be provided as an option for those who have never upgraded their Xbox hard drives (and still have a working DVD drive...)
It is possible to replace an Xbox DVD drive with a PC DVD drive with [https://www.youtube.com/watch?v=lpEYLoA5jrc some modification]. (What kind of drives work for this?)
[[File:Xbox DVD Media Compatibility Chart.png]]
== Extra commands / modifications ==
=== IDENTIFY ===
{{FIXME|reason=Move data from http://xboxdevwiki.net/Porting_an_Operating_System_to_the_Xbox_HOWTO#DVD_Driver}}
=== READ DVD STRUCTURE ===
{{FIXME|reason=Describe how SS is accessed}}
=== MODE SENSE and MODE SELECT ===
Page 0x3E is used for security. Accessed through ''MODE SELECT 10'' and ''MODE SENSE 10''.
{{FIXME|reason=Describe the format in detail}}
{| class="wikitable"
!Offset || Field || Type || Notes
|-
| 0 || Mode page || u8 ||
|-
| 1 || Length || u8 || Excluding this and the field before. Should always be 18
|-
| 2 || Partition select || u8 || 0x00 = Video partition <br> 0x01 = Xbox partition <br><br> This will be set to 0x01 by the kernel when the last challenge was verified. This is done by sending the same challenge again, the challenge id / value is not reset.
|-
| 3 || Unknown || u8 || If this is not 1, the kernel will reject this as an XGD (but still allow normal access?!{{citation needed}})
|-
| 4 || Authenticated || u8 || 0x00 = Not authenticated <br> 0x01 = Already authenticated or authentication in progress <br><br> This will be set to 0x01 by the kernel when the first challenge is send.
|-
| 5 || Booktype (0xF0) and Bookversion (0x0F) || u8 || Booktype 0xD is used for Xbox games. This must match info from the SS.
|-
| 6 || Unknown || u8 || ?
|-
| 7 || Challenge id || u8 ||
|-
| 8 || Challenge value || u32 ||
|-
| 12 || Response value || u32 ||
|-
| 16 || Unknown || u8 || Unused?
|-
| 17 || Unknown || u8 || Unused?
|-
| 18 || Unknown || u8 || Unused?
|-
| 19 || Unknown || u8 || Unused?
|}
== DVD authentication ==
{{FIXME|reason=part of the [[Kernel]], so maybe document this elsewhere?}}
== References and links ==
* [http://web.archive.org/web/20151026074806/http://home.comcast.net/~admiral_powerslave/dvddrives.html List of original Xbox DVD drives]
* https://multimedia.cx/eggs/interfacing-to-an-xbox-optical-drive/
981d5f52b022f6826a58dc2e4e67855f64940305
Historical Xbox Linux
0
4041
7201
7200
2022-07-05T01:26:29Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. Although it requires a composite cable, this is distro has a lot of toys and is fun to check out. Also, it works from DVD!
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. Requires composite cables. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cables. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
9a5c4de02252f2a8000a661305a2b9978ac44c75
7202
7201
2022-07-05T01:29:12Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
'''These links to isos need testing; they are just what I found online. Not all isos work and some seem to require composite cables...'''
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. Although it requires a composite cable, this is distro has a lot of toys and is fun to check out. Also, it works from DVD!
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD. Worked with component cables.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. Requires composite cables. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cables. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
7af8d8f094367dc90c7676d37682a712dd5f3241
7203
7202
2022-07-05T01:42:21Z
VannevarKush
2546
/* Historical Distros */ Initial testing info added
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
cc0301006eca05b6a20f79121199c8bb59a9899c
7210
7203
2022-07-05T20:37:03Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [the announcement https://sourceforge.net/p/xbox-linux/mailman/message/10300266/]. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
88c61db1b96cdf229fcf0562c844df5b0f4162b3
7211
7210
2022-07-05T20:37:33Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
bdfe8cf93ed6544a82ed40fa7c9e708e2a99b945
7212
7211
2022-07-05T20:39:56Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here]. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
b21d65a14e51da5baa566f0e4ca6a98611752e4b
7213
7212
2022-07-05T20:41:25Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
ac4133ce4592f2ad5ec377b01020bbfc409f10ec
7214
7213
2022-07-05T20:46:03Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here]) The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
5df3a938d7a2e5bf1098edf0657ba16104d56114
7215
7214
2022-07-05T20:55:52Z
VannevarKush
2546
Adding timeline info
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here])
The first kernel boot on the Xbox was on August 13, 2002, and the first graphical desktop environment was KDE, run on October 7, 2002, and Mandrake Linux for Xbox was released soon thereafter. By December 17, 2002, the Cromwell bootloader was ready to run Xbox Linux, and the Xbox Linux project was in full swing.
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
bc6279010a6459e2252ff5ae81c251dcea57eac0
7216
7215
2022-07-05T21:31:25Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadline was extended [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here])
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
A number of distributions were released, built around the Xbox Linux-patched kernel.
* November 15, 2002 - Microsoft Xbox released
* May 23, 2003 - Xbox Linux project founded
* July 2, 2002 - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003
* August 13, 2003 - first kernel boot
* October 7, 2003 - first graphical desktop environment (KDE)
* October 9, 2003 - Mandrake Linux 9.1 released for Xbox
* December 17, 2003 - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* December 31, 2003 - Michael Robertson extends the prize deadline for the remaining prize.
==Historical Distros==
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
59280bafad9a6a972fcf81ed52cfa08155d8766b
7219
7216
2022-07-05T23:02:40Z
VannevarKush
2546
Added timeline
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadli[https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here])
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* November 15, 2002 - Microsoft Xbox released
* May 23, 2003 - Xbox Linux project founded
* July 2, 2002 - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003
* August 13, 2003 - first kernel boot
* October 7, 2003 - first graphical desktop environment (KDE)
* October 9, 2003 - Mandrake Linux 9.1 released for Xbox. Users had to replace the TSOP using hardware modification.
* December 17, 2003 - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* December 31, 2003 - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* March 29, 2003 - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* July 4, 2003 - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* July 7, 2003 - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* August 11, 2003 - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
7a8d488e502e807d0f8006820784a38bff9ad1e3
7220
7219
2022-07-05T23:03:25Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadli[https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here])
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* November 15, 2002 - Microsoft Xbox released
* May 23, 2003 - Xbox Linux project founded
* July 2, 2002 - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003
* August 13, 2003 - first kernel boot
* October 7, 2003 - first graphical desktop environment (KDE)
* October 9, 2003 - Mandrake Linux 9.1 released for Xbox. Users had to replace or flash the TSOP.
* December 17, 2003 - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* December 31, 2003 - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* March 29, 2003 - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* July 4, 2003 - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* July 7, 2003 - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* August 11, 2003 - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
6670514b30b8bb590a825660c92d3b68022f43b0
7221
7220
2022-07-05T23:15:20Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadli[https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here])
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* November 15, 2001 - Microsoft Xbox released
* c. [October 2002 https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html] - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* May 23, 2003 - Xbox Linux project founded
* July 2, 2002 - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003
* August 13, 2003 - first kernel boot
* October 7, 2003 - first graphical desktop environment (KDE)
* October 9, 2003 - Mandrake Linux 9.1 released for Xbox. Users had to replace or flash the TSOP.
* December 17, 2003 - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* December 31, 2003 - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* March 29, 2003 - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* July 4, 2003 - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* July 7, 2003 - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* August 11, 2003 - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
61ea1a1e75de6d790a578f880ea31407ccaa16a9
7222
7221
2022-07-05T23:20:04Z
VannevarKush
2546
Some corrections, adding release dates
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadli[https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here])
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* c. [October 13 2002 (how?) https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html] - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* November 15, 2001 - Microsoft Xbox released in United States
* February 22, 2002 - Xbox released in Japan
* March 14, 2002 - Xbox released in Europe and Australia
* May 23, 2002 - Xbox Linux project founded
* July 2, 2002 - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003
* August 13, 2002 - First kernel boot
* October 7, 2002 - First graphical desktop environment (KDE)
* October 9, 2002 - Mandrake Linux 9.1 released for Xbox. Users had to replace or flash the TSOP.
* December 17, 2002 - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* December 31, 2002 - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* March 29, 2003 - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* July 4, 2003 - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* July 7, 2003 - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* August 11, 2003 - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
2755652c01dc1897713b405a7dc7c0ae9c00bbf7
7223
7222
2022-07-05T23:20:26Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes] with the vision of getting cheap Linux PCs into the hands of the masses. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM. (was this claimed? the prize deadli[https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ here])
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)] - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* November 15, 2001 - Microsoft Xbox released in United States
* February 22, 2002 - Xbox released in Japan
* March 14, 2002 - Xbox released in Europe and Australia
* May 23, 2002 - Xbox Linux project founded
* July 2, 2002 - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003
* August 13, 2002 - First kernel boot
* October 7, 2002 - First graphical desktop environment (KDE)
* October 9, 2002 - Mandrake Linux 9.1 released for Xbox. Users had to replace or flash the TSOP.
* December 17, 2002 - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* December 31, 2002 - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* March 29, 2003 - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* July 4, 2003 - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* July 7, 2003 - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* August 11, 2003 - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
bd0a72a0bd263e7a283b7c5842c6de0e86c6c14a
7224
7223
2022-07-05T23:22:26Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes]. (He was also being sued by Microsoft at the time.) One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)] - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* November 15, 2001 - Microsoft Xbox released in United States
* February 22, 2002 - Xbox released in Japan
* March 14, 2002 - Xbox released in Europe and Australia
* May 23, 2002 - Xbox Linux project founded
* July 2, 2002 - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003
* August 13, 2002 - First kernel boot
* October 7, 2002 - First graphical desktop environment (KDE)
* October 9, 2002 - Mandrake Linux 9.1 released for Xbox. Users had to replace or flash the TSOP.
* December 17, 2002 - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* December 31, 2002 - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* March 29, 2003 - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* July 4, 2003 - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* July 7, 2003 - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* August 11, 2003 - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
ff9371b6091b078c58fe6e34b1c3b7b80b1fc8f7
7225
7224
2022-07-05T23:24:34Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, later anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes], in order to speed the development of Xbox Linux. (He was also being sued by Microsoft at the time.)
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded
* '''July 2, 2002''' - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9.1 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003 - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
85c0fa84975c2639157c0cb7346888ea555111ca
7226
7225
2022-07-05T23:24:55Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, later anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes], in order to speed the development of Xbox Linux. (He was also being sued by Microsoft at the time.)
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded
* '''July 2, 2002''' - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9.1 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
e018d04a2ecfa3041ffff2543e694bafbeca7c23
7227
7226
2022-07-05T23:27:03Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, later anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes], in order to speed the development of Xbox Linux. (He was also being sued by Microsoft at the time.)
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded
* '''July 2, 2002''' - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts are made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
3944e02458e5bada407ab9a6a912837f62858cb3
7228
7227
2022-07-05T23:29:08Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The Xbox Linux project was founded on May 23, 2002 by Michael Stiehl. Michael Robertson, the CEO of Lindows.com, later anonymously offered [https://www.cnet.com/culture/squeeze-linux-into-xbox-win-200000/ two $100,000 prizes], in order to speed the development of Xbox Linux. (He was also being sued by Microsoft at the time.)
The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded
* '''July 2, 2002''' - Michael Robertson offers two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. One of the prizes was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
2e34a4563bc34a8dfb418210bf2ccaecb00c98bf
7229
7228
2022-07-05T23:31:58Z
VannevarKush
2546
Moved content from intro
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
cd2a158fdbd2e7791f3ea5d923327129bc2add00
7230
7229
2022-07-05T23:32:36Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS/bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - Mechassault exploit released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
77fb8d3b6647ece65219321e6d8e4362bc7b9af3
7231
7230
2022-07-05T23:33:01Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html October 13 2002 (how?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS/bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
c6391423d8b684a026bf25590212457dbcb22349
7232
7231
2022-07-05T23:34:26Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang]
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS/bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
c5e9010adf43ed9fc3bec64b9af0d964500ef56f
7233
7232
2022-07-05T23:35:05Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS/bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The font exploit is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
e3e977b661079f0f81703e24a0537bf3be61d54f
7234
7233
2022-07-05T23:36:51Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS/bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[https://xboxdevwiki.net/Exploits#Font_hacks font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
574e6b57a06f80876ceb0248903753ce197d37de
7235
7234
2022-07-05T23:37:18Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS/bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
ccc119a2292241f344666c584acdc49dc6bb46bf
7236
7235
2022-07-05T23:37:42Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS/bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the 007 Nightfire hack by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
1a0d2f6187755d901486a1ba5f5d81e125ff9d66
7237
7236
2022-07-05T23:40:28Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|BIOS/bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
d1244e7083f23928c2f10dda6be3362e6ace81c3
7238
7237
2022-07-05T23:42:28Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a [[Cromwell|bootloader]]) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - Cromwell BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
07452893b37b0293321ed58f6781ff05c8185cb8
7239
7238
2022-07-05T23:43:10Z
VannevarKush
2546
/* Timeline */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, although they exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
2d785f852098d8f57c5f0b4a711f2b7124b0b461
7240
7239
2022-07-05T23:45:26Z
VannevarKush
2546
/* Installing Old Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
ab51f156da0a70834b5d477fc0a0a66526b694c4
7241
7240
2022-07-05T23:46:07Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
==See Also==
*[[Xbox Linux]]
c29f2705a465a0e6ca82871972056b7584556f3a
7242
7241
2022-07-05T23:50:00Z
VannevarKush
2546
/* Historical links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage The "Old" Xbox Linux wiki], which was migrated to xbox-linux.org. Not all articles were migrated.
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "old" xbox-linux website], before migrating content to SourceForge.
==See Also==
*[[Xbox Linux]]
584e8b0157a8944af76e2d2428de5bc0d33b5997
7243
7242
2022-07-05T23:59:29Z
VannevarKush
2546
/* Historical links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "old" xbox-linux website], before the website was replaced with the "new wiki".
==See Also==
*[[Xbox Linux]]
fa539a71cf01003a8245106804c772d0132afba5
7244
7243
2022-07-06T00:00:04Z
VannevarKush
2546
/* Historical links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''live-linux''' A liveCD based Linux, may have been able to install to HDD; it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It appears to mount a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
==See Also==
*[[Xbox Linux]]
f75304b840fcddf13ac1d1476381a9869dbc8a3d
Xbox Linux Tips and Tricks
0
4040
7204
7196
2022-07-05T03:02:52Z
VannevarKush
2546
Added cramfs for initramfs extraction
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). The 1.4Ghz Tualatin with a 256KB cache will result in >2x performance. Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much more than 2x faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. Instead of a DVD drive, if a hard drive is connected on hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
The initramfs files provided with Xbox Linux can come in multiple formats. To check what format it is, type
<code>file [initramfs filename]</code>
'''cramfs'''
If the filetype is "Linux Compressed ROM File System data", the image type is cramfs. To extract:
<code>sudo fsck.cramfs --extract=[destination] [initramfs filename]</code>
The destination will be created if it doesn't exist.
To re-pack as cramfs, use
<code>mkcramfs [extracted initramfs directory] [destination filename]</code>
'''gzip'''
'''Gentoo igz'''
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
f63fc52d0e8c6b3a4bcb3c8c9aa74a76433ba817
7205
7204
2022-07-05T03:11:14Z
VannevarKush
2546
cramfs
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). The 1.4Ghz Tualatin with a 256KB cache will result in >2x performance. Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much more than 2x faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. Instead of a DVD drive, if a hard drive is connected on hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
The initramfs files provided with Xbox Linux can come in multiple formats. To check what format it is, type
<code>file [initramfs filename]</code>
====cramfs====
If the result of the <code>file</code> command is "Linux Compressed ROM File System data", the format is cramfs. It should be little endian.
'''Extracting'''
<code>fsck.cramfs --extract=[DESTINATION] [TARGET]</code>
The destination will be created if it does not exist.
'''Compressing'''
<code>mkcramfs [INITRAMFS_CONTENTS_DIRECTORY] [OUTPUT_FILE]</code>
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
2498c96cc93e31e8381a1b6a07e1231c9fc6ab33
7206
7205
2022-07-05T03:12:05Z
VannevarKush
2546
/* cramfs */
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). The 1.4Ghz Tualatin with a 256KB cache will result in >2x performance. Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much more than 2x faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. Instead of a DVD drive, if a hard drive is connected on hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
The initramfs files provided with Xbox Linux can come in multiple formats. To check what format it is, type
<code>file [initramfs filename]</code>
====cramfs====
If the result of the <code>file</code> command is "Linux Compressed ROM File System data", the format is cramfs. It should be little endian.
Extracting cramfs:
<code>fsck.cramfs --extract=[DESTINATION] [TARGET]</code>
The destination will be created if it does not exist.
Compressing cramfs:
<code>mkcramfs [INITRAMFS_CONTENTS_DIRECTORY] [OUTPUT_FILE]</code>
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
ca56edfe1cf0cb42289d9164bfad549876ea691e
7207
7206
2022-07-05T03:12:20Z
VannevarKush
2546
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). The 1.4Ghz Tualatin with a 256KB cache will result in >2x performance. Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much more than 2x faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. Instead of a DVD drive, if a hard drive is connected on hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
The initramfs files provided with Xbox Linux can come in multiple formats. To check what format it is, type
<code>file [initramfs filename]</code>
====cramfs====
If the result of the <code>file</code> command is "Linux Compressed ROM File System data", the format is cramfs. It should be little endian.
Extracting cramfs:
<code>fsck.cramfs --extract=[DESTINATION] [TARGET]</code>
The destination will be created if it does not exist.
Compressing cramfs:
<code>mkcramfs [INITRAMFS_CONTENTS_DIRECTORY] [OUTPUT_FILE]</code>
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
7c828b394224fc03ec98d9175f509b049d1f1bbf
7208
7207
2022-07-05T03:12:59Z
VannevarKush
2546
/* Unpacking and Repacking an initramfs/initrd */
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). The 1.4Ghz Tualatin with a 256KB cache will result in >2x performance. Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much more than 2x faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. Instead of a DVD drive, if a hard drive is connected on hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
The initramfs files provided with Xbox Linux can come in multiple formats. To check what format it is, type
<code>file [INITRAMFS_FILENAME]</code>
====cramfs====
If the result of the <code>file</code> command is "Linux Compressed ROM File System data", the format is cramfs. It should be little endian.
Extracting cramfs:
<code>fsck.cramfs --extract=[DESTINATION] [TARGET]</code>
The destination will be created if it does not exist.
Compressing cramfs:
<code>mkcramfs [INITRAMFS_CONTENTS_DIRECTORY] [OUTPUT_FILE]</code>
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
c026ce1ea3f7b9701b95d5434cdda2a3d63e0818
7209
7208
2022-07-05T10:14:29Z
VannevarKush
2546
/* Unpacking and Repacking an initramfs/initrd */
wikitext
text/x-wiki
Here are some various tips that may help you get [[Xbox Linux]] up and running, and beyond.
===128MB RAM Upgrade===
Yep, it helps here too. Any modern Linux distro that isn't built for lightweight hardware is probably going to assume there is a lot more memory available than the Xbox has. The more memory and the more non-lightweight services in use, the more swapping is going to happen. With 64MB of RAM a lot of swapping is going to take place during any memory-intensive operation, slowing Linux to a crawl. So the 128MB of RAM can give Linux some more breathing room. More minimal distros may be able to run fine with a (very) lightweight desktop with 64MB. The vanilla Gentoo LiveCD command line environment worked fine until compiling. But even operations like extracting files take forever and could be done faster with less disk access with more RAM.
===CPU Upgrade===
Although a more advanced/expensive mod, upgrading the CPU will cause Linux to run that much faster. (when it's not bottlenecked on swapping, that is). The 1.4Ghz Tualatin with a 256KB cache will result in >2x performance. Gentoo compilation was tested on a 1.4GHz 128MB Xbox and was much more than 2x faster than on a stock Xbox.
===hdb as Swap===
Swapping to the same drive as data is being read from is far from ideal. Instead of a DVD drive, if a hard drive is connected on hdb, it can be used exclusively (or primarily) for swap. An unlocked stock Xbox hard drive could be used for this (back it up first!) but better performance will be obtained with an SSD. Small SSDs are not very expensive, and if it's just used for swapping, it can be easily replaced if it dies. (and do you really plan to use it for swap all day every day? It would only incur wear on the storage while running Xbox Linux. Does Linux have any sort of write levelling support for swap?)
===USB Stick as Swap===
When booting from a liveCD, if you you don't want to alter data on hda but swap is needed to increase available memory, a USB stick can be mounted as swap. This can be added early in the startup script if needed, in the initrd. This is very slow but can work for bootstrapping things to the point of being able to create swap on a hard drive.
===Hard Drive on hdb as a Bootable CD===
This was tested with a Gentoo minimal install CD. A partition was created on hdb using a PC, and formatted with vfat. The partition was set as the cd root in the boot options in linuxboot.cfg (it didn't need to change if the hard drive was fomratted as a single partition. If it needs to change, e.g. to /dev/hdb1 instead of /dev/hdb, the linuxboot.cfg, kernel, and initrd from the CD can be copied to the appropriate locations your hard drive, modified, and launched from there if you want to modify them without burning a new CD.)
This may not work for all live CDs. It didn't work with historical GentooX. If it doesn't work, modification of the startup script is probably required to mount from hdb more generically instead of doing something CD or ISO oriented.
The hard drive can be formatted with multiple partitions, one for the CD files, and swap can also be set up there, so as to have swap available without needing to modify hda or use a USB stick.
===Using the Extra 2GB on a 10GB FATX Hard Drive===
Not all stock Xbox hard drives are 8GB, some are 10GB. Look up your model number if you're not sure. If you have a spare 10GB stock hard drive sitting around, back it up. Then small native Linux builds can be installed to the 2GB at the end of the drive (remember to have swap), and that area of the drive can also be used for experimentation. Or, install a (small) historical Xbox Linux build like X-DSL to that hard drive as a native install, which should handle the partitioning automatically. (Note that attempting a native install typically wipes out anything after drive E, and also is not compatible with XBPartitioner formatting. It will wipe out any XBPartitioner information, and a format with XBPartitioner after that will break Linux. It is fine though to wipe out the XBPartitioner information by installing native Linux, if you intend to never use XBPartitioner again on that drive)
===Using xbox7887's Serial USB Adapter (on the LPC bus)===
xbox7887 has created an [https://github.com/XboxDev/serial-usb-adapter open source SuperIO board], which connects to the LPC bus on the Xbox (more commonly known as the debug port; the place where you put a modchip.) SuperIO provides various legacy I/O technologies on a single chip, and was used on computer motherboards to provide PS/2, serial, parallel, floppy, and other interfaces. The LPC bus is a PCI device that can have various peripherals connected to it.
SuperIO was used in original Xbox dev kits (the clear ones, not the green ones.) It provided a means of doing Xbox kernel debugging over a serial connection provided by the SuperIO chip via the LPC. This is what these boards are typically used for.
Because LPC is a standard PC technology that is supported by Linux, devices on the LPC bus can be accessed from within Linux. Although xbox7887's board only provides access to one serial port, it would be theoretically possible to build out a board that supported parallel ports, floppy drives, etc... (although floppy drive support has been dropped from Linux)
An important note is that there may be very few Xbox bioses that support this board, at least if the Xbox BIOS is booted first. (not tested with Cromwell flashed to TSOP/modchip). A bios that is known to work is X2 4981.67_256k. Other BIOSes may work but there was some confusion during the testing, so this part could be wrong.
Here are the kernel config options that should needed to support this board on Xbox (not sure what's going on with formatting here.) (should these be merged into the default xbox config options? they might need to be re-tested first)
<code>
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
# CONFIG_SERIAL_8250_FINTEK is not set
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=2
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
CONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_LPSS is not set
# CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y</code>
Note that this board can be used for debugging the Xbox kernel over serial, if the proper kernel config options are set for that. It can also provide a console over serial, I guess if you wanted to run headless without networking.
Also note that serial over USB is a perfectly workable option if you don't have one of these boards on hand :)
===Using USB serial devices===
[Needs kernel config options, which once determined should probably be considered for merging into the xbox defconfig]
===Using Serial (USB or xbox7887's SuperIO board) for Kernel Debugging===
Kernel debugging was accomplished successfully using gdb, over both USB serial and xbox7887's board.
Note that it is often better to do kernel debugging by running your kernel a non-Xbox machine or VM, if the Xbox hardware itself isn't required during development. Text output can often be sufficient to diagnose issues without the overhead of a setup like this.
Since SSH can't connect early enough to debug the kernel on startup (can it be used at all?), a serial connection can be used as soon as it's available. Both the LPC and USB controllers are PCI devices, so they will become active at PCI init.
Here are my notes on doing this in menuconfig, which should probably be translated into actual config options:
<code>
Device Drivers -> USB Support
Enable serial, Kernel
Device Drivers -> Character Devices -> Serial Drivers:
8250/16550 Compatible serial support
Support 8250_core.* kernel options (DEPRECATED) - default
Console on 8250/16550 and compatible serial port
8250/16550 PCI device support
1 port to register at runtime</code>
===Unpacking and Repacking an initramfs/initrd===
The initramfs files provided with Xbox Linux can come in multiple formats. To check what format it is, type
<code>file [INITRAMFS_FILENAME]</code>
====cramfs====
If the result of the <code>file</code> command is "Linux Compressed ROM File System data", the format is cramfs. It should be little endian.
Extracting cramfs:
<code>fsck.cramfs --extract=[DESTINATION] [TARGET]</code>
The destination will be created if it does not exist.
Compressing cramfs:
<code>mkcramfs [INITRAMFS_CONTENTS_DIRECTORY] [OUTPUT_FILE]</code>
====gzip====
If your initramfs has a .gz extension, chances are it's in gzip format. <code>file</code> will report <code>gzip compressed data</code>.
Extracting gzip:
Your file must have a ".gz" extension to work with gunzip. If it doesn't have one, rename it.
<code>gunzip -c [INIT_RAM_FS_FILE]</code>
A new file will appear in the folder; the filename without the gz extension.
Now use <code>file [EXTRACTED_FILE]</code> to see what the filetype of the extracted file is. If it is an ext2 filesystem, you can mount and edit it.
Compressing gzip:
<code></code>
==See Also==
*[[Xbox Linux Issues]]
*[[Xbox Linux]]
aee55e93ce36a7e893155f94c13026b519183854
Xbox Linux
0
4039
7217
7084
2022-07-05T22:31:27Z
VannevarKush
2546
Moving page [[Linux]] to [[Xbox Linux]] (so people finding the page on google know what they are reading about)
wikitext
text/x-wiki
The first Xbox Linux releases were in 2003, and Xbox Linux reached its peak of popularity in 2003-2006. To read more about it, see '''[[Historical Xbox Linux]]'''. Today, Xbox Linux has more of a hobbyist appeal.
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
It would be possible to use Xbox Linux to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Status==
A CD-installable distro is currently being worked on.
For a list of the current issues that are blocking functionality on Xbox Linux, see '''[[Xbox Linux Issues]]'''.
For some guides and information that might help you get Xbox Linux up and running, see '''[[Xbox Linux Tips and Tricks]]'''.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, the founder of the Xbox Linux team
* [https://www.ridemybike.org/command1.pdf In the beginning... Was the Command Line] by Neal Stephenson
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
d2fe4de7a6de1d981775be9569e5e61a84df1b6a
Linux
0
4037
7218
7179
2022-07-05T22:32:02Z
VannevarKush
2546
Moving page to Xbox Linux, replaced with redirect
wikitext
text/x-wiki
#REDIRECT [[Xbox Linux]]
e678c43d3692e66ffbe57e77b5a4c0d10eea923b
Xbox Linux Issues
0
4038
7245
7177
2022-07-06T00:23:59Z
VannevarKush
2546
wikitext
text/x-wiki
[[Link title]]Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
A minor issue, in that Xromwell works fine as a workaround. However, booting into Cromwell directly can be (very) convenient for development, and for easily boot into Linux from the OpenXenium BIOS menu.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
16a4f13f7a0f36ceb9e000205c5defe81ce7397f
7246
7245
2022-07-06T00:24:56Z
VannevarKush
2546
wikitext
text/x-wiki
[[Link title]]Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell (Cromwell as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot can be (very) convenient for development, and to allow the user to easily boot into Linux from the OpenXenium BIOS menu.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
6656556003524c9108859f2947732907fc788b22
7247
7246
2022-07-06T00:25:08Z
VannevarKush
2546
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell (Cromwell as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot can be (very) convenient for development, and to allow the user to easily boot into Linux from the OpenXenium BIOS menu.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
479ca22df23c9efd8876ef28454b2dd0ea976da5
7248
7247
2022-07-06T00:25:46Z
VannevarKush
2546
/* Cromwell incompatibility with OpenXenium */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell (Cromwell as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot would be (very) convenient for Xbox Linux development, and it would allow the user to easily boot into Linux from the OpenXenium BIOS menu.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
aef888382491b4e659b8987b080964bcefff5c04
7249
7248
2022-07-06T00:26:24Z
VannevarKush
2546
/* Cromwell incompatibility with OpenXenium */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell ([[Cromwell]] as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot would be (very) convenient for Xbox Linux development, and it would allow the user to easily boot into Linux from the OpenXenium BIOS menu.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
e1ad232b5f18176f2d530e889b945a06499d8092
Cromwell
0
4043
7250
2022-07-06T00:42:25Z
VannevarKush
2546
Saving work
wikitext
text/x-wiki
Cromwell is a clean room reverse engineered BIOS for the Microsoft Xbox, as well as a bootloader for Xbox Linux. It is often shipped as the default BIOS for Xbox modchips, since Cromwell is a fully legal custom BIOS for the Xbox, and it also has BIOS flashing ability. It has also been used as a basis for various low level Xbox tools, and custom versions have been released (such as XBlast OS).
'''Xromwell''' is the same thing as Cromwell, but it runs as an xbe from the Xbox hard drive.
The current active Cromwell source code repo is [available here https://github.com/XboxDev/cromwell]
Early versions of Cromwell will not be compatible with Linux versions that use the 2.6 kernel and above. (what versions?) This usually is not an issue.
Some versions of Cromwell require
The disk cloning and partition management app Chimp uses a modified version of Cromwell to boot. It searches for the kernel and initrd in alternate locations that are specific to Chimp.
==GentooX Loader==
GentooX Loader is a
==XBlast OS==
XBlast OS was made for use with the Xblast modchip. This modchip provides specific low-level functionalities, like flashing the TSOP while the modchip is plugged in (with an additional wire soldered to the motherboard). If run from an Xbox TSOP, it can
==Media Checking Process==
(todo)
==See Also==
*[[Historical Xbox Linux]]
*[[Xbox Linux]]
73009351c444d1eaf6b9b7e288465ebbf4ab30bf
Historical Xbox Linux
0
4041
7251
7244
2022-07-06T00:52:15Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[live-linux https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736]''' An early Linux related to the mechinstaller hack(?); also worked from LiveCD,it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
==See Also==
*[[Xbox Linux]]
44b1eb86b5abcce301b37361135c793f6dddb7a1
7252
7251
2022-07-06T00:52:40Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux related to the mechinstaller hack(?); also worked from LiveCD,it was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
==See Also==
*[[Xbox Linux]]
d24759186b0dfcf759526c0f2f637e4433c411e9
7253
7252
2022-07-06T00:55:00Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booed from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
==See Also==
*[[Xbox Linux]]
e4bddd818e802197e9651747299d7e4c74238b2a
7254
7253
2022-07-06T01:05:40Z
VannevarKush
2546
/* Historical links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booed from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros.
==See Also==
*[[Xbox Linux]]
214b8eac211c9eedb2aa09b665bad0a3ea3c52f2
7255
7254
2022-07-06T01:06:20Z
VannevarKush
2546
/* Historical links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booed from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros. The links don't work, though.
==See Also==
*[[Xbox Linux]]
6def9a60a164653439b13181628d9bf8ef1a4716
7256
7255
2022-07-06T01:06:50Z
VannevarKush
2546
/* Historical links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booed from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros. The download links aren't archived, though; mainly useful for seeing filenames.
==See Also==
*[[Xbox Linux]]
eabe70d1a44ee9624de1d60959ff6bc36143d97d
7257
7256
2022-07-06T01:07:52Z
VannevarKush
2546
/* Historical links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booed from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros. The download links aren't archived, though; mainly it's useful for seeing the filenames.
==See Also==
*[[Xbox Linux]]
c4a4839db2fc15396df6eab8b8a83ae5310eea8d
7258
7257
2022-07-06T01:14:11Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booted from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox.
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros. The download links aren't archived, though; mainly it's useful for seeing the filenames.
==See Also==
*[[Xbox Linux]]
582e2307f917da2c3a70db8451a4239a0dbe4191
7259
7258
2022-07-06T01:15:15Z
VannevarKush
2546
/* Historical Distros */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booted from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox. (is this right?)
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The original Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros. The download links aren't archived, though; mainly it's useful for seeing the filenames.
==See Also==
*[[Xbox Linux]]
11678cc96fb3ce28d0279324c25a563c48a853b1
7263
7259
2022-07-06T02:41:28Z
VannevarKush
2546
/* Historical links */
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booted from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox. (is this right?)
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The latest Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros. The download links aren't archived, though; mainly it's useful for seeing the filenames.
==See Also==
*[[Xbox Linux]]
d931b9828f0d03977f263d49dc1df8ee4db3ea26
7264
7263
2022-07-06T03:46:51Z
VannevarKush
2546
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Debian''' -
*'''Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booted from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox. (is this right?)
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The latest Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros. The download links aren't archived, though; mainly it's useful for seeing the filenames.
==See Also==
*[[Xbox Linux]]
dbf9345c4f57d76017b8b681c23a37e25ce2c652
7265
7264
2022-07-06T03:48:55Z
VannevarKush
2546
Undo revision 7264 by [[Special:Contributions/VannevarKush|VannevarKush]] ([[User talk:VannevarKush|talk]])
wikitext
text/x-wiki
When it was announced that the specifications of the Xbox were known to be very similar to an X86 PC, Xbox Linux was quickly considered as a possibility for getting getting cheap Linux PCs into the hands of the masses. The first Xbox exploits were created to make Xbox Linux possible, and were quickly repurposed by modders, while Linux remained a more niche application on the original Xbox. In the years while the Xbox was still being manufactured, it could function as a cheap daily driver Linux PC, and some users modded the controller ports into permanent USB ports, and even installed a VGA connector. But, as with all PCs they eventually became obsolete as cheaper, smaller hardware became available with similar processing power.
Xbox Linux reached a point of stable releases [https://www.linuxjournal.com/article/6704 around 2003], and the development continued thereafter, providing support for 1.4 Xboxes and their Focus encoder chip, and even support for 1.6 Xboxes and their changes. The 2.4 kernel was primarily used for Xbox Linux. The 2.6 kernel patches that were developed appear stable and quite usable, but scattered functionalities from the 2.4 kernel were never ported over.
==Timeline==
[https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''November 15, 2001''' - Microsoft Xbox released in United States
* '''c. [https://web.archive.org/web/20021013204521/https://www.xenatera.com/bunnie/proj/anatak/xboxmod.html 2001-2002 (when?)]''' - [https://en.wikipedia.org/wiki/Andrew_Huang_(hacker) Bunnie Huang] [https://web.archive.org/web/20030405173112/https://ece.gmu.edu/crypto/ches02/talks_files/Huang.pdf hacks the Xbox boot ROM decryption key], allowing a starting point for Xbox BIOS modification
* '''February 22, 2002''' - Xbox released in Japan
* '''March 14, 2002''' - Xbox released in Europe and Australia
* '''May 23, 2002''' - Xbox Linux project founded by Michael Stiehl
* '''July 2, 2002''' - Michael Robertson, CEO of Lindows.com, offered two $100,000 prizes for accomplishment of Xbox Linux goals by January 1, 2003. (He was coincidentally being sued at the time by Microsoft, for use of the name "Lindows") One of the prizes offered was for a demonstration of Linux running on an Xbox (with a $55,000 "subprize" for writing a bootloader) The other prize was for an exploit capable of getting Xbox Linux to run without hardware modification, ideally by using just a CD-ROM.
* '''August 13, 2002''' - First kernel boot
* '''October 7, 2002''' - First graphical desktop environment (KDE)
* '''October 9, 2002''' - Mandrake Linux 9 released for Xbox. Users had to replace or flash the TSOP.
* '''December 17, 2002''' - [[Cromwell]] BIOS/bootloader ready. The first of the $100,000 prizes was claimed, for running Linux on Xbox and developing a bootloader before January 1, 2003.
* '''December 31, 2002''' - [https://www.theregister.com/2003/01/02/xbox_linux_donor_extends_prize/ Michael Robertson extends the prize deadline for the remaining prize.]
* '''March 29, 2003''' - The second prize was claimed for the [[Exploits#007:_Agent_Under_Fire|007 hack]] by Habibi_xbox. (the game Frogger Beyond was initially hacked, but it wasn't released in Europe) This launched a minilinux via an exploit from a hacked savegame on an Xbox memory card, technically accomplishing the goal of using Linux on the Xbox without hardware modification. However, users had to start Linux via the hacked game save every time.
* '''July 4, 2003''' - The [[Exploits#Font_hacks|font exploit]] is discovered, demonstrating the ability to run Linux from the hard drive with no modchip, a true "softmod". (but also opening Pandora's box of piracy, which Xbox Linux wanted to avoid association with.) The dashboard audio exploit was discovered soon afterwards.
* '''July 7, 2003''' - A [https://www.mail-archive.com/bugtraq@securityfocus.com/msg11923.html official security release] is made about newly discovered Xbox security vulnerabilities, as responsible hackers should do
* '''August 11, 2003''' - The Mechassault exploit was released by Jeff Mears, with full softmod conversion. Efforts were made to obfuscate the source to prevent uses for piracy
More details [https://sourceforge.net/projects/xbox-linux/files/Presentations/20th%20Chaos%20Communication%20Congress/ here]
==Historical Distros==
A number of distributions were released, built around the Xbox Linux-patched kernel.
*'''[https://gentoox.shallax.com GentooX]''' - GentooX, unlike vanilla Gentoo, provided precompiled binaries to the user via a custom repository. These were binaries compiled specifically for the Xbox. GentooX had both Home and Pro editions, the Home edition built around a desktop environment and the Pro edition built around the CLI. GentooX was a popular and developed Xbox Linux distro. The website is [https://web.archive.org/web/20220328101921/https://gentoox.shallax.com/ still being archived], although it appears broken in Chrome. The latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Home/ GentooX Home] is 7.1, and the latest release of [https://sourceforge.net/projects/xbox-linux/files/Gentoox/Pro/ Pro] was 5.1, in 2009. Tested and working. Works from DVD. The pro version attempts to boot from the CD into GentooX loader, so be sure set your BIOS not to boot from CD if booting from CD doesn't work from you. Try Xromwell if GentooX loader doesn't work.
*'''[https://web.archive.org/web/20050510000924/http://www.x-dsl.org/ X-DSL]''' - Based on Damn Small Linux, X-DSL was a lightweight Linux build. It used Knoppix patches to be able to boot to a desktop environment from small (<100MB) loop devices from FATX. It can also make a "native" install to the hard drive, or install to a larger loop device for a permanent setup. X-DSL is an easy version of historical Linux to try out today, since it can be launched and run entirely from drive E and that avoids some incompatibilities of Xbox Linux with larger hard drives. (if your hard drive is 3TB in order to get that extra .1TB of space, it may not work). The latest official version of X-DSL is 0.6, although there is an unofficial 0.7 floating around, among various other unofficial builds. X-DSL 0.6 can be found [https://sourceforge.net/projects/xbox-linux/files/X-DSL/X-DSL%20v0.6/ here]. The contents of the zip file can be copied to the root of E (so that linuxboot.cfg is in the root) and launched with Cromwell or GentooX, with no CD. The iso is also tested and working.
*'''[https://web.archive.org/web/20060529005204/http://www.dynebolic.org:80/ Dyne:bolic Linux]''' - This is Rasta software! Dynebolic Linux is a multimedia creation, editing, and streaming focused distro that could boot as a liveCD on many systems, including original Xbox. Original Xbox support was ended in Dyne:bolic 2.x, but that uses the 2.6 kernel so it could theoretically be supported if someone felt like it. The latest version compatible with the Xbox is 1.4.1, [https://osarchive.sda1.eu/dyne-bolic available here]. This distro has a lot of toys and is fun to check out. Also, it works from DVD! (it does seem to have a low color depth in the desktop though...)
*'''[https://web.archive.org/web/20100617005832/http://www.xbox-linux.org/wiki/XUbuntu xUbuntu]''' - Not related to the distro more commonly known as "xUbuntu". "xUbuntu is based on Ubuntu 5.10 (Breezy Badger) distribution without graphical environment. xUbuntu linux system can be run from CD or installed to a PC or Xbox hard drive. The install process, the kernel, the kernel modules and the desktop are customized for PC and Xbox (i386)." The latest version is 0.9.0, [https://sourceforge.net/projects/xbox-linux/files/xUbuntu/xUbuntu%200.9.0/ available here]. It needs to be burned to a CD instead of a DVD.
*'''Ed's Xebian''' - Not related to the distro more commonly known as "Xebian". Does not appear to have a website. From the original Xbox Linux wiki, "With superb flexibility and ease of use, it can run off CD/DVD or it can be installed onto the Xbox hard drive in either the free space or the saved game area. The OS includes support for all versions of the Xbox, including those with Xcalibur video chips. Based on Debian stable (Sarge) with backports for newer software." The latest version is 1.1.4, [https://sourceforge.net/projects/xbox-linux/files/Ed_s%20Xebian/Xebian/ available here], which boots to desktop as a liveCD. It seems to require burning to a CD instead of DVD.
*'''[https://web.archive.org/web/20060630100324/http://www.keckstar.com:80/nuke/html/index.php sXb]''' - Slackware for the Original Xbox. The versioning is a little unclear, but the most recent ISO on sourceforge is in the iso.gz file [https://sourceforge.net/projects/sxb/files/Sxbnew/SXBNEW-iso--dfb-xdirectfb/ here]. May need to be burned to CD. Reported "controller jammed" messages at startup, but one of my controller ports is busted.
*'''Mandrake''' A Mandrake 9 was released and claimed to be the first full distribution on the Xbox, but apparently was not continued or supported. No known Web site. Does anyone have a copy of the original Xbox Linux Mandrake iso for archival purposes? It appears a 2005 "special edition" with the Xbox patches can be found [http://ftp.twaren.net/Linux/Mandrake/official/iso/10.1/i586/10.2/ here]. (Mandrake Linux was renamed to Mandriva Linux in 2005). Requires composite cable, at least on this 1.0 Xbox. Appears to require burning to a CD, instead of a DVD.
*'''[https://web.archive.org/web/20060713072515/http://www.not404.com:80/cgi-bin/trac.fcgi/wiki/XFedora4 xFedora]''' A port of Fedora Core to the Xbox; essentially Fedora Core with Xbox patches. The latest version is 0.7.41, [https://sourceforge.net/projects/xbox-linux/files/Fedora/ available here]. I am unsure how to run it.
*'''SuSE 8''' - There's a dead download link on the old wiki. Seems to have been abandoned
*'''old xbox-linux iso''' The xbox-linux team released some preliminary ISOs during the development of Xbox Linux.
*'''[https://web.archive.org/web/20051106185529/http://article.gmane.org/gmane.linux.ports.xbox.devel/5736 live-linux]''' An early Linux that 007 hack users tried; it booted from CD but could also boot from the hard drive. It was released up to 0.3, no known website, but here is [https://sourceforge.net/p/xbox-linux/mailman/message/10300266/ the announcement]. The latest image is [https://legacy.downloads.diomtec.com/homebrew/xbins/Console%20Based%20Applications/Operating%20Systems/linux/distributions/live-linux/live-linux.0.3.iso.bz2 available here]. The file boot/boot.cfg on the iso needs to be renamed to linuxboot.cfg. The video became garbled launching with both composite and component cables. (may need an old version of Cromwell; untested) This is a very basic minilinux distro, essentially a proof of concept. The linuxrc is a symlink to busybox. It comes with a 9MB image.
*'''ltools''', a minilinux used in Xbox game save hacks, first designed to install Linux, but later repurposed to softmod the Xbox. (is this right?)
*'''[https://sourceforge.net/projects/xboxhdm2/files/ xboxhdm]''' is a tool made by Idotsfan for softmodding locked Xbox hard drives, it's a PC-based CD-bootable set of Linux tools
*'''XMugen''' packaged Mugen for Linux using a busybox in an initramfs, and used swap and game character data files located on FATX. It currently has issues with anything other than "F takes all" schemes.
*'''Chimp''' is a tool for cloning and basic partitioning on Xbox hard drives. It runs from an initramfs.
*'''[https://web.archive.org/web/20051214030132/http://nexus.il.fontys.nl:80/ FreeBSD/Xbox]''' - Not Linux per se, but it's a port of FreeBSD to the Xbox. It was officially integrated into FreeBSD as a set of optional patches. A NetBSD setup can be found [ftp://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/xbox/ here] but it requires the rootfs mounted on NFS. There might be a self contained ISO out there?
==Installing Old Distros==
These liveCDs above should all be safe to try on your Xbox, but installation to your hard drive is more risky. It can be fine if you take the proper considerations. Here are the installation methods usually presented by the installers:
'''Native Install'''
This may not be compatible with softmods! '''Don't mess around with native installs on a locked hard drive or a hard drive that's not backed up! Flash your TSOP or hardmod first!'''
This may wipe your hard drive, format it for Linux, and expect you to put Cromwell on your BIOS. It may also mean just formatting F and booting into it from Xromwell on FATX. So make sure you know which one it is! (the installer should tell you, if it's installing to F you should be fine) Any native install with a boot partition (launched via a hard drive icon in Cromwell/Xromwell) is NOT compatible with the XBPartitioner table, and installing it will overwite the XBPartitioner table. So "F takes all" is preferred here, for allowing coexistence with the stock partitions.
'''If you have a native install, DO NOT USE XBPARTITIONER unless you want to remove Linux. Any XBPartitioner format will break Linux by wiping out the MBR that Linux uses to find its partitions.''' You can't have custom FATX partitions alongside a Linux native install. (So use a spare hard drive for a native install)
'''Loopback Install'''
This installs Linux to a file on the FATX filesystem. Your Linux filesystem will be contained within that file. This means that no repartitioning of your hard drive is necessary. This is a safer install method, if you have space for a small install on E, or if you are using an "F takes all" scheme with an Xbox partition on F. Drive F must end below the 137GB boundary, if doing a loopback install to it. (is that right?) XBPartitioner-defined partitions are not supported by official versions of Xbox Linux, it only looks for the stock partitions plus "F takes all". I am unsure of the behavior if the drive is bigger than F can be. Loopback installs should be safe if your FATX drive F is detected by Xbox Linux.
In general, using a <137GB hard drive avoids these issues, although loopback installs can still be done on larger drives.
It is not advisable to make changes on the FATX filesystem more than you have to in Xbox Linux. Mounting and reading FATX partitions is fine, but doing complex write operations should be avoided, just in case. The 2.4 kernel FATX support is thought to be more stable than in the 2.6 kernel. If you need to copy lots of files to your Xbox, do it via an Xbox dash using FTP. Simple operations on FATX should be fine, and the FATX support is not seriously unstable, but better to be safe. Loopback installs are considered to be stable, even though the files exist on FATX.
==Historical links==
Much of the old Xbox Linux information now lives on archive.org. It is helpful if you come across anything useful, to add it here!
* [https://sourceforge.net/projects/xbox-linux/ The latest Xbox Linux repository on sourceforge.] The mailing list archives can help answer esoteric questions about xbox linux, sometimes. The files section contains various Xbox Linux software and historical distribution isos.
* [https://sourceforge.net/projects/xboxhdm2/files/ The xboxhdm repository.] It contains source and executables for many Xbox tools created and modified by Idotsfan. The X-DSL directory contains some information on the original Xbpartitioner table patches.
* [https://web.archive.org/web/20100617000252/http://www.xbox-linux.org/wiki/Main_Page The "New" Xbox Linux wiki], which was online until 2011.
* [http://web.archive.org/web/20050307163352/http://wiki.xbox-linux.org:80/ The original "Old" xbox linux wiki]
* [https://web.archive.org/web/20050724003648/http://xbox-linux.sourceforge.net/cgi-bin/moin.cgi/FrontPage the "Old" xbox wiki on SourceForge.]
* [http://web.archive.org/web/20040419204220/http://xbox-linux.org:80/ The "Old" xbox-linux website], before the website was replaced with the "new wiki".
* [https://web.archive.org/web/20030204023051/http://sourceforge.net:80/project/showfiles.php?group_id=54192 The original Xbox Linux downloads page] on SourceForge. Distros are removed as they become unmaintained, so time travelling can be useful here to see all distros. The download links aren't archived, though; mainly it's useful for seeing the filenames.
==See Also==
*[[Xbox Linux]]
d931b9828f0d03977f263d49dc1df8ee4db3ea26
Xbox Linux
0
4039
7260
7217
2022-07-06T01:24:21Z
VannevarKush
2546
/* See Also */
wikitext
text/x-wiki
The first Xbox Linux releases were in 2003, and Xbox Linux reached its peak of popularity in 2003-2006. To read more about it, see '''[[Historical Xbox Linux]]'''. Today, Xbox Linux has more of a hobbyist appeal.
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
It would be possible to use Xbox Linux to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Status==
A CD-installable distro is currently being worked on.
For a list of the current issues that are blocking functionality on Xbox Linux, see '''[[Xbox Linux Issues]]'''.
For some guides and information that might help you get Xbox Linux up and running, see '''[[Xbox Linux Tips and Tricks]]'''.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, the founder of the Xbox Linux team
* [https://www.ridemybike.org/command1.pdf In the beginning... Was the Command Line] by Neal Stephenson
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
* [https://www.youtube.com/watch?v=Fow7iUaKrq4 kill -9 by Monzy] (parental advisory: explicit content)
60069b239bd6d9097fc96c06e7a3b6ec7e5fb6e9
7261
7260
2022-07-06T01:26:16Z
VannevarKush
2546
wikitext
text/x-wiki
The first Xbox Linux releases were in 2003, and Xbox Linux reached its peak of popularity in 2003-2006. To read more about it, see '''[[Historical Xbox Linux]]'''. Today, Xbox Linux has more of a hobbyist appeal.
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
It would be possible to use Xbox Linux to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Status==
A CD-installable distro is currently being worked on.
For a list of the current issues that are blocking functionality on Xbox Linux, see '''[[Xbox Linux Issues]]'''.
For some guides and information that might help you get Xbox Linux up and running, see '''[[Xbox Linux Tips and Tricks]]'''.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==Inspiration==
* [https://www.ridemybike.org/command1.pdf In the beginning... Was the Command Line] by Neal Stephenson
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] Some inspiration
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
* [https://www.youtube.com/watch?v=0rG74rG_ubs kill -9 by Monzy] (parental advisory: explicit content)
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, the founder of the Xbox Linux team
066006cc10a1d9d4060c1f4e823421b64c4372cc
7262
7261
2022-07-06T01:27:00Z
VannevarKush
2546
/* Inspiration */
wikitext
text/x-wiki
The first Xbox Linux releases were in 2003, and Xbox Linux reached its peak of popularity in 2003-2006. To read more about it, see '''[[Historical Xbox Linux]]'''. Today, Xbox Linux has more of a hobbyist appeal.
The former kernels of 2.4 and 2.6 were woefully out of date. To save the day, haxar has patched a modern kernel (5.8) with everything needed to run a terminal-based instance of Xbox linux. This kernel can be used as the basis for setting up modern Xbox Linux distributions.
It would be possible to use Xbox Linux to bundle Linux setups and individual Linux applications, once the proper functionality is set up. Linux also has applications as a platform for investigating the Xbox hardware.
==Current Status==
A CD-installable distro is currently being worked on.
For a list of the current issues that are blocking functionality on Xbox Linux, see '''[[Xbox Linux Issues]]'''.
For some guides and information that might help you get Xbox Linux up and running, see '''[[Xbox Linux Tips and Tricks]]'''.
==Links==
* [https://github.com/haxar/xbox-linux Haxar's modifications] to the 5.8 kernel
** [https://github.com/XboxDev/xbox-linux-initramfs A basic initramfs] for use with that kernel
** [https://github.com/XboxDev/xbox-linux-busybox The busybox setup] used in that initramfs
* [https://github.com/mborgerson/fatx mborgerson's FATX library], including a FUSE driver for FATX support in Linux
* [https://github.com/alexwinger/ubuntu-cosmic Ubuntu Cosmic with FATX, DON'T USE THIS], there is no actual FATX code in this repo. It appears to be just a starting point for a FATX implementation in Linux. Posted here to save you the time of figuring that out for yourself.
==Inspiration==
* [https://www.ridemybike.org/command1.pdf In the beginning... Was the Command Line] by Neal Stephenson
* [https://www.usenix.org/system/files/1311_05-08_mickens.pdf The Night Watch] by James Mickens
* [https://web.mit.edu/~simsong/www/ugh.pdf The UNIX Hater's Handbook] Some catharsis, from before the dawn of time
* [https://www.youtube.com/watch?v=0rG74rG_ubs kill -9 by Monzy] (parental advisory: explicit content)
==See Also==
* [[17_Mistakes_Microsoft_Made_in_the_Xbox_Security_System|17 Mistakes Microsoft Made in the Xbox Security System]] by Michael Steil, the founder of the Xbox Linux team
005a15c124068e0fd9af3ce13829911032796e03
Xbox Linux Issues
0
4038
7266
7249
2022-07-08T21:06:51Z
VannevarKush
2546
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell ([[Cromwell]] as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot would be (very) convenient for Xbox Linux development, and it would allow the user to easily boot into Linux from the OpenXenium BIOS menu.
"VERY IMPORTANT: As of 2004/10/27, v1.0 Xboxen with Xenium ICEs can only use Cromwell BIOS 2.30 and BELOW. This limits you to using 2.4 verison kernels. Cromwell 2.31 and higher changed the memory map so that 2.6 BIOSs can be be used. The problem with the Xenium on v1.0 boxes is believed to be a CPLD issue. The problem shows up when trying to start the 2.31+ BIOS. The box will power cycle twice, and then FRAG (Flashing Red And Green eject button). This may or may not be fixable. If you have a v1.1 or higher XBox, you won't have to concern yourself with this issue."
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
535df821cabc4210b437fbebe41a13dcb17b8309
7267
7266
2022-07-09T06:00:14Z
VannevarKush
2546
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell ([[Cromwell]] as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot would be (very) convenient for Xbox Linux development, and it would allow the user to easily boot into Linux from the OpenXenium BIOS menu.
"VERY IMPORTANT: As of 2004/10/27, v1.0 Xboxen with Xenium ICEs can only use Cromwell BIOS 2.30 and BELOW. This limits you to using 2.4 verison kernels. Cromwell 2.31 and higher changed the memory map so that 2.6 BIOSs can be be used. The problem with the Xenium on v1.0 boxes is believed to be a CPLD issue. The problem shows up when trying to start the 2.31+ BIOS. The box will power cycle twice, and then FRAG (Flashing Red And Green eject button). This may or may not be fixable. If you have a v1.1 or higher XBox, you won't have to concern yourself with this issue."
==IDE to SATA Adapter Issues with Cromwell==
It was found testing on a stock and a 1.4 GHz Xbox, that there may be issues with IDE to SATA adapters. The PATA to SATA adapters tended to work, with or without a DVD drive, but did not work with a CF card on HDB. (this does work if hda is an IDE drive.) Cromwell never got to the boot menu with the Startech adapter.
The quickness of the failure seemed to depend on the adapter and drive used. With one SSD, Cromwell would boot to a black screen, but not always, and it would sometimes detect an SSD before freezing.
It appears there may be some kind of synchronization issue, but the nature of it is currently unclear.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
26b2241ddb1dcdef7b3bfc1bdb3ab4eee01cadee
7268
7267
2022-07-09T06:02:05Z
VannevarKush
2546
/* IDE to SATA Adapter Issues with Cromwell */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell ([[Cromwell]] as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot would be (very) convenient for Xbox Linux development, and it would allow the user to easily boot into Linux from the OpenXenium BIOS menu.
"VERY IMPORTANT: As of 2004/10/27, v1.0 Xboxen with Xenium ICEs can only use Cromwell BIOS 2.30 and BELOW. This limits you to using 2.4 verison kernels. Cromwell 2.31 and higher changed the memory map so that 2.6 BIOSs can be be used. The problem with the Xenium on v1.0 boxes is believed to be a CPLD issue. The problem shows up when trying to start the 2.31+ BIOS. The box will power cycle twice, and then FRAG (Flashing Red And Green eject button). This may or may not be fixable. If you have a v1.1 or higher XBox, you won't have to concern yourself with this issue."
==IDE to SATA Adapter Issues with Cromwell==
It was found testing on a stock and a 1.4 GHz Xbox, that there may be issues with IDE to SATA adapters. The PATA to SATA adapters tended to work, with or without a DVD drive, but did not work with a CF card on HDB. (this does work if hda is an IDE drive.) Cromwell never got to the boot menu with the Startech adapter.
The quickness of the failure seemed to depend on the adapter and drive used. With one SSD, Cromwell would boot to a black screen, but not always, and it would sometimes detect an SSD before freezing.
It appears there may be some kind of synchronization issue, but the nature of it is currently unclear. The main practical issue is supporting Startech adapters as they are faster and more reliable than the cheaper ones.
Also, it was found that two adapters together (one on hda and one on hdb) in any combination did not work with Cromwell.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
19dc47961062b6d0fbf2187e0fb7651ed2a38980
7269
7268
2022-07-09T06:03:16Z
VannevarKush
2546
/* Cromwell incompatibility with OpenXenium */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell ([[Cromwell]] as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot would be (very) convenient for Xbox Linux development, and it would allow the user to easily boot into Linux from the OpenXenium BIOS menu.
"VERY IMPORTANT: As of 2004/10/27, v1.0 Xboxen with Xenium ICEs can only use Cromwell BIOS 2.30 and BELOW. This limits you to using 2.4 verison kernels. Cromwell 2.31 and higher changed the memory map so that 2.6 BIOSs can be be used. The problem with the Xenium on v1.0 boxes is believed to be a CPLD issue. The problem shows up when trying to start the 2.31+ BIOS. The box will power cycle twice, and then FRAG (Flashing Red And Green eject button). This may or may not be fixable. If you have a v1.1 or higher XBox, you won't have to concern yourself with this issue."
(is this only on 1.0 Xboxes?)
==IDE to SATA Adapter Issues with Cromwell==
It was found testing on a stock and a 1.4 GHz Xbox, that there may be issues with IDE to SATA adapters. The PATA to SATA adapters tended to work, with or without a DVD drive, but did not work with a CF card on HDB. (this does work if hda is an IDE drive.) Cromwell never got to the boot menu with the Startech adapter.
The quickness of the failure seemed to depend on the adapter and drive used. With one SSD, Cromwell would boot to a black screen, but not always, and it would sometimes detect an SSD before freezing.
It appears there may be some kind of synchronization issue, but the nature of it is currently unclear. The main practical issue is supporting Startech adapters as they are faster and more reliable than the cheaper ones.
Also, it was found that two adapters together (one on hda and one on hdb) in any combination did not work with Cromwell.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
79e2843340eb195fa52a963710b568bef81f2463
7270
7269
2022-07-09T08:54:20Z
VannevarKush
2546
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell ([[Cromwell]] as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot would be (very) convenient for Xbox Linux development, and it would allow the user to easily boot into Linux from the OpenXenium BIOS menu.
"VERY IMPORTANT: As of 2004/10/27, v1.0 Xboxen with Xenium ICEs can only use Cromwell BIOS 2.30 and BELOW. This limits you to using 2.4 verison kernels. Cromwell 2.31 and higher changed the memory map so that 2.6 BIOSs can be be used. The problem with the Xenium on v1.0 boxes is believed to be a CPLD issue. The problem shows up when trying to start the 2.31+ BIOS. The box will power cycle twice, and then FRAG (Flashing Red And Green eject button). This may or may not be fixable. If you have a v1.1 or higher XBox, you won't have to concern yourself with this issue."
(is this only on 1.0 Xboxes?)
==IDE to SATA Adapter Issues with Cromwell==
The SATA to IDE adapters (Startech and the "PATA TO SATA" ones) are sensitive to electromagnetic interference, and these can be unreliable with Cromwell. They might work when the cable is in one position, and not when it's in another position. This may account for reported issues with Chimp where it simply refuses to run on an Xbox.
The difficulty here is that Xbios environment can be completely stable, but Cromwell and its variants freeze, fail to load, or work unreliably. Is this an issue with DMA mode detection? It should probably be fixed, although it is avoidable by following some best practices..
The solution for users is to use shorter cables (possibly placing the hard drive in the DVD area), and to try adjusting the cable position.
==Cromwell Initramfs Limitations==
If too big of an initrd file is passed, the kernel boot freezes while "Starting Linux" is displayed. (Cromwell may be freezing here.) The current largest initramfs file that worked in Cromwell was about 7125kb. The reason for this is curerntly unknown; Cromwell provides about 34MB in its memory layout to be used for loading the initramfs.
It is also currently unclear if initramfs files of >4MB are properly being parsed by the kernel.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
b1c3cf2480bc1cddbb3d42b7788cdbf12ff1043a
7271
7270
2022-07-09T09:29:55Z
VannevarKush
2546
/* IDE to SATA Adapter Issues with Cromwell */
wikitext
text/x-wiki
Here is a list of issues that are blocking general functionality on [[Linux|Xbox Linux]].
==Cromwell incompatibility with OpenXenium==
This is overall a minor issue, in that Xromwell ([[Cromwell]] as an xbe) works fine as a workaround. However, booting into Cromwell directly on Xbox boot would be (very) convenient for Xbox Linux development, and it would allow the user to easily boot into Linux from the OpenXenium BIOS menu.
"VERY IMPORTANT: As of 2004/10/27, v1.0 Xboxen with Xenium ICEs can only use Cromwell BIOS 2.30 and BELOW. This limits you to using 2.4 verison kernels. Cromwell 2.31 and higher changed the memory map so that 2.6 BIOSs can be be used. The problem with the Xenium on v1.0 boxes is believed to be a CPLD issue. The problem shows up when trying to start the 2.31+ BIOS. The box will power cycle twice, and then FRAG (Flashing Red And Green eject button). This may or may not be fixable. If you have a v1.1 or higher XBox, you won't have to concern yourself with this issue."
(is this only on 1.0 Xboxes?)
==IDE to SATA Adapter Issues with Cromwell==
The SATA to IDE adapters are sensitive to electromagnetic interference (Startech and the "PATA TO SATA" ones were tested), and these can be unreliable with Cromwell. They might work when the cable is in one position, and not when it's in another position. This may account for reported issues with Chimp where it simply refuses to run on an Xbox.
The difficulty here is that Xbios environment can be completely stable, but Cromwell and its variants freeze, fail to load, or work unreliably. Is this an issue with DMA mode detection? It should probably be fixed, although it is avoidable by following some best practices..
The solution for users is to use shorter cables (possibly placing the hard drive in the DVD area), and to try adjusting the cable position.
==Cromwell Initramfs Limitations==
If too big of an initrd file is passed, the kernel boot freezes while "Starting Linux" is displayed. (Cromwell may be freezing here.) The current largest initramfs file that worked in Cromwell was about 7125kb. The reason for this is curerntly unknown; Cromwell provides about 34MB in its memory layout to be used for loading the initramfs.
It is also currently unclear if initramfs files of >4MB are properly being parsed by the kernel.
==Native Boot Partition Filesystem Compatibility with Cromwell==
When booting a "native" install, Cromwell scans the MBR and looks for partitions that are flagged as bootable. If the partition is bootable, Cromwell attempts to determine the filesystem, and load linuxboot.cfg. If the user launches that instance, the kernel and the initrd will then be loaded from that partition. (The presence of initrd and kernel is not checked until launching)
When setting up a native install, a boot partition formatted with ext2 worked fine as formatted by historical X-DSL. The linuxboot.cfg was detected, and Cromwell presented a hard drive icon to load the native install.
When formatting the same partition using a modern distro, Cromwell does not detect the linuxboot.cfg, but it does detect the ext2 filesystem and attempts to read it without errors. (This has been tested by formatting on Gentoo, Debian, and from a Gentoo liveCD on the Xbox.)
Something about the way these ext2 partitions are being formatted by modern tools is preventing the Xbox from reading files on them. Turning off the new ext2 features using mkfs.ext2 /dev/sdb1 -O ^resize_inode,^dir_index,^large_file,^ext_attr did not make a difference.
Formatting this partition from modern Linux with vfat and no options also did not work.
Formatting as Fat32 in Windows with EaseUs Partition Master did work.
Note that Cromwell is able to read the root partition and get linuxboot.cfg from there even for larger root partitions (tested up to 80GB); a reserved boot partition is not strictly needed, but Cromwell still needs to be able to load the kernel and initrd.
So the main question here is, what kind of partitions does Cromwell support? How can at least one kind of these partitions be reliably formatted using a terminal command in Linux?
Or, can Cromwell be easily updated to support new filesystem developments? Since a boot partition is only needed for Cromwell to load the kernel and initrd, it would be acceptable for a more archaic filesystem configuration to be used as the boot partition, which would still give users the freedom to format the root partition with the kernel-supported filesystem of their choice (which is basically the point of a boot partition.) Ext2 is not necessarily the only option here either.
==XBPartitioner Table and MBR Incompatibility==
This issue is relevant to native Linux installs. In a native Linux install, the user formats empty regions of their hard drive and adds an MBR to the hard drive, which is used by Cromwell to access the Linux boot partition and subsequently load linuxboot.cfg, the kernel, and the initrd. The way that Cromwell is currently set up, it can't find Linux partitions without the MBR.
The MBR partitioning/boot scheme uses a 512 byte record at the beginning of the drive. Since the actual boot data isn't needed on Xbox, the first 440 bytes are filled with zeroes when using fdisk, and can be considered unused here. [[http://www.sharetechnote.com/html/Linux_MBR.html MBR layout information]]
The [[FATX]] filesystem has a config area of 1024 sectors (512K) starting at the beginning of the drive. The first 48 bytes are officially used, the rest can be zeroes, but later in the config area is where XBLA information is stored. On a stock-formatted Xbox hard drive, the contents of the early config area don't seem to matter much to ind-BIOS (tested), although Insignia may use the later XBLA regions in the future. If a stock FATX config area has its first 512 bytes overwritten by an MBR, it is not known to cause problems with any other Xbox functionality. (based on the fact that native Linux installs have been run in this way for years)
The problem arises with the XBPartitioner table, a custom partitioning scheme for Xbox hard drives that was never officially supported by Xbox Linux. It is common on Xboxes with larger hard drives. The XBPartitioner table provides 14 partition "slots" for FATX partitions, and it allows users to format their Xbox hard drive with additional FATX partitions. The partition table is written into unused space in the FATX config area, immediately after the initial stock data. XBPartitioner wipes the remaining bytes of the config area when writing a partition table including any MBR contents; other tools are untested so far. And fdisk overwrites the first 512 bytes of the FATX config area with an MBR, replacing the first 440 bytes with zeroes.
Another issue arises in that the two partitioning schemes overlap, even if only the necessary data were written for both XBPartitioner table and MBR; that is if they didn't write the zeroes.
This struct shows the layout of the config area, followed by the partition entry struct. From the unofficial XBPartitioner patches for the old Xbox kernel:
<syntaxhighlight lang="c">
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct {
char magic[16];
char reserved[32];
XBPartitionerTableEntry partitions[FATX_XBPARTITIONER_PARTITIONS_MAX];
} XBPartitionerTable;
// Temporary struct used to load XBPartitioner data directly from disk.
typedef struct
{
char name[16];
u32 flags;
u32 start;
u32 size;
u32 reserved;
} XBPartitionerTableEntry;
</syntaxhighlight>
The XBPartitioner table entries start at 48 bytes, and each partition's entry is 32 bytes in size. With 14 partitions, the XBPartitioner table ends at 496 bytes, and overwrites a good chunk of the relevant MBR content, which starts at 440 bytes. So tool modification alone can't make these schemes compatible.
The XBPartitioner table has no metadata, only partition entries, and has no known way of redefining the number of available partitions. However, if the XBPartitioner table only had 12 partitions, the partition table would end at 432 bytes and the two schemes could coexist.
===Possible Solutions===
====F Takes All====
This was the typical scheme used by historical Xbox Linux. The area after E would be used for Linux partitions. With larger hard drives available, there is a need for Xbox Linux to coexist with other content on the user's drive. This is okay when the user doesn't want to later modify the partition layout of their hard drive using XBPartitioner, and they want to reserve that hard drive primarily for Linux.
====A 12 partition XBPartitioner Table====
This would involve attempting to get general acceptance of changing the XBPartitioner spec to 12 partitions, so it doesn't overlap with MBR. Or providing a custom set of tools and bioses that support this.
'''Pros'''
* Cromwell would not need to be modified significantly
* The 512 byte boundary could be considered the starting point for future config area modifications
* Very few users have more than 7, much less 14 partitions on their Xbox which provide little practical use
* Any Linux PC can easily mount the Linux partitions
'''Cons'''
* Lots of software would need to be updated, including BIOSes, partitioning tools, and disk formatting tools in Xbox Linux and on PC. There might be a more elegant solution.
====Using the XBPartitioner Table To Define Linux Partitions====
'''Pros'''
* No partitioning scheme incompatiblity management
* No dual partitioning scheme; both Linux and Xbox tools would have awareness of the full drive partition table, to avoid accidentally creating overlapping partitions
* Unused per-partition flags in the XBPartitioner table could be used to mark partitions as Linux as a future standard
* Scripts utilizing dd to read the XBPartitioner table could be used as a stopgap before full kernel support is developed
'''Cons'''
* The Cromwell Grub code would need to be modified to use the XBPartitioner table in place of MBR (this may not be overly complicated)
* Scripts, tools, or kernel support will be needed in order to mount these partitions in Linux, both on the Xbox and on other PCs
* Any tools used to mount Linux partitions and edit their characteristics would have to be updated to support it, primarily apps that mount non-FATX partitions. This could be simple
* FATX kernel support would need to be ported for a long term performant solution. (fatxfs performance still needs to be evaluated on Xbox, as an alterative option)
* The user is limited to 14 total partitions; with F and G they have 7 partitions which is enough for 3 Linux installs (3 boot partitions, 3 data partitions, and shared swap). It would be workable though for most use cases.
====Using Contiguous Files Allocated on FATX as a Filesystem====
This was proposed by mborgerson, as an option to avoid dealing with partition tables at all. Since coexistence of Linux filesystems with FATX is desired, and there are incompatibilities in the current partition table schemes, and correcting this would take a great deal of effort, it was suggested to contain the raw partition data on FATX partitions. A FATX Linux utility could scan a FATX partition for contiguous available space. It could then allocate several 4GB files (the FATX file size limit) across that range of space. Then, the entire range of sectors could be formatted a Linux partition or group of partitions by sector range, and a distribution installed there.
'''Pros'''
* This avoids modifying partition tables at all, so we don't have to worry about changing existing standards.
* The tool fatxfs provides a starting point for interacting with the FATX filesystem without kernel FATX support. FATX partitions only need to be temporarily accessed as such, and once the contiguous files are created and their sector range is known, Linux can work with that area of the disk directly. After starting up and mounting any partitions, Linux does not strictly need any knowledge of FATX.
* Contiguous files can be checked for contiguity before mounting to avoid overwriting other data
* Users could reserve a FATX partition for Linux in XBPartitioner and then use Linux to fill it with contiguous files, the end result should be equivalent to formatting a partition and using MBR to access it, although the mounting process would differ.
* Swap could be shared between Linux installs as long as some kind of common file/directory name or other method is used to detect shared swap on a FATX partition.
* Users can place the kernel and intitrd on FATX partitions and launch using existing Cromwell functionality for loading from FATX, so no boot partitions are needed here
* This could also address the issue of [[Xbox Linux Issues#Lack of FATX Kernel Support|kernel support being needed to mount loop devices]]. But see the "cons" section about FTP-ing images to the hard drive
'''Cons'''
* A custom tool would be needed to access and mount these partitions, both on the Xbox and outside of it. This is still much simpler to address than the issues in the previous proposals.
* The user's filesystem may be fragmented in about the same manner as a FAT filesystem. In order to create space for contiguous files, defragmentation may be needed, especially on partitions which have seen a lot of use and re-use.
* If a user downloads these contiguous files and FTPs them to their Xbox, these files may become fragmented. (It is not fully understood in what situations the BIOS decides to fragment a file.) In order for FTP to work for sharing these files, a utility would have to be able to "defragment" an image and place the data in the right order on the hard drive, without gaps. This could take some time for larger images. One option would be to defragment the drive first and then have Linux handle the FTP part to make sure it gets transferred correctly.
===Mounting a Range of hda as a Loop Device===
(fill out)
==Lack of FATX Kernel Support==
Loop devices are a common method of packaging Xbox Linux installations, in order to avoid modifying the partition table on the Xbox hard drive. A loop device is a filesystem image that can be mounted from within another filesystem. When put on a FATX partition, they allow Xbox Linux to be run from the hard drive without modifying the user's partition table at all. These setups can be used to bundle Linux builds and other apps for easy distribution. (XMugen, for instance.)
The current Xbox Linux patches don't port over the support for mounting the FATX filesystem in Linux. This is because the underlying code has changed significantly in a few places since then. [[User:VannevarKush]] is working on porting the old FATX code to the kernel for native support, but it is a work in progress.
The lack of native FATX support means that mounting loop devices can't be done. Right now, native install and live CDs are the current available boot options for Xbox Linux.
The FUSE based fatxfs [https://github.com/mborgerson/fatx code by mborgerson] may be usable as a stopgap, although its performance hasn't been evaluated yet on an Xbox.
==Advanced Video Support==
The Xbox Linux kernel currently only uses the most basic video support available (defined by CONFIG_FRAMEBUFFER_SIMPLE in the kernel config). More advanced support may be needed to run desktop environments and to run graphical applications with better performance. Does code need to be merged over from the original sources for xbox video?
==See Also==
*[[Xbox Linux Tips and Tricks]]
*[[Xbox Linux]]
2e9652dd9599ad7052562bb7d1fb0fe6882d235c
User:John
2
4044
7272
2022-07-12T17:55:31Z
John
2547
Creating my user page...
wikitext
text/x-wiki
Hi there. I'm John. I'm @jj5 on libera.chat. I've just started learning about OGXbox... there's a lot to learn!
44020624645395b62e27fdfc5e8a8ee503b2ddb5
USB
0
3789
7273
6373
2022-07-26T05:30:30Z
Ryzee119
2519
wikitext
text/x-wiki
== USB Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult the use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
OHCI supports USB devices up to USB1.1 12Mbits/s. The OHCI hardware also supports Low Speed USB (1.5MBit/s) it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
FIXME
<pre>
USB0:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
<pre>
USB1:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ The Inspiration Room - Xbox Live Video Chat in Japan]
* Dvd mediaset number: X10-98754
* Xbox cam: X10-71835
=== Sources ===
*[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
*[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
*[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
202e39b37337b57c473ad62969debc63285a2f93
7274
7273
2022-07-26T05:30:46Z
Ryzee119
2519
/* USB Controllers */
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult the use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
OHCI supports USB devices up to USB1.1 12Mbits/s. The OHCI hardware also supports Low Speed USB (1.5MBit/s) it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
FIXME
<pre>
USB0:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
<pre>
USB1:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ The Inspiration Room - Xbox Live Video Chat in Japan]
* Dvd mediaset number: X10-98754
* Xbox cam: X10-71835
=== Sources ===
*[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
*[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
*[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
a53dc5d5c8e6cda60428a07b61feea5222cdf589
7275
7274
2022-07-26T05:31:34Z
Ryzee119
2519
/* USB Host Controllers */
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult the use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
OHCI supports USB devices up to USB1.1 12Mbit/s. The OHCI hardware also supports Low Speed USB (1.5MBit/s) it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
FIXME
<pre>
USB0:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
<pre>
USB1:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ The Inspiration Room - Xbox Live Video Chat in Japan]
* Dvd mediaset number: X10-98754
* Xbox cam: X10-71835
=== Sources ===
*[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
*[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
*[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
d8cf23555c4fa924801d8d3b7f555683b12bbcd6
7276
7275
2022-07-26T05:32:02Z
Ryzee119
2519
/* USB Host Controllers */
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult the use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
OHCI supports USB devices up to USB1.1 12Mbit/s. The OHCI hardware also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
FIXME
<pre>
USB0:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
<pre>
USB1:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ The Inspiration Room - Xbox Live Video Chat in Japan]
* Dvd mediaset number: X10-98754
* Xbox cam: X10-71835
=== Sources ===
*[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
*[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
*[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
8ff85a26e736c580a285d7420d2b7f36bf69e695
7279
7276
2022-07-26T05:35:09Z
Ryzee119
2519
Move Xboxcam info to its own page
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult the use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
OHCI supports USB devices up to USB1.1 12Mbit/s. The OHCI hardware also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
FIXME
<pre>
USB0:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
<pre>
USB1:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
NoPowerSwitching:
PowerSwitchingMode:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
8f9751bbfc4a41e04d674a9a234f6d53d0d36d98
7281
7279
2022-07-26T10:28:03Z
Ryzee119
2519
Add RhPortDescriptor info
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult the use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
OHCI supports USB devices up to USB1.1 12Mbit/s. The OHCI hardware also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
FIXME
<pre>
USB0:
HcRevision:
HcFmInterval: 0x22ed8 (Note: Slightly different from OHCI spec of 0x2EDF)
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision:
HcFmInterval:
HcRhDescriptorA:
NumberDownstreamPorts:
PowerSwitchingMode:
NoPowerSwitching:
DeviceType:
OverCurrentProtectionMode:
NoOverCurrentProtection:
PowerOnToPowerGoodTime:
HcRhDescriptorB:
DeviceRemovable:
PortPowerControlMask:
</pre>
4a681a0c6362e81741402d4839072b4248f1bf77
7282
7281
2022-07-26T10:38:56Z
Ryzee119
2519
Add HcRhDescriptorA for USB1
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult the use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
OHCI supports USB devices up to USB1.1 12Mbit/s. The OHCI hardware also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
FIXME
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
019a548ad75fc8f5e04a5a6a872132572cb2404a
7283
7282
2022-07-26T10:43:14Z
Ryzee119
2519
Add USB0 and USB1 IRQ channels
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult the use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
59b090854bb0e96c159bea6b8bf3e110c97c892f
7284
7283
2022-07-26T10:46:10Z
Ryzee119
2519
Fix type
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult to use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard:
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
f0465dafe48ff8c9a0c9f235b8cae49382fb2a2d
7285
7284
2022-07-26T10:52:16Z
Ryzee119
2519
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult to use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard (Obtained from a Retail v1.6 PAL Xbox):
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
8d58d297b241e0942da03aab7efd074862778142
7286
7285
2022-07-26T11:08:33Z
Ryzee119
2519
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult to use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard (Obtained from a Retail v1.6 PAL Xbox):
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
== V1.0 Xboxes ==
V1.0 Xbox consoles differ in that they contain an internal 4 Port USB Daughterboard. The daughterboard is connected to Port 1 of the OHCI Root Hub. The 4 downstream ports of the daughterboard are then fed to the 4 front panel game controller ports. In this instances Ports 2,3 and 4 on the OHCI Root Hub are not connected.
To determine where the Xbox software should look for gamecontrollers a kernel export is used to indicate if this daughterboard is present. Bit 1 of export variable XboxHardwareInfo determines whether the daughterboard is present.
== Port Numbering ==
The front gamecontroller ports are not connected sequentially to the OHCI Root Hub ports or the Daughterboard. The following port mapping applies to all Xbox revisions:
<pre>
Game controller Port 1,2,3,4 are connected to 3,4,2,1 respectively of the RootHub or Daughterboard Ports.
</pre>
4abfb8ab97ae51d3a2891b4b4c623871b39ac8dc
7287
7286
2022-07-26T11:09:25Z
Ryzee119
2519
Add Daughterboard URL
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult to use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard (Obtained from a Retail v1.6 PAL Xbox):
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
== V1.0 Xboxes ==
V1.0 Xbox consoles differ in that they contain an internal 4 Port USB Daughterboard (https://xboxdevwiki.net/Motherboard#USB_Daughterboard). The daughterboard is connected to Port 1 of the OHCI Root Hub. The 4 downstream ports of the daughterboard are then fed to the 4 front panel game controller ports. In this instances Ports 2,3 and 4 on the OHCI Root Hub are not connected.
To determine where the Xbox software should look for gamecontrollers a kernel export is used to indicate if this daughterboard is present. Bit 1 of export variable XboxHardwareInfo determines whether the daughterboard is present.
== Port Numbering ==
The front gamecontroller ports are not connected sequentially to the OHCI Root Hub ports or the Daughterboard. The following port mapping applies to all Xbox revisions:
<pre>
Game controller Port 1,2,3,4 are connected to 3,4,2,1 respectively of the RootHub or Daughterboard Ports.
</pre>
ec8ab97371a6d5136928778e9e21d397850ece7b
7288
7287
2022-07-26T11:11:25Z
Ryzee119
2519
Spelling
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult to use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard (Obtained from a Retail v1.6 PAL Xbox):
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
== V1.0 Xboxes ==
V1.0 Xbox consoles differ in that they contain an internal 4 Port USB Daughterboard (https://xboxdevwiki.net/Motherboard#USB_Daughterboard). The daughterboard is connected to Port 1 of the OHCI Root Hub. The 4 downstream ports of the daughterboard are then fed to the 4 front panel game controller ports. In this instances Ports 2,3 and 4 on the OHCI Root Hub are not connected.
Xbox software uses a kernel export to determine which ports to use when looking for gamecontrollers. Bit 1 of export variable XboxHardwareInfo determines whether the daughterboard is present. If set, the daughterboard is present.
== Port Numbering ==
The front gamecontroller ports are not connected sequentially to the OHCI Root Hub ports or the Daughterboard. The following port mapping applies to all Xbox revisions:
<pre>
Game controller Port 1,2,3,4 are connected to 3,4,2,1 respectively of the RootHub or Daughterboard Ports.
</pre>
895c1c985cfae836d884d76a14ac480800df4011
7290
7288
2022-08-01T03:33:01Z
Ryzee119
2519
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult to use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard (Obtained from a Retail v1.6 PAL Xbox):
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
== V1.0 Xboxes ==
V1.0 Xbox consoles differ in that they contain an internal 4 Port USB Daughterboard (https://xboxdevwiki.net/Motherboard#USB_Daughterboard). The daughterboard is connected to Port 1 of the OHCI Root Hub. The 4 downstream ports of the daughterboard are then fed to the 4 front panel game controller ports. In this instances Ports 2,3 and 4 on the OHCI Root Hub are not connected.
Xbox software uses a kernel export to determine which ports to use when looking for gamecontrollers. Bit 0 of export variable XboxHardwareInfo determines whether the daughterboard is present. If set, the daughterboard is present.
== Port Numbering ==
The front gamecontroller ports are not connected sequentially to the OHCI Root Hub ports or the Daughterboard. The following port mapping applies to all Xbox revisions:
<pre>
Game controller Port 1,2,3,4 are connected to 3,4,2,1 respectively of the RootHub or Daughterboard Ports.
</pre>
3e6e4e05b1e775e408b9f63e26b75c57d23ca695
7297
7290
2022-11-11T21:13:00Z
Ryzee119
2519
/* V1.0 Xboxes */ Typo instances to instance
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult to use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard (Obtained from a Retail v1.6 PAL Xbox):
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
== V1.0 Xboxes ==
V1.0 Xbox consoles differ in that they contain an internal 4 Port USB Daughterboard (https://xboxdevwiki.net/Motherboard#USB_Daughterboard). The daughterboard is connected to Port 1 of the OHCI Root Hub. The 4 downstream ports of the daughterboard are then fed to the 4 front panel game controller ports. In this instance Ports 2,3 and 4 on the OHCI Root Hub are not connected.
Xbox software uses a kernel export to determine which ports to use when looking for gamecontrollers. Bit 0 of export variable XboxHardwareInfo determines whether the daughterboard is present. If set, the daughterboard is present.
== Port Numbering ==
The front gamecontroller ports are not connected sequentially to the OHCI Root Hub ports or the Daughterboard. The following port mapping applies to all Xbox revisions:
<pre>
Game controller Port 1,2,3,4 are connected to 3,4,2,1 respectively of the RootHub or Daughterboard Ports.
</pre>
98428314baf58a6c3840a948999510f1a78b471d
7298
7297
2022-11-11T21:14:17Z
Ryzee119
2519
/* Port Numbering */ reword and fix error
wikitext
text/x-wiki
== USB Host Controllers ==
Xbox hardware contains two OHCI USB Host controllers within the MCPX southbridge. The two controllers are designated USB0 and USB1.
On retail consoles USB0 is connected to the 4 front panel game controller ports. Although USB1 is available, it is not enabled in retail titles and it is not mapped out of the MCPX, so it is difficult to use in homebrew.
The USB controllers are configured and accessed over MMIO. See https://xboxdevwiki.net/Memory. The memory structure follows the standard OHCI specification (OHCI Spec Table 7-1).
* USB0 is on PCI Bus 0, device 2, function 0 and is connected to IRQ1.
* USB1 is on PCI Bus 0, device 3, function 0 and is connected to IRQ9.
OHCI supports USB devices up to USB1.1 12Mbit/s. OHCI also supports Low Speed USB (1.5MBit/s) however it appears that the retail XDK host stack does support Low Speed devices.
Xbox hardware has the following specific OHCI register values set by the system firmware that may differ from the standard (Obtained from a Retail v1.6 PAL Xbox):
<pre>
USB0:
HcRevision: 0x10
HcRhDescriptorA: 0x01001204
NumberDownstreamPorts: 4 (Four downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 1 (No overcurrent protection supported)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
<pre>
USB1:
HcRevision: 0x10
HcRhDescriptorA: 0x01000202
NumberDownstreamPorts: 2 (Two downstream ports)
PowerSwitchingMode: 0 (All ports are powered at the same time)
NoPowerSwitching: 1 (Ports are always powered on when the HC is powered on)
DeviceType: 0 (Not a compound device - always 0 for Roothubs)
OverCurrentProtectionMode: 0 (Over-current status is reported collectively for all downstream ports)
NoOverCurrentProtection: 0 (Over-current status is reported collectively for all downstream ports)
PowerOnToPowerGoodTime: 1 (2ms Power on to good time)
HcRhDescriptorB:
DeviceRemovable: 0 (Device not removable)
PortPowerControlMask: 0 (Power Control Mask not set)
</pre>
== V1.0 Xboxes ==
V1.0 Xbox consoles differ in that they contain an internal 4 Port USB Daughterboard (https://xboxdevwiki.net/Motherboard#USB_Daughterboard). The daughterboard is connected to Port 1 of the OHCI Root Hub. The 4 downstream ports of the daughterboard are then fed to the 4 front panel game controller ports. In this instance Ports 2,3 and 4 on the OHCI Root Hub are not connected.
Xbox software uses a kernel export to determine which ports to use when looking for gamecontrollers. Bit 0 of export variable XboxHardwareInfo determines whether the daughterboard is present. If set, the daughterboard is present.
== Port Numbering ==
The front gamecontroller ports are not connected sequentially to the OHCI Root Hub ports or the Daughterboard. The following port mapping applies to all Xbox revisions:
<pre>
Game controller Port 1,2,3,4 are connected to USB hardware port 3,4,1,2 respectively.
</pre>
b5a875e9e5b8708e85beb3f283d1badc8f27107b
Main Page
0
1
7277
7043
2022-07-26T05:34:00Z
Ryzee119
2519
/* Hardware */
wikitext
text/x-wiki
{{:Main Page/Header}}
__NOTOC__
== Hardware ==
* [[Chihiro]]
* [[Xbox]]
* [[Hardware Revisions]]
* [[Motherboard]]
* [[CPU]]
* [[NV2A]]
** [[NV2A/Vertex attributes]]
** [[NV2A/Fixed Function Pipeline]]
** [[NV2A/Vertex Shader]]
** [[NV2A/Pixel Combiner]]
** [[NV2A/Surface Formats]]
* [[Memory]]
* [[Flash ROM]]
* [[MCPX]]
** [[LPC_Debug_Port|LPC]]
** [[APU]]
*** [[DSP]]
** [[ACI]]
** [[Network]]
* [[PCI]]
* [[SMBus]]
** [[EEPROM]]
** [[SMC]]
** [[Video Encoder]]
*** [[AV Cables]]
* [[DVD Drive]]
** [[Xbox Game Disc]]
* [[Hard Drive]]
** [[Config Sector]]
* [[USB]]
** [[Xbox Input Devices]]
** [[Xbox Memory Unit]]
** [[Xbox Live Communicator]] <!-- Maybe rename this to microphones later? -->
** [[Xbox DVD Movie Playback Kit]]
** [[Xbox Cam (for Video Chat)]]
* [[Power Supply]]
* [[Development Kits]]
** [[Super I/O]]
** [[DVD Emulator]]
* [[Manufacturing Process]]
== System Software ==
* [[MCPX ROM]]
* [[BIOS]] / [[Kernel]]
** [[Boot Process]]
** [[XBE]] (Executable file format)
* [[FATX]] (Filesystem)
* [[Xbox ADPCM]]
* [[Dashboard]]
** [[Soundtracks]]
** [[Fatal Error]]
* [[Exploits]]
== Development Kits and Tools ==
* [https://github.com/xqemu/nxdk nxdk (New Xbox Development Kit)]
* [[OpenXDK]]
* [[Microsoft XDK]]
** [[Xbox Title Libraries]]
** [[Direct3D]]
** [[DirectSound]]
** [[System Link]]
** [[Xbox Live]]
*** [[Xbox Live/Connection Test|Connection Test]]
*** [[Xbox Live/Machine Account|Machine Account]]
** [[Xbox Debug Monitor]]
** [[Xbox Neighborhood]]
** [[Kernel_Debug|Xbox Kernel Debugging]]
== Games ==
* [[:Category:Games|Games]]
* [[Engine List]]
== Emulation ==
* [[Emulators]]
** [[Xemu|xemu]]
** [[Cxbx-Reloaded]]
** [[XQEMU]]
** [[Fusion]]
** [[Fission]]
== Operating Systems ==
* [[Linux]]
* [[ReactOS]]
== Historical Pages ==
(archived from the xbox-linux wiki)
* [[Xbox Hard Drive Locking Mechanism]]
* [[Xbox Savegame System]]
* [[Xbox Hardware Overview]]
* [[Xbox Hard Disk Technical_Details]]
* [[Xbox Hard Disk Partitioning]]
* [[Xbox Manufacturing Process]]
* [[The Hidden Boot Code of the Xbox]]
* [[PIC]]
* [[SMBus]]
* [[NForce]]
* [[17 Mistakes Microsoft Made in the Xbox Security System]]
* [[Porting an Operating System to the Xbox HOWTO]]
== Other ==
* [[Patents]]
* [[Resources]]
ccb9a2914582658bad9a8c86e35721b80ff9f14d
Xbox Cam (for Video Chat)
0
4045
7278
2022-07-26T05:34:42Z
Ryzee119
2519
Create Xbox Cam page
wikitext
text/x-wiki
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ The Inspiration Room - Xbox Live Video Chat in Japan]
* Dvd mediaset number: X10-98754
* Xbox cam: X10-71835
=== Sources ===
*[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
*[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
*[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
8053a14de3a0976e650dd5cf8edb5db71b2a89f9
Xbox Live Communicator
0
3829
7280
6865
2022-07-26T06:07:16Z
Ryzee119
2519
/* Protocol */
wikitext
text/x-wiki
The Xbox Live Communicator is the headset which is used for Xbox Live.
[[File:Xbox_Live_Communicator.png|thumb|200px|Headset / Xbox Live Communicator]]
[[File:XBCommunicator-front.jpg|thumb|200px|PCB Front]]
[[File:XBCommunicator-back.jpg|thumb|200px|PCB Back]]
== Protocol ==
The Xbox Live Communicator (XBLC) is a a USB1.1 compliant device with two interfaces. One for Microphone and one for a mono speaker.
The speaker and microphone interface each has a single isochronous endpoint. The speaker and microphone are differentiated by the direction of the isochronous endpoint in the Interface descriptor.
The headset supports the following audio sample rates (All at signed 16bit LE PCM samples). The units are in samples per second. The microphone and speaker cannot have separate sample rates.
* 8000
* 11025
* 16000
* 22050
* 24000
If a sample rate does not divide evenly into USB frame 1ms blocks, the Host Controller driver is responsible for adding an additional sample every n frames. The formula for calculating this is:
<pre>n = 1000 / (sample_rate % 1000)</pre>
For example at 11025 Hz, retail titles will add/request an extra sample every 40 USB frames.
== USB Interface ==
=== Set Sample Rate ===
The Sample Rate for the speaker and microphone is set by a control transfer to endpoint 0 of the device. The transfer has the following format (Ref USB2 Spec 9.3)
<pre>
bmRequestType = Host-to-device | Vendor | Interface (0x41)
bRequest = SET_FEATURE (0x03)
wValue = 0x100 | sample_rate
wIndex = 0x0000
wLength = 0x0000
</pre>
Where sample_rate = 0 for 8000, up to 4 for 24000.
=== Unknown Command ===
A secondary control transfer has been observed in retail titles, however its purpose is not clear. It is believed to be for enabling/disabling Auto Gain Control for the Microphone. The transfer has the following format:
<pre>
bmRequestType = Host-to-device | Vendor | Interface (0x41)
bRequest = SET_FEATURE (0x03)
wValue = 0x0001 or 0x0000 (enable or disable?)
wIndex = 0x0001
wLength = 0x0000
</pre>
Where wValue = 0 or 1 to enable or disable this feature
=== USB Descriptor ===
<pre>
Bus 003 Device 006: ID 045e:0283 Microsoft Corp. Xbox Communicator
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 45
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Microphone ===
{{FIXME}}
=== Speaker ===
{{FIXME}}
==== Links ====
* [https://github.com/JayFoxRox/xbox-tools/tree/4bc808e187311010f850d7fbd9af4b76bed90727/communicator-tool Code for accessing the communicator microphone and speaker]
* [https://web.archive.org/web/20200521011406/http://www.kako.com/neta/2005-009/uac3556b.pdf Datasheet for UAC 3556B (close to the 3560B that the Xbox Communicator uses]
4395742e7a67df23399b8ea07024621500fb0539
Xbe
0
3706
7289
7038
2022-07-30T17:52:20Z
Thrimbor
2531
"Standard Windows format" is actually a UNIX timestamp
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. UNIX timestamp format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0xE682F45B, Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from (UNIX timestamp format).
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0x46437DCD, Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== LibraryVersion Table ==
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0008
| Library Name
| 8-byte ASCII-name of this library. (i.e. "XAPILIB")
|-
! 0x0008
! 0x0002
| Major Version
| Major version for this library (2-byte WORD).
|-
! 0x000A
! 0x0002
| Minor Version
| Minor version for this library (2-byte WORD).
|-
! 0x000C
! 0x0002
| Build Version
| Build version for this library (2-byte WORD).
|-
! 0x000E
! 0x0002
| Library Flags
| Various flags for this library. The fields are:
QFEVersion = 0x1FFF (13-Bit Mask)
Approved = 0x6000 (02-Bit Mask)
Debug Build = 0x8000 (01-Bit Mask)
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: {{FIXME}}
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format =
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
= Resources and links =
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
50147c36799275bad9b7429ecc59c7ce428fd1e5
7292
7289
2022-09-07T01:27:16Z
Edness
2544
/* Title ID */
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. UNIX timestamp format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0xE682F45B, Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from (UNIX timestamp format).
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0x46437DCD, Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== LibraryVersion Table ==
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0008
| Library Name
| 8-byte ASCII-name of this library. (i.e. "XAPILIB")
|-
! 0x0008
! 0x0002
| Major Version
| Major version for this library (2-byte WORD).
|-
! 0x000A
! 0x0002
| Minor Version
| Minor version for this library (2-byte WORD).
|-
! 0x000C
! 0x0002
| Build Version
| Build version for this library (2-byte WORD).
|-
! 0x000E
! 0x0002
| Library Flags
| Various flags for this library. The fields are:
QFEVersion = 0x1FFF (13-Bit Mask)
Approved = 0x6000 (02-Bit Mask)
Debug Build = 0x8000 (01-Bit Mask)
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KN || Konami
|-
| KO || KOEI
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: 45410017 [EA-023]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format =
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
= Resources and links =
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
996797f16c71da25e1f6a24526af64780d57702a
NForce
0
3765
7291
6683
2022-08-27T13:34:38Z
KaosEngineer
2482
fixed typo under AMD Heritage section - bee -> been
wikitext
text/x-wiki
{{retrieved|http://www.xbox-linux.org/wiki/NForce}}
This documents collects information about the Xbox chipset and its sibling, the nVidia nForce chipset, as well as further relatives.
== nForce ==
The nForce chipset consists of the IGP (Integrated Graphics Processor) Northbridge and the MCP (Media and Communications Processor) Southbridge. Both are available in different flavours:
* IGP-64: 64 bit memory bus
* IGP-128: 128 bit memory bus (TwinBank), requires two DIMM modules for 128 bit operation
* MCP-D: includes Dolby Digital encoder
* MCP: Dolby Digital encoder disabled
So these are the four possible combinations:
{| class="wikitable"
|-
|
| MCP
| MCP-D
|-
| IGP-64
| nForce 220
| nForce 220D
|-
| IGP-128
| nForce 420
| nForce 420D
|}
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/05/31/nvidia_crush_chipset_named_nforce/]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2001/06/01/nvidia_crush_is_called_nforce/]
The VGA controller inside the IGP is a "GeForce2 MX Integrated Graphics" (PCI ID:10de/01a0). Its internal name is NV1A.
[https://web.archive.org/web/20100617023830/http://pciids.sourceforge.net/iii/?i=10de]
[https://web.archive.org/web/20100617023830/http://www.nvitalia.com/articoli/editoriali/produzione_nvidia_2001.htm]
Although IGP-64 and IGP-128 are different and their respective chipsets have different codenames (Crush11 and Crush12, see below), there seems to be no difference from the software side:
* The VGA BIOS of the MS-6367 mainboard (nForce 420D configuration, i.e. Crush12) has the internal name "CR11BT.ROM". It also includes the strings "NVIDIA GeForce2 Integrated GPU", "CR11 Board" and "Chip Rev B2".
* The PCI IDs seem to be the same for the GPUs inside IGP-64 and IGP-128.
== Crush ==
"Crush" was the codename of the nForce chipset. Crush11 is the nForce 220/220D/230/230-T, Crush12 is the nForce 420/420D/430/430-T, and Crush18 is the nForce2. The "11" probably derives from "NV11", the internal name of the GeForce2 MX.
[https://web.archive.org/web/20100617023830/http://users.erols.com/chare/chipsets.htm]
[https://web.archive.org/web/20100617023830/http://www.theregister.co.uk/2000/11/17/nvidias_super_secret_crush_spec/]
== nForce & Xbox ==
The Xbox has an IGP-128 that uses an NV2A video core (PCI ID:10de/02a5), which is between the GeForce3 (NV20) and the GeForce4 (NV25). The Southbridge is called "MCP-X" and lacks the PCI card bus (PCI bus #1).
[https://web.archive.org/web/20100617023830/http://www.digit-life.com/articles/nvidianforce/]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/showdoc.html?i=1484]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=1535]
[https://web.archive.org/web/20100617023830/http://www.anandtech.com/systems/showdoc.aspx?i=1561&p=3]
== AMD Heritage ==
There is the following rumour, which is not fully verified yet:
* Microsoft wanted AMD to make the CPU and the chipset for the Xbox, and nVidia to make the video hardware.
* When alpha hardware had already been built, Intel made a better deal
* Microsoft agreed to have Intel CPUs; Intel had to modify AMD's chipset to support an Intel CPU
* Intel insisted that the brand name AMD could not be associated with the Xbox, so nVidia licensed the AMD chipset. Now the Xbox chipset was by nVidia.
* nVidia sold the same chipset for PCs, calling it "nForce".
This is the reason why
* the Xbox is the only nForce chipset with an Intel CPU
* the AMD chipset and the nForce chipset are so similar
Evidence:
* The AMD and nForce AMD IDE controllers are fully compatible. (Linux kernel: "AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04 IDE driver for Linux." [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/ide/pci/amd74xx.c])
* The I2C/SMBus controller on the nForce is fully AMD-756/766/68 compatible. [https://web.archive.org/web/20100617023830/http://lxr.linux.no/source/drivers/i2c/busses/i2c-amd756.c]
* The audio controller is i810 compatible - as is the audio controller of the AMD-768 and the AMD-8111.
* The nForce and AMD-768 modems are compatible.
* At least one register ("VGA_en") in the nForce PCI-to-AGP bridge is compatible with the AMD chipset (AMD-761, 24081.pdf, page 136).
* The nForce uses HyperTransport.
* [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0307.3/0922.html], [https://web.archive.org/web/20100617023830/http://www.uwsg.iu.edu/hypermail/linux/kernel/0301.3/0305.html]
* ''"One man's guess, the silicon is not a major factor. Because the nForce and 760 MP have a similar pin count, they are going to be cost comparable."'' [https://web.archive.org/web/20100617023830/http://overclockers.com/articles446/]
{| class="wikitable"
|-
|
| Northbridge
| Southbridge
|-
| AMD-760
| AMD-761
| AMD-766
|-
| AMD-760MP
| AMD-762
| AMD-766
|-
| AMD-760MPX
| AMD-762
| AMD-768
|}
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_1133,00.html AMD-760™ Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_1130,00.html AMD-760™ MP Chipset Tech Docs]
[https://web.archive.org/web/20100617023830/http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_873_4296,00.html AMD-760™ MPX Chipset Tech Docs]
<br />
The nForce chipset might be based on the AMD-760 chipset.
== More Links ==
[https://web.archive.org/web/20100617023830/http://www.duxcw.com/digest/guides/mb_chip/nforce/print.htm]
131e8431065e76fbf2b12713dec9695548a94765
Kernel/MmAllocateContiguousMemory
0
4046
7293
2022-09-23T18:17:29Z
Agarmash
2543
Add method description
wikitext
text/x-wiki
Allocates a range of physically contiguous, cache-aligned memory from nonpaged pool (main pool on xbox).
<pre>XBSYSAPI EXPORTNUM(165) PVOID NTAPI MmAllocateContiguousMemory
(
IN ULONG NumberOfBytes
);</pre>
[https://github.com/XboxDev/OpenXDK/blob/master/include/xboxkrnl/mm.h Source]
ccba977c7d6f5b04d1995b5c638ead72e0762d54
Motherboard
0
3756
7294
6808
2022-10-19T20:38:41Z
Doom
2542
Updates 1.4 boardscan link to a working one.
wikitext
text/x-wiki
For a list of differences between these mainboards, also see [[Hardware Revisions]].
== Xbox 1.0 ==
* [https://docs.google.com/spreadsheets/d/1oT4OtE95sguxA5KZrlwC_XEF3nlpzrql1ESycBGPtDA/edit#gid=0 Some measurements of passive components by Redherring32 (The Fish)]{{FIXME|reason=Taken from https://discordapp.com/channels/428359196719972353/428359434230693899/592363537343447040}}
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
The following table is based on an Xbox 1.0{{citation needed}} retail board.
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
=== USB Daughterboard ===
* [https://github.com/Teufelchen1/XBOX-USB-HUB Homemade PCB remake by Teufelchen]
[[File:USB_Daughterboard_front.png|100px|thumb|right|Xbox Version 1.0 USB Daughterboard]]
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
== Xbox 1.1 ==
* [https://web.archive.org/web/20180210173816/http://diy.sickmods.net/Tutorials/Xbox1/Hi-Res_Scans/ PCB scan by SICKmods]{{FIXME|reason=Should live in some repo or something; we also have permission to this; https://discordapp.com/channels/428359196719972353/428359434230693899/561462101214756876 / https://media.discordapp.net/attachments/428359434230693899/561462101214756874/image0.png}}
{{FIXME}}
== Xbox 1.2 ==
{{FIXME}}
== Xbox 1.3 ==
{{FIXME}}
== Xbox 1.4 ==
* [https://drive.google.com/drive/folders/1dmMwJkFyu6Tw6SPgfJd_9oZ6wLzpNlmX PCB scan by LoveMHz]{{FIXME|reason=Should live in some repo or something}}
{{FIXME}}
== Xbox 1.5 ==
{{FIXME}}
== Xbox 1.6 ==
* [https://web.archive.org/web/20180210173816/http://diy.sickmods.net/Tutorials/Xbox1/Hi-Res_Scans/ PCB scan by SICKmods]{{FIXME|reason=Should live in some repo or something; we also have permission to this; https://discordapp.com/channels/428359196719972353/428359434230693899/561462101214756876 / https://media.discordapp.net/attachments/428359434230693899/561462101214756874/image0.png}}
{{FIXME}}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm Documentation by PiXEL8]
69e80f6bd793cdf238eb2cc57071f64eca786239
Resources
0
3
7295
6820
2022-10-21T09:40:36Z
Mborgerson
2478
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
=== Xbox Launch ===
* GDC2002: [https://www.powershow.com/download/6f1ff7-NmE2O/Xbox_Launch_Lessons_Learned_powerpoint_ppt_presentation Xbox Launch: Lessons Learned] ([https://www.gdcvault.com/play/1022522/Xbox-Launch-Lessons Audio])
=== Post processing ===
* CEDEC2002: [https://web.archive.org/web/20031212044938/http://www.daionet.gr.jp/~masa/column/2002-09-22.html DOUBLE-S.T.E.A.L techniques] ''(Japanese)''
* GDC2003: [https://web.archive.org/web/20031212140633/http://www.daionet.gr.jp/~masa/column/2003-03-21.html Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless)] ''(English)''
=== HDR rendering ===
* GDC2004: [https://web.archive.org/web/20060404103630/http://www.daionet.gr.jp/~masa/column/2004-04-04.html Practical Implementation of High Dynamic Range Rendering]
=== Deferred Shading ===
* https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://sites.google.com/site/richgel99/home
* https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
* [https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20video%20and%20slides/DEF%20CON%2030%20-%20Tristan%20Miller%20-%20Reversing%20the%20Original%20Xbox%20Live%20Protocols.mp4 Reversing the Original Xbox Live Protocols] presented by [[User:monocasa]] at DEF CON 30 (2022)
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
== Background knowledge about related topics ==
=== Graphics programming ===
* Meltdown 2001 (Microsoft Game development conference): [https://web.archive.org/web/20060203201117/https://www.microsoft.com/mscorp/corpevents/meltdown2001/presentations.asp Presentation slides]
* GDC2001: [http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf DirectX8 Pixel Shaders]
* [http://download.nvidia.com/developer/Papers/ Papers by nvidia from Xbox era]
* [http://download.nvidia.com/developer/presentations/ Presentation slides by nvidia from Xbox era]
* [http://download.nvidia.com/developer/movies/ Presentation recordings by nvidia from Xbox era]
* [http://download.nvidia.com/developer/NVTextureSuite/ Texturing tools by nvidia from Xbox era]
* [http://download.nvidia.com/developer/Tools/ Tools by nvidia from Xbox era]
* http://download.nvidia.com/developer/Third_Party/
* http://iquilezles.org/www/index.htm
* https://web.archive.org/web/20150408045127/http://freespace.virgin.net/hugo.elias/
* http://www.mvps.org/directx/indexes/
* https://www.gdcvault.com/play/247/CRYSIS-Next-Gen ''(Contains some parts which are also applicable to original Xbox)''
* [https://www.valvesoftware.com/en/publications Publications by Valve Software]
* http://graphics.uni-konstanz.de/publikationen/Luft2006ImageEnhancementUnsharp/Luft2006ImageEnhancementUnsharp.pdf
* [https://web.archive.org/web/20090518092325/http://www.daionet.gr.jp:80/~masa/column/index.html Masa's Column (DOUBLE-S.T.E.A.L / Wrecked developer)]
* [https://fgiesen.wordpress.com/ Blog by ryg]
* [http://filmicworlds.com/blog/ Filmic Worlds]
* [https://gpuopen.com/archive/gamescgi/cubemapgen/ AMD CubeMapGen tool for mipmapping cubemaps]
225706b3254dc20566fd96819f9ed9383443f453
Xbox Live
0
3693
7296
6915
2022-10-21T09:43:36Z
Mborgerson
2478
wikitext
text/x-wiki
Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010.
== Architecture ==
The Xbox Live architecture consists of Kerberos-based authentication tickets, with a Secure Gateway used to then access services (such as Matchmaking, Statistics/Leaderboards, and custom game servers)
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customisations for the Xbox. When an Xbox first connects, the server gives it a [[Xbox Live/Machine Account|Machine Account]] which it uses to access the service; this machine account is always sent, but it can only be used alone to access UACS (User Account Creation Service) to create a user account - with both a machine account and user account, all other services are accessible.
== XDK Functions ==
{| class="wikitable"
|+XOnline* Functions
|-
! function
! description
|-
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts
|-
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)
|Called to abort the authentication process.
|-
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )
|
|-
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &logonHandle)
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT).
|-
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)
|Called to check the status of XOnlineLogon. It will return XONLINETASK_S_RUNNING while the login process has not been completed.
|-
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)
|Will return XONLINE_S_LOGON_CONNECTION_ESTABLISHED when the task is successfully completed. Otherwise it will return an error code.
|-
|XOnlineGetLogonUsers()
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.
|-
|XOnlineSetUserGuestNumber(dwUserFlags , 1)
|
|-
|XOnlineTitleUpdate(DWORD)
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update
|-
|XOnlineGetServiceInfo(Service, ?)
|XOnlineGetServiceInfo returns the connection status for a service
|-
|XOnlineNotificationSetState
|
|}
== Discontinuation of service ==
The service was officially discontinued on April 15th, 2010.
12 players decided to stay in a lobby of ''Halo 2'' 24/7 to keep a server running.
The final player, Apache N4SIR was streaming the entire event, as the player count of 12 twindeled down to just him. At 11:40 PM PDT, on May 11th 2010, Apache N4SIR was booted from the game[http://i.imgur.com/oQw6k5H.jpg].
== See Also ==
* [https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20video%20and%20slides/DEF%20CON%2030%20-%20Tristan%20Miller%20-%20Reversing%20the%20Original%20Xbox%20Live%20Protocols.mp4 Reversing the Original Xbox Live Protocols] presented by [[User:monocasa]] at DEF CON 30 (2022).
e29a13ed6592d45333da10e0c3fa1f3406725a16
Xboxen Info
0
4006
7299
7041
2022-12-20T20:29:00Z
Useruser
2541
Add a 2 row Chihiro thanks to catawalks
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| Y
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
cbac490324a6d8ca91630d42fd5d6ee7e66333ce
7300
7299
2022-12-21T14:16:19Z
Useruser
2541
Add xbox7887's DVT3
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| 0xB1
| MCP X2
| ?
| "DVT3(?)"
| NULL
| Y
| xbox7887
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| Y
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
fa979577e9a8511785f55f6d8abfbcaf3dd01337
Xboxen Info
0
4006
7301
7300
2022-12-24T02:20:54Z
Useruser
2541
Reorg protos
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| 0xA1
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| 0xB1
| MCP X2
| ?
| "DVT3(?)"
| NULL
| Y
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| Y
| doom
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
3869c2896e1550e129a3a2da8e4174c090ec4ee3
7302
7301
2022-12-24T03:20:12Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| 0xA1
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| 0xB1
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| 0xB1
| MCP X2
| ?
| "DVT3(?)"
| NULL
| Y
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| Y
| doom
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
90f22c3c1c8a4d56ca653fc4ccf2bc03e43fdb53
7303
7302
2022-12-24T22:45:58Z
Useruser
2541
MCPX rev isn't always the same as NV_BOOT_0
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Debug?
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| 0xB1
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| Y
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| Y
| doom
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| Y
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| Y
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| Y
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| ?
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
b596cc70fbde6360342478708e9910d9dbd45683
7304
7303
2022-12-24T22:46:47Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| 0xB1
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200864113402
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
7b5a801d20684806127a9536fb79515e26d80207
7305
7304
2022-12-24T22:49:13Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
b7443ea8fe356090bd9d80d643f2bafedb7c5961
7306
7305
2022-12-24T22:56:33Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
7392385b5b5f4d726cc2dbb105c121cdcde265de
7307
7306
2022-12-24T22:58:14Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
e14db4275480c6fd5aaf0a31711bd25ba4ee0ff9
7308
7307
2022-12-24T22:59:56Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: XDK D2
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
aa06bbaca7179be6a2eb68b9ff9d37f7f0229bdc
7309
7308
2022-12-24T23:02:55Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: XDK B2
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| ?
| MCP X2
| ?
| "Development Kit"
| ?
| SMC marking & product sticker. Also marked "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: XDK D2
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
3b0365c852fd7b9ef3420ba38356eae9221d7d21
7310
7309
2022-12-24T23:10:13Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: XDK B2
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: XDK B2 : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: XDK D2
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
ff8706ef1aaa08b439ed8454f212b8b7ba044c07
7311
7310
2022-12-24T23:11:28Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: XDK B2
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: XDK B2 : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: XDK D2
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
52ae0e02224519ebc6cac5ede38f0a1130268896
7312
7311
2022-12-24T23:17:43Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: XDK D2
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: XDK B2 : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: XDK B2
|-
| D10
| 0xD4
| MCPX X2
| 0xA3
| ?
| 600901521802
| 64MB "BetaLive" box seen here: https://www.youtube.com/watch?v=754Rhdx3sMo - xbox7887
|}
63bec7091b898bebf9f09d6a508bb6bbdeaf2935
7313
7312
2022-12-25T06:56:44Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: XDK D2
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: XDK B2 : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: XDK B2
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: XB-DVT2-Conf L 49 - "BetaLive" 64MB
|}
851256449a3c53fa606bb07e51bab03f847bda43
7314
7313
2022-12-25T06:57:47Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: XDK D2
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: XDK B2 : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: XDK B2
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: XB-DVT2-Conf L 49 - "BetaLive" 64MB
|}
8c27bb06d508fafcdaba7a364bfe6f38280c649c
7315
7314
2022-12-25T07:02:41Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887 - Sticker: "XDK BETA 1C NA"
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: "XDK D2"
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: "XDK B2"
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: "XB-DVT2-Conf L 49" : Claimed beta Xbox Live box, 64MB
|}
f2596affeaa4218a0f3fbbf015332ef9f67cc766
7316
7315
2022-12-30T21:20:59Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3 FB2202.1 0319D1
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887 - Sticker: "XDK BETA 1C NA"
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: "XDK D2"
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: "XDK B2"
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: "XB-DVT2-Conf L 49" : Claimed beta Xbox Live box, 64MB
|}
38d0a3811bc77941509b2af74b110f08cecc11ed
7317
7316
2022-12-31T12:47:54Z
Useruser
2541
Add another blackshell dev
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3 FB2202.1 0319D1
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887 - Sticker: "XDK BETA 1C NA"
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B5C
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "DVT5(?)"
| ?
| Black shell with serial port - Sticker: "DVT5"
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: "XDK D2"
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: "XDK B2"
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: "XB-DVT2-Conf L 49" : Claimed beta Xbox Live box, 64MB
|}
1850f729709d3b322d8b80edaa2c35d7de67f380
7323
7317
2023-04-15T10:39:53Z
Useruser
2541
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3 FB2202.1 0319D1
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887 - Sticker: "XDK BETA 1C NA"
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B5C
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "DVT5(?)"
| ?
| Black shell with serial port - Sticker: "DVT5"
|-
| DXB
| 0xB2
| MCP X2
| 0xA3
| "Debug Kit"
| 200343213202
| doom
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: "XDK D2"
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: "XDK B2"
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: "XB-DVT2-Conf L 49" : Claimed beta Xbox Live box, 64MB
|-
| D2L
| 0xD5
| ?
| 0xD3
| ?
| 421804232805
| gamebox_ukv - Sticker on front: "Tuscany EVT6, Config E, XM2, Slow, Fast, Fast, Fast, F-die"
|}
b9035b83bcbde554abc2801edbec3bb4426e0dde
7324
7323
2023-04-26T17:15:20Z
Doom
2542
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3 FB2202.1 0319D1
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887 - Sticker: "XDK BETA 1C NA"
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B5C
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "DVT5(?)"
| ?
| Black shell with serial port - Sticker: "DVT5"
|-
| DXB
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200343213202
| doom - "XDK B2" - Motherboard Revision -006 (Week 31, 2001)
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: "XDK D2" - Motherboard Revision -008 (Week 34, 2001)
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: "XDK B2"
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: "XB-DVT2-Conf L 49" : Claimed beta Xbox Live box, 64MB
|-
| D2L
| 0xD5
| ?
| 0xD3
| ?
| 421804232805
| gamebox_ukv - Sticker on front: "Tuscany EVT6, Config E, XM2, Slow, Fast, Fast, Fast, F-die"
|}
befaad3209890593a4b89baeb311789f9775ccf7
7325
7324
2023-06-05T12:55:09Z
Useruser
2541
doom dvt3
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3 FB2202.1 0319D1
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| NULL
| doom - Sticker: "Low Jittor required", GPU: NV2A G07850.1 0119A2, Case: XDK BETA 1C EUROPE CONSOLE BOX LOW JITTER REQUIRED
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887 - Sticker: "XDK BETA 1C NA"
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B5C
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "DVT5(?)"
| ?
| Black shell with serial port - Sticker: "DVT5"
|-
| DXB
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200343213202
| doom - "XDK B2" - Motherboard Revision -006 (Week 31, 2001)
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: "XDK D2" - Motherboard Revision -008 (Week 34, 2001)
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: "XDK B2"
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: "XB-DVT2-Conf L 49" : Claimed beta Xbox Live box, 64MB
|-
| D2L
| 0xD5
| ?
| 0xD3
| ?
| 421804232805
| gamebox_ukv - Sticker on front: "Tuscany EVT6, Config E, XM2, Slow, Fast, Fast, Fast, F-die"
|}
5d21d02ebade0f74c9db87c274592345a572ceab
7328
7325
2023-07-12T14:50:02Z
Useruser
2541
more info about EVT6
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3 FB2202.1 0319D1
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "DVT2(?)"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT3(?)"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| NULL
| doom - Sticker: "Low Jittor required", GPU: NV2A G07850.1 0119A2, Case: XDK BETA 1C EUROPE CONSOLE BOX LOW JITTER REQUIRED
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3(?)"
| NULL
| xbox7887 - Sticker: "XDK BETA 1C NA"
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B5C
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "DVT5(?)"
| ?
| Black shell with serial port - Sticker: "DVT5"
|-
| DXB
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200343213202
| doom - "XDK B2" - Motherboard Revision -006 (Week 31, 2001)
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: "XDK D2" - Motherboard Revision -008 (Week 34, 2001)
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: "XDK B2"
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: "XB-DVT2-Conf L 49" : Claimed beta Xbox Live box, 64MB
|-
| D2L
| 0xD5
| MCPX X2 FA8603.11C 0316D3
| 0xD3
| ?
| 421804232805
| gamebox_ukv - Sticker on front: "Tuscany EVT6, Config E, XM2, Slow, Fast, Fast, Fast, F-die", MCPX is also marked "ENG SAMPLES"
|}
747acf73eec9105a22308c68d0ed16bb85e40021
7337
7328
2023-10-16T15:29:29Z
Doom
2542
wikitext
text/x-wiki
Would be nice to have "Prototype" versions of those as well as later models, need more models of "Debug Kits".
'''Retail'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| P01
| 0xB2
| MCPX X3 F45818.1 0142B2
| 0xA3
| "1.0"
| 409872520802
| Andy
|-
| P05
| 0xD4
| MCPX X3
| 0xA3
| "1.1"
| 420466624702
|
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.2"
| 205742131205
| catawalks
|-
| P11
| 0xD4
| MCPX X3 FB2202.1 0319D1
| 0xA3
| "1.3"
| 610282232705
| cato
|-
| P11
| 0xD4
| MCPX X3
| 0xA3
| "1.4"
| 115526133005
| Ryzee119
|-
| P2L
| 0xD5
| MCPX X3 FF3372.1 0410D3
| 0xD3
| "1.6"
| 419690643505
| dracc
|}
'''Debug'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D01
| 0xB2
| MCPX X2
| 0xA3
| "Debug Kit - 1.0"
| 600370522902
| DarkGabbz
|-
| ?
| ?
| ?
| ?
| "Debug Kit - 1.1"
| ?
|
|-
| B11
| 0xD4
| MCPX X2 FC1389.1 0345D1
| 0xA3
| "Debug Kit - 1.2"
| 603747143905
| xbox7887
|}
'''Chihiro'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PMC_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| D05
| 0xD4
| MCPX X2 FA0444.C1 0224D1
| 0xA3
| "Chihiro - Single row connector"
| 346301512362
| Andy - Sticker: "Arcade"
|-
| B11
| 0xD4
| MCPX X2 FA1864.1 0345D1
| 0xA3
| "Chihiro - Dual row connector"
| 470204035125
| catawalks
|}
'''Prototypes and pre-launch date boxes'''
{| class="wikitable"
|-
! SMC Revision
! MCP PCI Revision
! Marked MCP Revision
! NV_PCM_BOOT_0
! Assumed Model
! SN#
! Notes
|-
| A1E
| ?
| MCP XMODE2
| ?
| "EVT / DVT1"
| ?
| Random poster on AG did a drive by and posted pictures of a box with 64MB of RAM. SMC rev is assumed based on writing on the SMC. 'A1' marking on MCP, coin-cell battery.
|-
| B1C
| ?
| MCP XMODE2 C63860.02 0115B1
| ?
| "DVT2"
| ?
| (Rare) black DVT3 shell with presumably 'early' DVT3 BETA-1C internals: https://twitter.com/DerfJagged/status/1378711268408836097
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3(?)"
| ?
| Syclopse posted this Xbox on AG, it contains 128MB RAM.
|-
| B2A
| ?
| MCP XMODE2 C63861.01 0117B1
| ?
| "DVT3"
| NULL
| doom - Sticker: "Low Jittor required", GPU: NV2A G07850.1 0119A2, Case: XDK BETA 1C EUROPE CONSOLE BOX LOW JITTER REQUIRED
|-
| B2A
| ?
| MCP X2 C63905.00 0119B1
| ?
| "DVT3"
| NULL
| xbox7887 - Sticker: "XDK BETA 1C NA"
|-
| B2A
| ?
| MCP X2
| ?
| "DVT3(?)"
| ?
| Found on some random Denmark website : https://www.playright.dk/rare/titel/xbox-development-kit/xbx
|-
| B5C
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "DVT5(?)"
| ?
| Black shell with serial port - Sticker: "DVT5"
|-
| DXB
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200343213202
| doom - "XDK B2" - Motherboard Revision -006 (Week 31, 2001)
|-
| DXB
| 0xB2
| ?
| 0xA3
| "Development Kit"
| NULL
| doom
|-
| DXF
| 0xB2
| MCP X2 CF0532.01 0126B2
| 0xA3
| "Debug Kit"
| 200864113402
| cato - Sticker: "XDK D2" - Motherboard Revision -008 (Week 34, 2001)
|-
| DXF
| ?
| MCP X2 CF0532.01 0127B2
| ?
| "Development Kit"
| ?
| Sticker: "XDK B2" : https://www.youtube.com/watch?v=YUe_6ys5-kA
|-
| DXB
| 0xB2
| MCPX X2 CF0532.0C 0128B2
| 0xA3
| "Debug Kit"
| 200431413302
| catawalks - Sticker: "XDK B2"
|-
| D10
| 0xD4
| MCPX X2 FA0444.2B 0210D1
| 0xA3
| ?
| 600901521802
| xbox7887 - Sticker: "XB-DVT2-Conf L 49" : Claimed beta Xbox Live box, 64MB
|-
| D2L
| 0xD5
| MCPX X2 FA8603.11C 0316D3
| 0xD3
| ?
| 421804232805
| gamebox_ukv - Sticker on front: "Tuscany EVT6, Config E, XM2, Slow, Fast, Fast, Fast, F-die", MCPX is also marked "ENG SAMPLES"
|}
29162f038b9732caf24021ca487994b231772e4d
Xbox Cam (for Video Chat)
0
4045
7318
7278
2023-01-07T00:03:05Z
Ryzee119
2519
/* Videochat - Xbox Cam */
wikitext
text/x-wiki
== Videochat - Xbox Cam ==
Videochat was released June 2004 in Japan and is a Xbox live enabled/required video chat program with a camera called "Xbox cam" that allowed users to voice and video chat with fellow Xbox videochat users. an active live subscription apear to be required. up to 5 users can videochat with eachother.
"The package includes a camera, a 12-month subscription to Xbox Live, an Xbox Live Voice Communicator, Video Chat Disk with software needed to make it all work, and an Xbox Live Starter Kit Disk. The Xbox Video Chat provides for voice alteration and comes with 40 preinstalled background music tracks. It includes a function to turn the TV screen into a mirror temporarily, so players can groom themselves before joining a conversation."
[http://theinspirationroom.com/daily/2005/xbox-video-chat/ The Inspiration Room - Xbox Live Video Chat in Japan]
* Dvd mediaset number: X10-98754
* Xbox cam: X10-71835
=== USB Descriptor ===
<pre>
Bus 003 Device 003: ID 045e:028c Microsoft Corp. Xbox Video Camera
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x028c
bcdDevice 1.00
iManufacturer 1 Microsoft
iProduct 2 Xbox Video Camera
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0059
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0000 1x 0 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0180 1x 384 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 2
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 3
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0300 1x 768 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 4
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0380 1x 896 bytes
bInterval 1
Device Status: 0x0000
(Bus Powered)
</pre>
=== Sources ===
*[https://imgur.com/a/zbCzl Borman ptoponline.com photos, he forgot he took the pictures]
*[http://www.eurogamer.net/articles/ss_videochat_x eurogamer photos]
*[https://www.youtube.com/watch?v=__6hxTzc8YY Videochat trailer on Xbox-Ism Disk2 TGS 2004]
== Notes ==
* http://euc.jp/periphs/xbox-controller.en.html
038f0a3d51e917771689ea42f5a53212b2631ccd
Emulators
0
3703
7319
6936
2023-01-10T21:29:53Z
Mborgerson
2478
Update xemu repo link
wikitext
text/x-wiki
This is a list of known Xbox emulation projects
{| class="wikitable sortable"
!Status
!Approach
!Chihiro
!Name
!Links
!Initiator
!Platform
!License
!Notes
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[XQEMU]]
|[http://xqemu.com/][https://github.com/xqemu/][https://github.com/espes/xqemu]
|espes
|Windows/macOS/Linux/Others
|
|XQEMU supports hardware-acceleration for the CPU emulation on Linux through KVM.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[[Xemu|xemu]]
|[https://xemu.app/][https://github.com/xemu-project/xemu]
|mborgerson
|Windows/macOS/Linux
|
|xemu is a fork of XQEMU but more usable
|-
|{{Yes|Maintained}}
|HLE/LLE Hybrid
|{{No}}
|[[Cxbx-Reloaded]]
|[http://cxbx-reloaded.co.uk/][https://github.com/Cxbx-Reloaded/Cxbx-Reloaded]
|SoullessSentinel
|Windows
|
|Cxbx-Reloaded supports LLE GPU emulation which was taken from XQEMU. At the time of writing, the LLE GPU is significantly slower than in XQEMU.
|-
|{{Yes|Maintained}}
|LLE
|{{Yes}}
|[http://mamedev.org/ MAME]
|[http://adb.arcadeitalia.net/?mame=xbox][http://adb.arcadeitalia.net/?mame=chihiro][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Xbox][http://emulation.gametechwiki.com/index.php/MAME_compatibility_list#Chihiro_Arcade]
|[https://github.com/mamedev/mame/commits?author=yz70s yz70s] (Samuele Zannoli) and MAME Team
|Windows/macOS/Linux/Others
|
|Focus seems to be on Chihiro emulation.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[[Fusion]][http://michaelbrundage.com/project/xbox-360-emulator/]
|
|Microsoft
|Xbox 360
|Proprietary
|
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid{{citation needed}}
|{{No}}
|[[Fission]][http://www.ign.com/articles/2017/10/23/the-untold-story-of-xbox-one-backwards-compatibility]
|[http://www.xbox.com/en-US/xbox-one/backward-compatibility]
|Microsoft
|Xbox One
|Proprietary
|Announced at E3 2017. Said to be working similar to the 360 support in the Xbox One [https://youtu.be/x0NKP7-h_G0?t=8503]. The 360 support is probably ahead of time shader translation and runtime CPU translation [https://majornelson.com/podcast/584-xbox-one-backward-compatibility-turns-1/].
|
|-
|{{No|Dead}}
|LLE
|{{No}}
|Tortoise
|[https://gitlab.com/kvmbox-reloaded/]
|JayFoxRox, phire
|
|
|The decision was made to create an HLE / LLE Xbox emulation project which is maintained similar to Dolphin or Citra. A key focus was on design simplicity. The project started as a continuation of kvmbox, with devices being copied from the XQEMU source code. The project was called kvmbox-reloaded, while the name was being decided. The HLE portion was never worked on.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|OpenXBOX
|[https://github.com/mborgerson/OpenXBOX]
|mborgerson
|
|
|
|-
|{{No|Dead}}
|HLE/LLE Hybrid
|{{No}}
|xexec
|
|[http://xboxdevwiki.net/User:Haxar Haxar]
|Linux
|
|Xexec is an Xbox executable loader & emulator for x86/x64 Linux; handles direct execution of x86 code, executing Xbox game code directly on the CPU, in userspace Linux; All Windows kernel calls from Xbox game code are translated into POSIX syscalls, with no dependency on Wine.
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/blueshogun96/MacBox MacBox]
|[http://shogun3d-cxbx.blogspot.com/2017/01/the-macos-experiment-part-1.html][http://shogun3d-cxbx.blogspot.com/2017/01/around-beginning-of-new-year-i.html]
|blueshogun96
|macOS
|
|"The macOS Experiment" - An experimental VM for Macs that don't have support for the official VM framework. A simple proof of concept.
|-
|{{Yes|Maintained}}
|LLE/HLE Hybrid
|{{No}}
|StrikeBox
|[https://github.com/StrikerX3/StrikeBox]
|StrikerX3
|Windows/Linux
|
|A fork of OpenXBOX, which was turned into a separate project.
|-
|{{No|Dead}}
|HLE
|{{No}}
|[[Cxbx]]
|
|Caustik
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|Dxbx
|[http://dxbx-emu.com][https://github.com/PatrickvL/Dxbx/]
|ShadowTj
|Windows
|
|The project was started on March 23rd 2008. It is an improved port of Cxbx to the Delphi programming language.
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/impeachgod/Dirtbox Dirtbox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://sourceforge.net/p/ironbabel/code/HEAD/tree/trunk/Box/Xbox/ IronBabel]
|
|daeken
|Unknown
|
|This seems to have been a generic portability framework
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/daeken/Steelbreeze Steelbreeze]
|
|daeken
|Unknown
|
|
|-
|{{Unknown}}
|LLE/HLE Hybrid
|{{No}}
|[https://github.com/daeken/Zookeeper Zookeeper]
|[https://www.reddit.com/r/EmuDev/comments/4isyvu/project_zookeeper_a_new_xbox_emulator/]
|daeken
|macOS
|
|Using Apple's Hypervisor.framework to run a custom kernel (NightBeliever in the repo) and then running Xbox code from there
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.154342/ XbeNext]
|[https://github.com/LoveMHz/XBENext]
|LoveMHz
|Windows
|
|
|-
|{{No|Dead}}
|HLE
|{{No}}
|[http://ngemu.com/forums/.65/ Xeon]
|
|_SF_
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[http://ngemu.com/threads/.105210/ XProject]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://code.google.com/p/xbem xbem]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE/HLE Hybrid
|{{Yes}}
|Hackbox
|
|JayFoxRox
|Windows/Linux
|Private
|This was originally going to be a commercial emulator (but plans were dropped quickly in favor of preservation). The source code was temporarily public but then made private. The source code is still available to a selected group of developers. Hackbox was designed from scratch but re-used code from Cxbx for HLE routine detection.
|-
|{{Unknown}}
|LLE
|{{No}}
|[https://github.com/phire/kvmbox kvmbox]
|
|phire
|Linux
|
|
|-
|{{Unknown}}
|HLE
|{{No}}
|[https://github.com/Gabriel-Maldonado/XboxHLE XboxHLE]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/bjh83/boombox boombox]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/docbrown/vxb vxb]
|
|
|Windows
|
|
|-
|{{Unknown}}
|Unknown
|{{No}}
|[https://github.com/quantumdude836/exciplex exciplex]
|
|
|Windows
|
|
|-
|{{No|Dead}}
|LLE
|{{No}}
|[https://github.com/monocasa/xbvm XBVM]
|
|monocasa
|Linux
|
|
|-
|{{No|Dead}}
|
|{{No}}
|[http://xenoborg-emu.blogspot.com/ Xenoborg]
|
|blueshogun96
|Windows
|
|
|}
== References and links ==
* [https://www.reddit.com/r/emulation/comments/6a958p/cxbx_reloaded_xbox_emulator_panzer_dragoon_orta/ Discussion about Xbox emulation and technical differences between [[Cxbx-Reloaded]] and [[XQEMU]]]
4babe84d55e0bbe5e35ddee8f45c4d2be02afb73
Xbox Input Devices
0
11
7320
6943
2023-01-27T22:14:49Z
Benryves
2548
/* bType = 1: Xbox Gamecontroller */ Added bSubType value for light guns
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
** 0x50 = Light gun
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
====== Example XID reports ======
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
bMaxOutputReportSize 0x00 (0 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Microphones ==
=== Xbox Communicator ===
==== USB Descriptor ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x002d
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
</pre>
=== Xbox Karaoke ===
==== USB Descriptor ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0501
bcdDevice 1.00
iManufacturer 1 Licensed 3PP Vendor
iProduct 2 Karaoke Microphone Module
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x001b
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 121
bInterfaceSubClass 1
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0060 1x 96 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
686a68a9f93136ae74cc770658ed61ea4cf9be1f
7321
7320
2023-01-27T22:59:58Z
Benryves
2548
/* Light guns */ Added notes on standard Xbox light gun input/output reports
wikitext
text/x-wiki
== XID Overview ==
XIDs are USB devices.
The hardware side is USB with a different plug while the software side is USB without HID-descriptors.
Technicly a XID is a USB-hub for the Memory-Units and the XBL Communicator.
The logical XID gamepad USB device is internally connected to that hub.
=== USB Adapters ===
The Xbox's Input devices are USB devices. As such, you can connect a keyboard to the Xbox, or a gamepad to your PC. In fact, Linux already has drivers for the gamepad. In order to preserve Xbox hardware, please do not cut OEM Xbox cables to make an adapter; decent adapters can be acquired cheaply (~$10 USD ea. on 2017.04.30).
[[File:Xboxmaletousbfemale.png|thumb|right|Wiring diagram to show how male Xbox controller plug maps to standard female USB connector. White cable color is depicted as gray for better visibility. The yellow cable is not connected to the USB side, as it's exclusive to Xbox.]]
{| class="wikitable"
|-
! Port (From)
! Plug (To)
! Link
|-
| Xbox
| USB-A
| [https://www.amazon.com/gp/product/B000RT2868 Amazon] [https://www.aliexpress.com/item/32948906701.html Aliexpress]
|-
| USB-A
| Xbox
| [https://www.amazon.com/gp/product/B00F52LQHO Amazon] [https://www.aliexpress.com/item/4000452932782.html Aliexpress]
|}
=== Wiring ===
Untested / unverified! Take this with a grain of salt.
{| class="wikitable"
!Pin
!Typical cable color
!Description
|-
|1
|Red
|VCC
|-
|2
|White
|USB D+
|-
|3
|Green
|USB D-
|-
|4
|Yellow
|VBlank signal from video output (for Lightguns)
|-
|5
|Black
|GND
|-
|}
=== Protocol ===
XID are similar to HID but have custom Vendor requests
==== Control Transfers ====
===== GET_DESCRIPTOR =====
* bmRequestType: 0xC1
* bRequest: 6
* wValue: 0x4200
* wIndex: Interface number
* wLength: <length of respective report; typically 16>
Actual length is truncated to size of descriptor or wLength. Whichever is smaller.
<pre>
typedef struct XIDDescriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t bcdXid;
uint8_t bType;
uint8_t bSubType;
uint8_t bMaxInputReportSize;
uint8_t bMaxOutputReportSize;
uint16_t wAlternateProductIds[4];
};
</pre>
bDescriptorType is probably always 0x42.
====== bType = 1: Xbox Gamecontroller ======
* bSubType:
** 0x01 = Gamepad (Duke)
** 0x02 = Gamepad (Controller-S)
** 0x10 = Steering wheel
** 0x20 = Arcade Stick
** 0x50 = Light gun
====== bType = 3: Xbox DVD Movie Playback IR Dongle======
* bSubType:
** 0x00
====== bType = 128: Steel Battalion ======
* bSubType:
** 0x01
====== Example XID reports ======
This is an example XID descriptor taken from a Controller-S (VID 0x045E / PID 0x0289).
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x01
bSubType 0x02
bMaxInputReportSize 0x14 (20 bytes)
bMaxOutputReportSize 0x06 (6 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from a Steel Battalion controller.
<pre>
bLength 0x10 (16 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x80
bSubType 0x01
bMaxInputReportSize 0x1A (26 bytes)
bMaxOutputReportSize 0x16 (22 bytes)
wAlternateProductIds 4 x 0xFFFF
</pre>
This is an example XID descriptor taken from an official Microsoft DVD Movie Playback IR dongle.
<pre>
bLength 0x08 (8 bytes)
bDescriptorType 0x42
bcdXid 0x0100 (USB 1.0)
bType 0x03
bSubType 0x00
bMaxInputReportSize 0x06 (6 bytes)
bMaxOutputReportSize 0x00 (0 bytes)
</pre>
===== GET_CAPABILITIES =====
* bmRequestType: 0xC1
* bRequest: 1
* wValue:
** 0x0100 for input
** 0x0200 for output
* wIndex: Interface number
* wLength: <length of respective report>
* STALL if wValue not supported.
Actual length is truncated to size of report or wLength. Whichever is smaller.
<pre>typedef struct XIDGamepadCapabilities {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
The data will be similar to the GET_REPORT, but instead of storing actual values, it will have bits set (1) where the bit is valid in the respective report.
If the bit is auto-generated, it will be cleared (0).
===== SET_REPORT =====
* bmRequestType: 0x21
* bRequest: 9
* wValue: 0x0200
* wIndex: Interface number
* wLength: <length of report; typically 6>
* STALL if wValue not supported.
====== Typical report ======
<pre>typedef struct XIDGamepadReport {
uint8_t bReportId;
uint8_t bLength;
<Data>
}</pre>
===== GET_REPORT =====
* bmRequestType: 0xA1
* bRequest: 1
* wValue: 0x0100
* wIndex: Interface number
* wLength: <length of report; typically 20>
* STALL if wValue not supported or if wLength is greater than report size.
* ACK if supported.
====== Typical report ======
<pre>typedef struct XIDGamepadOutputReport {
uint8_t report_id; //FIXME: is this correct?
uint8_t length;
<Data>
}</pre>
==== Interrupt transfers ====
Alternatively interrupt-in and interrupt-out transfers can be used for GET_REPORT and SET_REPORT respectively.
In case of the interrupt-in, there is another status which can occur now:
* NAK if supported but no changes since last ACK.
== Standard Gamepads ==
=== Microsoft Hardware Variants ===
There are a few hardware re-designs of the Microsoft Gamepad.
{| class="wikitable"
!Controller Name
!Part Number
!Board Model
!Notes
!Datasheets
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819B
|Earliest known model{{FIXME|Reason=Small sample size (5), can't confirm}}. 3 IC's: Dedicated ST 92163/JFL Micro Controller, dedicated AT43USB401 USB Controller, 4 Channel Analog Mux LW052A.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|K023B121
|Same as 23-0819B, but manufactured in China. Only Board Model that does not follow naming conventions. Hardware identical. Easily identified by a serial number that starts with "KD".
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (AKA "Duke")
|X08-17160
|23-0819C
|Last known Duke model.{{FIXME|Reason=Small sample size (5), can't confirm}}. Identical to 23-0819B in hardware, new silkscreen markings show this model is [https://en.wikipedia.org/wiki/UL_94 UL-94 V-0 compliant]. All boards after this are V-0 compliant.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Game Controller (Looks like an S, with green Xbox jewel)
|X08-19383
|23-0923A
|Japan and Australia exclusive model{{FIXME|Reason=Speculation, no hard source for this}}.Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design.
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923B
|Minification of "Duke" PCB Design. Has exact same IC's as the Duke, only in an S controller design
|[https://archive.org/details/ST92163 ST 92163/JFL], AT43USB401{{FIXME|Reason=Can't find datasheet}}, [https://web.archive.org/web/20191230174412/https://www.rockbox.org/wiki/pub/Main/DataSheets/TexasInstrumentsLW052ADataSheet.pdf LW052A]
|-
|Xbox Controller S
|X08-69873
|23-0923H
|Entirely new PCB design. Single IC on the board, AT43USB355M-AC
|[https://archive.org/details/AT43USB355 AT43USB355M-AC]
|-
|Xbox Controller S
|X08-69873
|23-0923I
|PCB Design almost exactly the same as H revision. Only difference is the IC is smaller: AT43USB353M-AC
|[https://archive.org/details/AT43USB353M-AC AT43USB353M-AC]
|}
There are also dedicated Part Numbers for color variants:
{| class="wikitable"
!Controller Part Number
!Controller Description
!Board Model
|-
|X02332-001
|Crystal S Controller
|23-0923I
|-
|X09-64240-01
|Transparent Green Controller
|23-0923I
|-
|X800679-100
|Black S With Halo Jewel
|23-0923I
|}
=== USB Descriptors ===
See https://github.com/xboxdrv/xboxdrv/blob/stable/src/xpad_device.cpp for a list of devices.
==== 23-0819B ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x0202 Xbox Controller
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
==== K023B121 ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0819C ====
Identical to 23-0819B {{FIXME|Reason=Confirm with xid-dumper tool}}
==== 23-0923A ====
Changes from 23-0819B
<pre>
Device Descriptor:
idProduct: 0x0285
</pre>
==== 23-0923B ====
{{FIXME|Reason=No Descriptor Dump}}
==== 23-0923H ====
Changes from 23-0819B
<pre>
Device Descriptor
bMaxPacketSize0: 8
idProduct: 0x0289
bcdDevice: 1.20
Configuration Descriptor
Interface Descriptor
Endpoint Descriptor
bEndpointAddress: 0x81
</pre>
==== 23-0923I ====
Changes from 23-0923H
<pre>
Device Descriptor
bcdDevice: 1.21
</pre>
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|{{input-ls}}
|2
|0x40
|
|-
|{{input-rs}}
|2
|0x80
|
|-
|{{input-a}}
|4
|0xFF
|Button is analog
|-
|{{input-b}}
|5
|0xFF
|Button is analog
|-
|{{input-x}}
|6
|0xFF
|Button is analog
|-
|{{input-y}}
|7
|0xFF
|Button is analog
|-
|{{input-black}}
|8
|0xFF
|Button is analog
|-
|{{input-white}}
|9
|0xFF
|Button is analog
|-
|{{input-lt}}
|10
|0xFF
|Trigger is analog
|-
|{{input-rt}}
|11
|0xFF
|Trigger is analog
|-
|{{input-lx}}
|12
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ly}}
|14
|0xFFFF
|Negative = Down; Positive = Up
|-
|{{input-rx}}
|16
|0xFFFF
|Negative = Left; Positive = Right
|-
|{{input-ry}}
|18
|0xFFFF
|Negative = Down; Positive = Up
|}
=== Xbox to Controller ===
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Left actuator strength
|2
|0xFFFF
|
|-
|Right actuator strength
|4
|0xFFFF
|
|}
The Microsoft Controller S will not react to packets which don't have a value of 6 in the <code>length</code> field of the header.
The Fanatec Speedster 3 ForceShock will still react to those. Further testing is necessary with other gamepads.
== Steering wheels ==
=== MadCatz Wheel ===
{{FIXME}}
=== Fanatec Speedster 3 ForceShock ===
==== Pedals ====
The Pedals are ''not'' a USB device.
Note that the cable going to the pedals is also ''not'' a USB port despite using the Xbox controller breakaway plug.
Likewise, plugging the pedals to a PC / Xbox won't provide a USB / XID (it is detected as garbage):
<pre>
new full-speed USB device number 14 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 15 using xhci_hcd
device descriptor read/64, error -71
device descriptor read/64, error -71
new full-speed USB device number 16 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 16, error -71
new full-speed USB device number 17 using xhci_hcd
Device not responding to setup address.
Device not responding to setup address.
device not accepting address 17, error -71
unable to enumerate USB device
</pre>
==== Internal HUB ====
===== USB Descriptors =====
Power not connected, pedals not connected, not in Tuning mode:
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0102
bcdDevice 0.01
iManufacturer 0
iProduct 1 End
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0000.0100 power
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0003
Self Powered
Remote Wakeup Enabled
</pre>
==== Steering wheel (and Pedals) ====
Always connected to port 1 of the internal HUB
===== USB Descriptors =====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x3767
idProduct 0x0101
bcdDevice 2.80
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
== Arcade Sticks ==
=== Xbox TECMO Dead or Alive 3 ARCADE Stick Joystick Controller Japan ===
{{FIXME}}
=== Street Fighter 15th Anniversary Edition Arcade Stick ===
{{FIXME}}
=== Gamester Xbox Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Fighter Arcade Stick ===
{{FIXME}}
=== Nuby Xbox Arcade Super Stick ===
{{FIXME}}
The source image of the box and on device has item<nowiki>#:</nowiki>36020.
=== Naki Ultimate Fighting Stick ===
{{FIXME}}
[https://www.youtube.com/watch?v=4GphUsTzgds YouTube reviewer] report this joystick to have rumble support.
== Light guns ==
Light guns use similar input and output reports to standard gamepads. Their bSubType is set to 0x50. They report where they are aimed in place of the left stick coordinates, and an extra bit at offset 3 in their input reports flags whether the light gun is currently pointed at the screen or not. Light guns may not function properly if they are not supplied with a video sync signal (they may not populate their input reports correctly, or even fail to enumerate as USB devices entirely).
=== Controller to Xbox ===
20 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|{{input-dy+}}
|2
|0x01
|
|-
|{{input-dy-}}
|2
|0x02
|
|-
|{{input-dx-}}
|2
|0x04
|
|-
|{{input-dx+}}
|2
|0x08
|
|-
|{{input-start}}
|2
|0x10
|
|-
|{{input-back}}
|2
|0x20
|
|-
|Light visible
|3
|0x20
|Set to 1 if the gun is pointed to a bright screen, 0 if no light visible.
|-
|Unknown 1
|3
|0x40
|rowspan="2" | Light guns from different manufacturers include these two bits in their GET_CAPABILITIES reports, but they always seem to read back as 0 in GET_REPORT.
|-
|Unknown 2
|3
|0x80
|-
|{{input-a}} Trigger
|4
|0xFF
|rowspan="6" | Digital only, either 0 or 255
|-
|{{input-b}}
|5
|0xFF
|-
|{{input-x}}
|6
|0xFF
|-
|{{input-y}}
|7
|0xFF
|-
|{{input-black}}
|8
|0xFF
|-
|{{input-white}}
|9
|0xFF
|-
|{{input-lx}}
|12
|0xFFFF
|rowspan="2" | Absolute position using the full stick range.
(0, 0) is the center of the screen and is also reported if the light gun is pointed off-screen.
|-
|{{input-ly}}
|14
|0xFFFF
|}
=== Xbox to Controller ===
==== Force feedback: wValue: 0x0200, wLength: 6 ====
6 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Actuator strength
|2
|0xFFFF
|
|-
|(Unused)
|4
|0x0000
|
|}
The 4Gamers-branded gun (which appears to be sold by a number of different manufacturers) only reports it has the left actuator, however it only responds to force feedback output reports for the ''right'' actuator. Games appear to always enable both actuators, whether the controller reports it has both or not.
==== Calibration: wValue: 0x0201, wLength: 10 ====
10 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Center calibration X
|2
|0xFFFF
|rowspan="2"|Gun's reported value subtracted from (0,0)
|-
|Center calibration Y
|4
|0xFFFF
|-
|Top left calibration X
|6
|0xFFFF
|rowspan="2"|Gun's reported value subtracted from (-25000,25000)
|-
|Top left calibration Y
|8
|0xFFFF
|}
Light guns are expected to handle their own calibration, i.e. the game will tell the gun the offsets between its reported position and the expected position and then expect the gun to offset and scale its output to compensate. The calibration process runs as follows:
# The game will first send a calibration report with all four offsets reset to (0, 0), (0, 0) to reset any offsets and scaling.
# The game will now display a target in the centre of the screen and ask you to shoot it. This will tell it how "wrong" the gun is when aimed at where it thinks (0, 0) should be on the screen. If the gun normally shoots slightly too high and further to the right, it might report (1000, 3000) for example.
# The game sends a calibration report to the gun to negate the offset, e.g. (-1000, -3000), (0, 0) using our example of (1000, 3000) from before.
# The game will now display a target in at (-25000, 25000) on the screen and ask you to shoot it. This will tell it how "wrong" the gun is when aimed at the top left of the screen.
# The coordinates received from the gun will be subtracted from the expected (-25000, 25000) and sent back to the gun in the second part of the calibration report along with the values previously determined for the centre position. If the first calibration was enough to adjust the screen offset we might have seen the "perfect" coordinates of (-25000, 25000) in which case the report would be (-1000, -3000), (0, 0) again. However, if our gun read the coordinates slightly closer the the middle of the screen at (-20000, 22000) then the report would be (-1000, -3000), (5000, -3000).
If the light gun does not handle the calibration output report then you will not be able to get past the calibration screen in ''The House of the Dead III''.
=== EMS TopGun II ===
''This is an unlicensed / unofficial Xbox accessory.''
The website for this product can be found at http://www.hkems.com/product/xbox/EMSTopGun2.htm
The gun presents itself as a standard Xbox gamepad. It uses a different USB descriptor for Xbox (X) and the other mode (P).
There is no internal hub in this device.
{| class="wikitable"
! EMS TopGun II !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="4" | Digital only, either 0 or 255
|-
| Grip || {{input-b}}
|-
| A || {{input-x}}
|-
| B || {{input-y}}
|-
| START || {{input-start}} ||
|-
| SE/BA || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || rowspan="2" | Absolute position using the full stick range
|-
| Aim Up / Down || {{input-ly}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons (All of those read constant zeros).
===== Turbo Mode =====
* Turbo mode 0 keeps {{input-a}} pressed while trigger is held
* Turbo mode 1 toggles {{input-a}} rapidly while trigger is held
* Turbo mode 2 toggles {{input-a}} rapidly and once in a while {{input-b}} while trigger is held
===== Force Feedback =====
The upper part of the gun is moveable and should push back to simulate recoil (possibly hurting your thumb while you are using the stick).
I could not get the force feedback working, but I'm sure I've had it working in the past on PC.{{citation needed}}
==== USB Descriptors ====
This is the descriptor in the Xbox mode (X).
<pre>
Bus 003 Device 016: ID 0b9a:016b
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0b9a
idProduct 0x016b
bcdDevice 4.57
iManufacturer 1 EMS̖E
iProduct 2 EMS TopGun
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
</pre>
=== Joytech Sharp Shooter ===
''This is an unlicensed / unofficial Xbox accessory.''
The third party light gun from Joytech reports itself as 2 devices and mentions pattent [http://www.google.com/patents/US6287198 US6287198]
it came with a detachable viewfinder scope without any magnification. a red dot apears in the viewfinder, its a reflection of a red led, powered by the gun over usb.
model numer: JS-901D
{| class="wikitable"
! Joytech Sharp Shooter !! Xbox Gamepad !! Notes
|-
| Stick || {{input-d}} ||
|-
| Trigger || {{input-a}} || rowspan="6" | Digital only, either 0 or 255 {{citation needed}}
|-
| B (Left side) || rowspan="3" | {{input-b}}
|-
| B (Right side)
|-
| B (Magazine button)
|-
| x || {{input-x}}
|-
| y || {{input-y}}
|-
| START || {{input-start}} ||
|-
| BACK || {{input-back}} ||
|-
| Aim Left / Right || {{input-lx}} || {{citation needed}}
|-
| Aim Up / Down || {{input-ly}} || {{citation needed}}
|}
There is no right thumbstick, thumbstick presses, black/white button or trigger buttons {{citation needed}}
===== Fire/Reload Mode =====
* Normal mode does nothing, normal operation
* Auto reload mode toggles {{input-b}} rapidly to rappidly reload {{citation needed}}
* Auto fire+reload mode toggles {{input-a}} + {{input-b}} rapidly {{citation needed}}
==== USB Descriptors ====
<pre>
Bus 003 Device 025: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 1 (error)
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 2 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Bus 003 Device 024: ID 1292:3006 Innomedia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0 Full speed (or root) hub
bMaxPacketSize0 8
idVendor 0x1292 Innomedia
idProduct 0x3006
bcdDevice 1.50
iManufacturer 1 (c) 2004 R0R3 Inc.
iProduct 2 US Patent 6,287,198
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 (c) R0R3 Devices Inc. US Patent 6,287,19Ē
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 64mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 5 (error)
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 255
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 3
wHubCharacteristic 0x000d
Per-port power switching
Compound device
Per-port overcurrent protection
bPwrOn2PwrGood 32 * 2 milli seconds
bHubContrCurrent 64 milli Ampere
DeviceRemovable 0x02
PortPwrCtrlMask 0x0e
Hub Port Status:
Port 1: 0000.0103 power enable connect
Port 2: 0000.0100 power
Port 3: 0100.0100 power
Device Status: 0x0000
(Bus Powered)
</pre>
== Microphones ==
=== Xbox Communicator ===
==== USB Descriptor ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0283 Xbox Communicator
bcdDevice 1.58
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x002d
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 120
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
</pre>
=== Xbox Karaoke ===
==== USB Descriptor ====
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x045e Microsoft Corp.
idProduct 0x0501
bcdDevice 1.00
iManufacturer 1 Licensed 3PP Vendor
iProduct 2 Karaoke Microphone Module
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x001b
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 121
bInterfaceSubClass 1
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0060 1x 96 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
</pre>
== Steel Battalion Controller ==
[[File:SBC.jpg|thumb|200px|Steel Battalion Controller Layout]]
=== USB Descriptors ===
<pre>
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0a7b
idProduct 0xd000
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 88 Xbox
bInterfaceSubClass 66 Controller
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 4
</pre>
=== Controller to Xbox ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
26 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|RightJoyMainWeapon
|2
|0x01
|
|-
|RightJoyFire
|2
|0x02
|
|-
|RightJoyLockOn
|2
|0x04
|
|-
|Eject
|2
|0x08
|
|-
|CockpitHatch
|2
|0x10
|
|-
|Ignition
|2
|0x20
|
|-
|Start
|2
|0x40
|
|-
|MultiMonOpenClose
|2
|0x80
|
|-
|MultiMonMapZoomInOut
|3
|0x01
|
|-
|MultiMonModeSelect
|3
|0x02
|
|-
|MultiMonSubMonitor
|3
|0x04
|
|-
|MainMonZoomIn
|3
|0x08
|
|-
|MainMonZoomOut
|3
|0x10
|
|-
|FunctionFSS
|3
|0x20
|
|-
|FunctionManipulator
|3
|0x40
|
|-
|FunctionLineColorChange
|3
|0x80
|
|-
|Washing
|4
|0x01
|
|-
|Extinguisher
|4
|0x02
|
|-
|Chaff
|4
|0x04
|
|-
|FunctionTankDetach
|4
|0x08
|
|-
|FunctionOverride
|4
|0x10
|
|-
|FunctionNightScope
|4
|0x20
|
|-
|FunctionF1
|4
|0x40
|
|-
|FunctionF2
|4
|0x80
|
|-
|FunctionF3
|5
|0x01
|
|-
|WeaponConMain
|5
|0x02
|
|-
|WeaponConSub
|5
|0x04
|
|-
|WeaponConMagazine
|5
|0x08
|
|-
|Comm1
|5
|0x10
|
|-
|Comm2
|5
|0x20
|
|-
|Comm3
|5
|0x40
|
|-
|Comm4
|5
|0x80
|
|-
|Comm5
|6
|0x01
|
|-
|LeftJoySightChange
|6
|0x02
|
|-
|ToggleFilterControl
|6
|0x04
|
|-
|ToggleOxygenSupply
|6
|0x08
|
|-
|ToggleFuelFlowRate
|6
|0x10
|
|-
|ToggleBuffreMaterial
|6
|0x20
|
|-
|ToggleVTLocation
|6
|0x40
|
|-
|
|6
|0x80
|
|-
|
|7
|0xFF
|
|-
|
|8
|0xFF
|
|-
|AimingX
|9
|0xFF, maybe 0xFFFF at offset 8?
|"Aiming Lever" joystick on the right. X Axis value.
|-
|AimingY
|11
|0xFF, maybe 0xFFFF at offset 10?
|"Aiming Lever" joystick on the right. Y Axis value.
|-
|RotationLever
|13
|0xFF, maybe 0xFFFF at offset 12?
|"Rotation Lever" joystick on the left.
|-
|SightChangeX
|15
|0xFF, maybe 0xFFFF at offset 14?
|"Sight Change" analog stick on the "Rotation Lever" joystick. X Axis value.
|-
|SightChangeY
|17
|0xFF, maybe 0xFFFF at offset 16?
|"Sight Change" analog stick on the "Rotation Lever" joystick. Y Axis value.
|-
|LeftPedal
|19
|0xFF, maybe 0xFFFF at offset 18?
|
|-
|MiddlePedal
|21
|0xFF, maybe 0xFFFF at offset 20?
|
|-
|RightPedal
|23
|0xFF, maybe 0xFFFF at offset 22?
|
|-
|TunerDial
|24
|0x0F
|The 9 o'clock postion is 0, and the 6 o'clock position is 12. The blank area between the 6 and 9 o'clock positions is 13, 14, and 15 clockwise.
|-
|
|24
|0xF0
|
|-
|GearLever
|25
|0xFF
|The gear lever on the left block.
|}
=== Xbox to Controller ===
From http://steelbattalionnet.codeplex.com/SourceControl/latest#SBC/SteelBattalionController.cs
22 bytes
{| class="wikitable"
!Field
!Offset (Bytes)
!Mask
!Notes
|-
|Start
|0
|0x00
|
|-
|bLen (22 bytes)
|1
|0x16
|
|-
|EmergencyEject
|2
|0x0F
|
|-
|CockpitHatch
|2
|0xF0
|
|-
|Ignition
|3
|0x0F
|
|-
|Start
|3
|0xF0
|
|-
|OpenClose
|4
|0x0F
|
|-
|MapZoomInOut
|4
|0xF0
|
|-
|ModeSelect
|5
|0x0F
|
|-
|SubMonitorModeSelect
|5
|0xF0
|
|-
|MainMonitorZoomIn
|6
|0x0F
|
|-
|MainMonitorZoomOut
|6
|0xF0
|
|-
|ForecastShootingSystem
|7
|0x0F
|
|-
|Manipulator
|7
|0xF0
|
|-
|LineColorChange
|8
|0x0F
|
|-
|Washing
|8
|0xF0
|
|-
|Extinguisher
|9
|0x0F
|
|-
|Chaff
|9
|0xF0
|
|-
|TankDetach
|10
|0x0F
|
|-
|Override
|10
|0xF0
|
|-
|NightScope
|11
|0x0F
|
|-
|F1
|11
|0xF0
|
|-
|F2
|12
|0x0F
|
|-
|F3
|12
|0xF0
|
|-
|MainWeaponControl
|13
|0x0F
|
|-
|SubWeaponControl
|13
|0xF0
|
|-
|MagazineChange
|14
|0x0F
|
|-
|Comm1
|14
|0xF0
|
|-
|Comm2
|15
|0x0F
|
|-
|Comm3
|15
|0xF0
|
|-
|Comm4
|16
|0x0F
|
|-
|Comm5
|16
|0xF0
|
|-
|
|17
|0x0F
|
|-
|GearR
|17
|0xF0
|
|-
|GearN
|18
|0x0F
|
|-
|Gear1
|18
|0xF0
|
|-
|Gear2
|19
|0x0F
|
|-
|Gear3
|19
|0xF0
|
|-
|Gear4
|20
|0x0F
|
|-
|Gear5
|20
|0xF0
|
|-
|Unused?
|21
|
|-
|}
== Related links ==
[https://github.com/xqemu/xqemu/blob/xbox/hw/xbox/xid.c XID emulation in XQEMU]
[https://docs.google.com/spreadsheets/d/1-c1tXfOMvaWuno3ixQyI_rPCQVAZA24N4v9OPZUSrCk/edit?usp=sharing Compilation of Xbox Controller Hardware Research]
8cbaba449f7becf32c5c01e8bf14823916e6f100
Engine List
0
4
7322
6297
2023-04-01T05:16:30Z
Ieee802dot11ac
2549
Add Milo games
wikitext
text/x-wiki
There might also be games which were released for Xbox 360 but not the original Xbox. I forgot to respect that with grep, so I'll remove them manually...
= GoldSrc =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Counter-Strike]]
|}
= id Tech 3 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Return to Castle Wolfenstein: Tides of War]]
|-
| [[Soldier of Fortune II: Double Helix]]
|-
| [[Star Wars: Jedi Knight II: Jedi Outcast]]
|-
| [[Star Wars: Jedi Knight: Jedi Academy]]
|-
| [[007: Everything or Nothing]]
|-
| [[007: Agent Under Fire]]
|}
= id Tech 4 =
id Tech 4 was scaled down for Xbox{{citation needed}}.
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Doom 3]]
|-
| [[Doom 3: Resurrection of Evil]]
|}
= Source Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Half-Life 2]]
|}
= CryEngine 1 =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Far Cry Instincts]]
|-
| [[Far Cry Instincts: Evolution]]
|}
= Torque Game Engine =
{| class="wikitable sortable" font-size:90%;"
! Title
|-
| [[Marble Blast Gold]]
|-
| [[ThinkTanks]]
|}
= Renderware =
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[AFL Live 2003]]
|-
|[[AFL Live 2004]]
|-
|[[AFL Live Premiership Edition]]
|-
|[[Battlefield 2: Modern Combat]]
|-
|[[Black]]
|-
|[[Blitz: The League]]
|-
|[[Broken Sword: The Sleeping Dragon]]
|-
|[[Burnout]]
|-
|[[Burnout 2: Point of Impact]]
|-
|[[Burnout 3: Takedown]]
|-
|[[Burnout Revenge]]
|-
|[[Call of Duty: Finest Hour]]
|-
|[[Cold Fear]]
|-
|[[Commandos: Strike Force]]
|-
|[[Darkwatch]]
|-
|[[Dead to Rights II]]
|-
|[[Evil Dead: Regeneration]]
|-
|[[Gauntlet: Seven Sorrows]]
|-
|[[Grand Theft Auto III]]
|-
|[[Grand Theft Auto: Vice City]]
|-
|[[Grand Theft Auto: San Andreas]]
|-
|[[Harry Potter and the Prisoner of Azkaban]]
|-
|[[Harry Potter and the Goblet of Fire]]
|-
|[[Headhunter Redemption]]
|-
|[[Hello Kitty: Roller Rescue]]
|-
|[[Kill Switch]]
|-
|[[Madagascar]]
|-
|[[Manhunt]]
|-
|[[Max Payne 2: The Fall of Max Payne]]
|-
|[[Major League Baseball 2K5]]
|-
|[[Mortal Kombat: Armageddon]]
|-
|[[Mortal Kombat: Deadly Alliance]]
|-
|[[Mortal Kombat: Deception]]
|-
|[[NBA Ballers]]
|-
|[[NFL Blitz 2003]]
|-
|[[Rugby League]]
|-
|[[ObsCure]]
|-
|[[Outlaw Golf 2]]
|-
|[[Puyo Pop: Fever]]
|-
|[[RoboCop]]
|-
|[[Rolling]]
|-
|[[Alfa Romeo Racing Italiano]]
|-
|[[Secret Weapons Over Normandy]]
|-
|[[Shadow the Hedgehog]]
|-
|[[Sonic Heroes]]
|-
|[[SpongeBob SquarePants: Battle for Bikini Bottom]]
|-
|[[Tech Deck Dude Bare Knuckle Grind]]
|-
|[[Teenage Mutant Ninja Turtles: Mutant Melee]]
|-
|[[The Incredibles: Rise of the Underminer]]
|-
|[[The Incredibles]]
|-
|[[The SpongeBob SquarePants Movie Game]]
|-
|[[The Warriors]]
|-
|[[Tony Hawk's Pro Skater 3]]
|-
|[[Tony Hawk's Pro Skater 4]]
|-
|[[Total Overdose: A Gunslinger's Tale in Mexico]]
|-
|[[Toxic Grind]]
|-
|[[Without Warning]]
|-
|[[Yourself!Fitness]]
|}
= Unreal Engine 1 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|[[New Legends]]
|UT Build 613
|}
= Unreal Engine 2 =
{| class="wikitable sortable" font-size:90%;"
!Title
!Engine Version
|-
|-
|[[Advent Rising]]
|UE2 Build 2226
|-
|[[America's Army: Rise of a Soldier]]
|UT2003 Build 928
|-
|[[Brothers in Arms: Earned in Blood]]
|UE2 Build 2226
|-
|[[Brothers in Arms: Road to Hill 30]]
|UE2 Build 2226
|-
|[[Combat: Task Force 121]]
|UE2 Build 2110
|-
|[[Dead Man's Hand]]
|UE2 Build 2110
|-
|[[Deus Ex: Invisible War]]
|Warfare Build 777
|-
|[[Land of the Dead: Road to Fiddler's Green]]
|UE2 BUild 2226
|-
|[[Magic the Gathering: Battlegrounds]]
|Warfare Build 926
|-
|[[Men of Valor]]
|Warfare Build 926
|-
|[[Open Season]]
|Warfare Build 927
|-
|[[Pariah]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[Shadow Ops: Red Mercury]]
|UE2 Build 2110
|-
|[[Star Wars: Republic Commando]]
|UE2 Build 2226
|-
|[[Thief: Deadly Shadows]]
|Warfare Build 777
|-
|[[Tom Clancy's Ghost Recon: Advanced Warfighter]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3]]
|Warfare Build 927
|-
|[[Tom Clancy's Rainbow Six 3: Black Arrow]]
|Warfare Build 927
|-
|[[Tom Clancy's Splinter Cell]]
|Warfare Build 829
|-
|[[Tom Clancy's Splinter Cell: Chaos Theory]]
|Warfare Build 829 - Singleplayer & Co-op mode
UE2 Build 2110 - Versus mode
|-
|[[Tom Clancy's Splinter Cell: Double Agent]]
|Warfare Build 829 - Offline mode<br>UE2 Build 2110 - Online mode
|-
|[[Tom Clancy's Splinter Cell: Pandora Tomorrow]]
|Warfare Build 829 - Singleplayer mode<br>UE2 Build 2110 - Multiplayer mode
|-
|[[Unreal II: The Awakening]]
|Warfare Build 829 - Retail box<br>UE2 Build 2001 - Patch v1403
|-
|[[Unreal Championship]]
|UT2003 Build 928
|-
|[[Unreal Championship 2: The Liandri Conflict]]
|UE2 build 2227 with some UE2.5 code<br>(UE2X)
|-
|[[Warpath]]
|UT2003 Build 928 with some UE2.5 code
|-
|[[World War II Combat: Road to Berlin]]
|UE2 Build 2110
|-
|[[World War II Combat: Iwo Jima]]
|UE2 Build 2110
|-
|[[XIII]]
|Warfare Build 829
|}
= Milo Engine =
This is Harmonix's in-house game engine.
{| class="wikitable sortable" font-size:90%;"
!Title
|-
|[[Karaoke Revolution]]
|-
|[[Karaoke Revolution Party]]
|}
*Contains information from <sup>[https://en.wikipedia.org/wiki/List_of_CryEngine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/List_of_Unreal_Engine_games here]</sup>, <sup>[https://en.wikipedia.org/wiki/Id_Tech_3 here]</sup>, and <sup>[https://en.wikipedia.org/wiki/List_of_RenderWare_games here]</sup>.
License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License
54d8b1db69bb7cc208a6f0a8195a0199637133e3
Xbox Game Disc
0
3700
7326
7032
2023-07-04T13:26:41Z
Edness
2544
/* Security Sectors (SS.bin) */
wikitext
text/x-wiki
Xbox games are shipped on DVDs. They are commonly referred to as Xbox Game Discs (XGD).
== Visible information on ring ==
'''The DVD inner ring usually contains:'''
(The examples are from a German [[FIFA Soccer 2003]] disc)
An outer portion with labels:
* Outer ring Layer 1
** Code 39 Barcode of the the Mastering Code (*EA02302E L1*)
** Text for Mastering code ("EA02302E L1 02 0MM", where "02" is a smaller font and slightly higher than the previous baseline, followed by "0MM" on the original baseline)
** Mastering SID Code ("IFPI L126")
* Inner ring for Layer 0
** Code 39 Barcode of the the Mastering Code (*EA02302E L0*)
** Text for Mastering code ("EA02302E L0 06", where "06" is a smaller font and slightly higher than the previous baseline)
** Mastering SID Code ("IFPI L126")
An inner porition with Xbox logo:
* 3 times "XBOX" text with "X Logo" in the background on each side
* 1 time "XBOX" text with blank background
* 3 times "XBOX" text with "X Logo" in the background on each side
* Another tiny pattern segmented into 7 portions in alternating position,(opposite of the "XBOX" text without logo)
** 4 times a Xbox logo
** 2 times the word "genuine"
** and in the middle the word ASPnnnn where n is a number{{citation needed}}
''' ASP code '''
[[File:Asp demodisk.jpg|thumb|right|Detail of the DVD hologram, reflecting the ASP5080 by the flash of the camera. found on a demodisk (IM00113E-IM)]]
The following table lists known ASPnnnn numbers found on Xbox dvd disks, they are also on 360 disks but we dont list those in this wiki.
The games listed are examples, its known for sure more disks can have these numbers and further research can be done, to determine the meaning.
It is rumoured it might be a version string of some sorts slowly raising in xbox years old. {{citation needed}}
{| class="wikitable"
|-
! ASP number
! found on
! game serial
|-
| ASP0180
| Xbox Hardware Refresh Disc
| XB01101W
|-
| ASP0380
| Tom Clancy's Splinter Cell Exclusive Playable Demo
| US01251E
|-
| ASP0980
| Tom Clancy's Rainbow Six 3 DEMO DISC
| US03152E-US
|-
| ASP5080
| The official xbox 50 best games (Demo disk)
| IM00113E-IM
|-
| ASP5180
| Rayman 3 hoodlum havoc
|
|-
| ASP5280
| Xbox Music Mixer
| MS09005A-MS
|}
== Dumps ==
=== Files ===
===== Example timestamps =====
Timestamps for [[Petit Copter]]:
<pre>
126779196239020000ULL, // XDVDFS timestamp
126956823480700000ULL, // SS timestamp
126957328439576418ULL, // SS unk3 timestamp
126957649743869476ULL, // DMI Timestamp
126961143392830592ULL, // SS unk4 timestamp
</pre>
==== Disc Manufacturing Information (DMI.bin) ====
READ DVD STRUCTURE with format 0x04
DMI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u32? || Unknown || Always 1?
|-
|4 || u32? || Unknown || Always zero?
|-
|8 || ascii_char[8] || Mastering Code || Example: EA02302E <br> Also see [[Xbe#Title_ID]]
|-
|16 || u64 || || Some timestamp?
|-
|24 || u32? || Unknown || Always 2?
|}
==== Physical Format Information (PFI.bin) ====
READ DVD STRUCTURE with format 0x00
Read from the Lead-In.
PFI (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || <code>booktype << 4 <nowiki>|</nowiki> part_version</code> || 4 bit each
|-
|1 || u8 || <code>disc_size << 4 <nowiki>|</nowiki> maximum_rate</code> || 4 bit each
|-
|2 || u8 || <code>number_of_layers << 5 <nowiki>|</nowiki> track_path << 4 <nowiki>|</nowiki> layer_type</code> || 1 bit padding, 2 bit, 1 bit, 4 bit
|-
|3 || u8 || <code>linear_density << 4 <nowiki>|</nowiki> track_density</code> || 4 bit each
|-
|4 || u8 || || Always zero
|-
|5 || u24 || Starting Physical Sector Number of Data Area ||
|-
|8 || u8 || || Always zero
|-
|9 || u24 || End Physical Sector Number of Data Area ||
|-
|12 || u8 || || Always zero
|-
|13 || u24 || End Sector Number in Layer 0 || Always 0x2033AF for original Xbox discs
|}
From [ftp://ftp.avc-pioneer.com/Mtfuji_5/Proposal/Jan01/RDVDSTRC.pdf] (page 4)
==== Security Sectors (SS.bin) ====
Challenge entry (11 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u8 || Valid || Always 1 if the challenge is valid, else the challenge is ignored
|-
|1 || u8 || Challenge id ||
|-
|2 || u32 || Challenge value ||
|-
|6 || u8 || Response modifier || multimedia.cx says this might be a Response id. However, it's always 0 anyway?!
|-
|7 || u32 || Response value ||
|}
Security sector range (9 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|3 || u24 || Start PSN ||
|-
|6 || u24 || End PSN ||
|}
Unknown1 (44 Bytes)
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || u64 || || Yet another timestamp?! (Similar to 1183 in complete format)
|-
|8 || u32 || || Unknown (XBE Certificate timestamp for 1183, empty for 1503)
|-
|27 || u8 || || Unknown
|-
|28 || u8[16] || || Unknown
|}
Complete format (2048 Bytes):
{| class="wikitable"
! Offset !! Type !! Field !! Notes
|-
|0 || PFI || Physical Format Information || PFI for the actual data, unknown size
|-
|720 || u32 || Unknown ||
|-
|768 || u8 || Version of challenge table || Always 1
|-
|769 || u8 || Number of challenge entries || Always 23
|-
|770 || Challenge entry[] || Encrypted challenge entries ||
|-
|1055 || u64 || || Some large number timestamp?
|-
|1083 || u8[16] || || Unknown
|-
|1183 || Unknown1 || || Unknown, this structure is SHA-1 hashed, to generate a RC4 key to decrypt challenge entries
|-
|1227 || u8[20] || SHA-1 hash A || Hash until here (of the complete format)
|-
|1247 || u8[256] || Signature A || For hash in previous field
|-
|1503 || Unknown1 || || Unknown
|-
|1547 || u8[20] || SHA-1 hash B || Hash until here (of the complete format)
|-
|1567 || u8[64] || Signature B || For hash in previous field (note that this is somewhat shorter than the other signature?!)
|-
! colspan="4" | End of data readable by a stock Xbox drive (1632 Bytes)
|-
|1632 || u8 || Number of security sector ranges || Always 23
|-
|1633 || Security sector range[] || Security sector ranges || Only 16 of which are used.
|-
|1840 || Security sector range[] || Security sector ranges || Only 16 of which are used. <br> ''(Copy from Offset 1633)''
|}
All other fields are assumed to be zero!
===== Decryption of challenge entries =====
Starting at offset 1183, a 44 byte SHA-1 hash is generated.
The first 7 byte of the resulting hash are used as the key in RC4 decryption. The 253 Bytes of the challenge entries (Offset 770) will be decrypted.
There'll only be a handful of valid entries in the challenge entries.
However there'll be at least 2.
=== Dumping ===
To dump Xbox Game Discs you need one of the following drives / firmwares:
{| class="wikitable"
!Drive
!Standard
!Original Firmware download
!Name of modified Firmware for dumping
|-
|{{FIXME|reason=Which drives?}}
|
|
|
* 0800{{citation needed}}
|-
|Toshiba SD-M2012C
|IDE
|
|
* Kreon{{citation needed}}
|-
|Samsung SH-D162C
|IDE
|[https://web.archive.org/web/20091206023615/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200506021808200872_SH-D162C_TS02.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS02] <br> [https://web.archive.org/web/20090604123608/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509161625477201_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS03<sup>Korean</sup>] <br> [https://web.archive.org/web/20091105003814/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200509261128121531_SH-D162C_TS03.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS03] <br> [https://web.archive.org/web/20100217012245/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200512221448334972_SH-D162C_TS04.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ TS04<sup>Korean</sup>] <br> [https://web.archive.org/web/20110920084807/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701091709466301_SH-D162C_TS05.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ TS05]
|rowspan=2 |
* TS04 Kreon 0.5 (June 23rd 2006)
* TS04 Kreon 0.60 (July 30th 2006)
* TS04 Kreon 0.80 (September 9th 2006)
* TS04{{FIXME|reason=README claims SB00}} Kreon 0.81 (October 4th 2006)
* TS05{{FIXME|reason=README claims SB01}} Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H352C
|IDE
|[https://web.archive.org/web/20110921065924/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200505121909111802_TS-H352C_SC00.bin&path=/UploadFiles/FW/FWDOWNLOAD/KOR/ SC00<sup>Korean</sup>]
|-
|Samsung SH-D162D
|IDE
|[https://web.archive.org/web/20090601193905/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200706281644411972_SH-D162D_SB00.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB00] <br> [https://web.archive.org/web/20090916202345/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200811051941150901_SH-D162D_SB01.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01] <br> SB02{{citation needed}}[http://www.firmwarehq.com/download_995-file_SH-D162D_SB02.exe.html unknown if safe or legit] <br> [https://web.archive.org/web/20090402052613/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191825218171_SH-D162D_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20120123040117/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200909281412336931_SH-D162D_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* SB00 Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H352D
|IDE
|CH01{{FIXME|reason=http://samsungodd.com/korLib/download.asp?no=200904281542399901_TS-H352D_CH01.exe&fname=200904281542399901_TS-H352D_CH01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> CM01{{FIXME|reason=https://web.archive.org/web/20100105225621/http://samsungodd.com/korLib/download.asp?no=200904281539184301_TS-H352D_CM01.exe&fname=200904281539184301_TS-H352D_CM01.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ dead}} <br> [https://web.archive.org/web/20100105234118/http://samsungodd.com/korLib/download.asp?no=200910081442017201_TS-H352D_CM02.exe&fname=200910081442017201_TS-H352D_CM02.exe&path=/chn/UploadFiles/FW/FWDOWNLOAD/ CM02]
|-
|Samsung SH-D163A
|SATA
|[http://web.archive.org/web/20090601191704/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200701031704489471_SH-D163A_SB01.bin&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB01]
|rowspan=2 |
* Kreon 0.80 (October 17th 2006)
* SB01 Kreon 1.00 (October 9th 2007)
|-
|Toshiba TS-H353A
|SATA
|
|-
|Samsung SH-D163B
|SATA
|[https://web.archive.org/web/20090402052540/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200903191824214901_SH-D163B_SB03.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB03] <br> [https://web.archive.org/web/20091204131429/http://www.samsungodd.com:80/korlib/download.asp?no=&fname=200910081448023301_SH-D163B_SB04.exe&path=/UploadFiles/FW/FWDOWNLOAD/ENG/ SB04]
|rowspan=2 |
* Kreon 1.00 (November 18th 2007)
|-
|Toshiba TS-H353B
|SATA
|CH01{{FIXME|reason=https://web.archive.org/web/*/http://samsungodd.com/chn/globalLib/Download.asp?path=Info_FWDownload&fname=200904281544595271_TS-H353B_CH01.exe dead}}
|}
Please note that the modified firmwares are based on copyrighted material and can therefore not be legally shared here.
Patch files to patch original firmwares into dumping-firmwares would be appreciated.
Flashing software:
* [https://web.archive.org/web/20160904080433/http://www.tsstodd.com:80/TotalLib/popup/Download.asp?path=program&lang=eng&fname=TSDNMAC.ZIP TSDNMAC] for MacOS
* [http://web.archive.org/web/20070301000000/http://www.samsungodd.com/KorLib/File/sfdnwin.exe SFDNWIN] for Microsoft Windows 2000 and XP
* [https://web.archive.org/web/20100105230358/http://samsungodd.com/KorLib/File/Tsdnwin.exe TSDNWIN] for Microsoft Windows Vista and 7
* [https://web.archive.org/web/20060328075340/http://www.samsungodd.com/eng/information/Application/Files/sfdndos.exe SFDNDOS] [https://web.archive.org/web/20060328072528/http://www.samsungodd.com/eng/information/Application/Files/Sfdndosm.exe SFDNDOSM] and the newer TSDNDOS ([https://www.dell.com/support/home/de/de/debsdt1/drivers/driversdetails?driverid=r205571 included here]) for Microsoft DOS
For current dumping instructions see [http://forum.redump.org/topic/6073/xbox-1-360-dumping-instructions/ the Dumping Guide by the Redump Project].
==== USB Adapters ====
There are many USB-IDE/SATA adapters on the market. The following have been known to work well with the Kreon-compatible drives.
{|class="wikitable"
! Adapter Model / USB VID:DID
! Drive Model
! Notes
|-
| [https://www.amazon.com/Vantec-CB-ST00U3-NexStar-Optical-Storage/dp/B07452Z3KH Vantec CB-ST00U3 NexStar USB 3.0 to SATA 6Gbps Optical/Storage Adapter]
<code>152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp</code>
| TS-H353B/DEWH
<code>H/W:A Ver.B APRIL 2007</code>
| Windows 11. No extra drivers required. Drive flashed. Works with MFP 2.3.
|-
| [https://www.amazon.de/gp/product/B016UBXH3O UGREEN USB 3.0 to SATA Adapter]
<code>174c:55aa ASMedia Technology Inc.</code>
| SH-D163B/BEBE
<code>H/W:A Ver.B SEPTEMBER 2008</code>
| Windows 10. No extra drivers required. Drive flashed. Works with DiscImageCreator. '''These adapters did NOT work with two separate TS-H353B drives on Windows (No media detected, extremely slow to respond).'''
|-
| [https://www.amazon.com/Sabrent-5-25-INCH-Converter-Activity-USB-DSC9/dp/B00DQJME7Y Sabrent USB-DSC9]
<code>1f75:0611 Innostor Technology Corporation</code>
| SH-D162D/BEWE
<code>H/W:A Ver.D JULY 2007</code>
| Ubuntu 18.04 host with VirtualBox WinXP VM. USB pass-thru of adapter. No extra drivers required. Drive flashed. Works with Xbox Backup Creator.
|}
=== Xbox related commands ===
==== Enable Unlock 1 (xtreme) state ====
Supported by: Kreon 1.00
<pre>FF 08 01 01</pre>
Enable Unlock 1 (xtreme) state' as we already know it from the 360 xtreme modded drives.
This command is supported for legacy reasons only. Custom applications should use the new 'Set Lock State' instead.
==== Set Lock State ====
Supported by: Kreon 1.00
<pre>FF 08 01 11 xx</pre>
* <code>xx=00</code> - Drive locked (no unlock state)
* <code>xx=01</code> - Unlock State 1 (xtreme) enabled
* <code>xx=02</code> - Unlock state 2 (wxripper) enabled
==== SS extract command ====
Supported by: Kreon 1.00
<pre>AD 00 FF 02 FD FF FE 00 08 00 xx C0</pre>
This is the well known from the xtreme firmware.
==== Get Feature List ====
Supported by: Kreon 1.00
<pre>FF 08 01 10</pre>
This command will return a list of the additional features supported by the drive.
All values returned are 16 bit values, and the list is terminated with null (<code>0x0000</code>).
The two first words of the returned list always reads as <code>0xA55A 0X5AA5</code> in order to guarantee that a reply from a drive not supporting this command correctly isn't mistaken for a feature list.
An example feature list could be: <code>0xA55A, 0x5AA5, 0x0100, 0xF000, 0xF001, 0x0000</code>
This list would indicate that the drive supports XBOX360 Unlock 1, Lock and Error Skip, as it can be seen from the values defined below:
XBOX 360 related features:
* <code>0x0100</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0101</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0120</code> : The drive can read and decrypt the SS
* <code>0x0121</code> : The drive has full challenge response functionality
XBOX related features:
* <code>0x0200</code> : The drive supports the unlock 1 state (xtreme)
* <code>0x0201</code> : The drive supports the unlock 2 state (wxripper)
* <code>0x0220</code> : The drive can read and decrypt the SS
* <code>0x0221</code> : The drive has full challenge response functionality
General drive features:
* <code>0xF000</code> : The drive supports the lock (cancel any unlock state) command
* <code>0xF001</code> : The drive supports error skipping
This is the complete list of defined features at the moment. If you're working on a custom application you might want to contact me in order to get the latest list.
== References and links ==
* [https://web.archive.org/web/20150616131202/http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf http://dark.ellende.eu/public/360DVDfirmwareRelatedInfo.pdf]
* [https://multimedia.cx/eggs/xbox-sphinx-protocol/ Overview of the challenge/response security protocol]
* [http://redump.org/discs/system/xbox/ Xbox Game Discs preserved by the Redump Project]
* [http://wiki.redump.org/index.php?title=Discs_not_yet_dumped#Microsoft_Xbox Missing Xbox Game Disc dumps at Redump Project]
9ef1ed4d9813445d8a77383f864463e99914a6e4
Xbe
0
3706
7327
7292
2023-07-04T14:02:35Z
Edness
2544
/* Title ID */ add missing publishers that are listed on redump
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. UNIX timestamp format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0xE682F45B, Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from (UNIX timestamp format).
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0x46437DCD, Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== LibraryVersion Table ==
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0008
| Library Name
| 8-byte ASCII-name of this library. (i.e. "XAPILIB")
|-
! 0x0008
! 0x0002
| Major Version
| Major version for this library (2-byte WORD).
|-
! 0x000A
! 0x0002
| Minor Version
| Minor version for this library (2-byte WORD).
|-
! 0x000C
! 0x0002
| Build Version
| Build version for this library (2-byte WORD).
|-
! 0x000E
! 0x0002
| Library Flags
| Various flags for this library. The fields are:
QFEVersion = 0x1FFF (13-Bit Mask)
Approved = 0x6000 (02-Bit Mask)
Debug Build = 0x8000 (01-Bit Mask)
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AP || Aquaplus
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CT || CTO S.p.A.
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KK || KiKi
|-
| KN || Konami
|-
| KO || KOEI
|-
| KT || Konami Tokyo
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XD || ''Xbox demo disk? (Japan?)''
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| XX || Microsoft Windows Media Center Extender for Xbox
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: 45410017 [EA-023]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format =
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
= Resources and links =
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
e18a4af6e0d896a57b4ef3e05ef1b2228d85cd56
7334
7327
2023-09-24T11:18:39Z
QuantX
2552
Specify hashing algorithm used to check each section
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. UNIX timestamp format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0xE682F45B, Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from (UNIX timestamp format).
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0x46437DCD, Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== LibraryVersion Table ==
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0008
| Library Name
| 8-byte ASCII-name of this library. (i.e. "XAPILIB")
|-
! 0x0008
! 0x0002
| Major Version
| Major version for this library (2-byte WORD).
|-
! 0x000A
! 0x0002
| Minor Version
| Minor version for this library (2-byte WORD).
|-
! 0x000C
! 0x0002
| Build Version
| Build version for this library (2-byte WORD).
|-
! 0x000E
! 0x0002
| Library Flags
| Various flags for this library. The fields are:
QFEVersion = 0x1FFF (13-Bit Mask)
Approved = 0x6000 (02-Bit Mask)
Debug Build = 0x8000 (01-Bit Mask)
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AP || Aquaplus
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CT || CTO S.p.A.
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KK || KiKi
|-
| KN || Konami
|-
| KO || KOEI
|-
| KT || Konami Tokyo
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XD || ''Xbox demo disk? (Japan?)''
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| XX || Microsoft Windows Media Center Extender for Xbox
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: 45410017 [EA-023]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a 20 byte SHA-1 hash of the section that is checked by the Xbox to ensure the integrity of the sections.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format =
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
= Resources and links =
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
c6189ce551d1b7f5389f1db236d0707b041539e1
7335
7334
2023-09-26T07:32:42Z
QuantX
2552
wikitext
text/x-wiki
{{DISPLAYTITLE:XBE}}
XBE files (XBox Executable) are the main files that are executed in the Xbox System. In official games, these files are created by game developers, and then signed by Microsoft.
The file structure is adapted from Windows PE files. It is very similar, however it has important changes for the Xbox. The file is composed of an image header, a certificate, a collection of section headers, a collection of library versions, thread local storage data, a Microsoft bitmap, and the sections that contain the code and resources.
= Image Header =
The image header contains the information that describes where the other parts of the executable are located within the file, and how the executable should be treated and loaded. It has the following layout (all fields are little-endian):
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Magic Number
| This field must always equal 0x48454258 ("XBEH")
|-
! 0x0004
! 0x0100
| Digital Signature
| 256 Bytes. This is where a game is signed. Only on officially signed games is this field worthwhile.
|-
! 0x0104
! 0x0004
| Base Address
| Address at which to load this .XBE. Typically this will be 0x00010000.
|-
! 0x0108
! 0x0004
| Size of Headers
| Number of bytes that should be reserved for headers.
|-
! 0x010C
! 0x0004
| Size of Image
| Number of bytes that should be reserved for this image.
|-
! 0x0110
! 0x0004
| Size of Image Header
| Number of bytes that should be reserved for the image header. The header size varies by XDK version, but is at least 0x178.
|-
! 0x0114
! 0x0004
| TimeDate
| Time and Date when this image was created. UNIX timestamp format.
|-
! 0x0118
! 0x0004
| Certificate Address
| Address to a [[#Certificate|Certificate]] structure, after the .XBE is loaded into memory.
|-
! 0x011C
! 0x0004
| Number of Sections
| Number of sections contained in this .XBE.
|-
! 0x0120
! 0x0004
| Section Headers Address
| Address to an array of SectionHeader structures, after the .XBE is loaded into memory.
|-
! 0x0124
! 0x0004
| Initialization Flags
| Various flags for this .XBE file. Known flags are:
MountUtilityDrive = 0x00000001
FormatUtilityDrive = 0x00000002
Limit64Megabytes = 0x00000004
DontSetupHarddisk = 0x00000008
|-
! 0x0128
! 0x0004
| Entry Point
| Address to the Image entry point, after the .XBE is loaded into memory. This is where execution starts.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0xE682F45B, Debug = 0x94859D4B, Retail = 0xA8FC57AB
To encode an entry point, you simply XOR the real entry point with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode an entry point, you XOR with the debug key, then check if it is a valid entry point. If it is not, then you try again with the retail key.
<span style="color:red">Note: The Kernel Image Thunk Address member of this header must also be encoded as described later in this document.</span>
|-
! 0x012C
! 0x0004
| TLS Address
| Address to a [[#TLS Table|TLS]] (Thread Local Storage) structure.
|-
! 0x0130
! 0x0004
| Stack Size
| Default stack size. As the Xbox does not allow for stacks to grow, this needs to be copied from the SizeOfStackReserve PE field, not SizeOfStackCommit!
|-
! 0x0134
! 0x0004
| PE Heap Reserve
| Copied from the PE file this .XBE was created from.
|-
! 0x0138
! 0x0004
| PE Heap Commit
| Copied from the PE file this .XBE was created from.
|-
! 0x013C
! 0x0004
| PE Base Address
| Copied from the PE file this .XBE was created from.
|-
! 0x0140
! 0x0004
| PE Size of Image
| Copied from the PE file this .XBE was created from.
|-
! 0x0144
! 0x0004
| PE Checksum
| Copied from the PE file this .XBE was created from.
|-
! 0x0148
! 0x0004
| PE TimeDate
| Copied from the PE file this .XBE was created from (UNIX timestamp format).
|-
! 0x014C
! 0x0004
| Debug PathName Address
| Address to the debug pathname (i.e. "D:\Nightlybuilds\011026.0\code\build\xbox\Release\simpsons.exe").
|-
! 0x0150
! 0x0004
| Debug FileName Address
| Address to the debug filename (i.e. "simpsons.exe")
|-
! 0x0154
! 0x0004
| Address to the UTF-16 debug filename (i.e. L"simpsons.exe")
| UTF-16 Debug FileName Address
|-
! 0x0158
! 0x0004
| Kernel Image Thunk Address
| Address to the Kernel Image Thunk Table, after the .XBE is loaded into memory. This is how .XBE files import kernel functions and data.
This value is encoded with an XOR key. Considering this is far too weak to be considered security, I assume this XOR is a clever method for discerning between Debug/Retail .XBE files without adding another field to the .XBE header. The XOR key is dependant on the build:
Beta = 0x46437DCD, Debug = 0xEFB1F152, Retail = 0x5B6D40B6
To encode a kernel thunk address, you simply XOR the real address with either Debug or Retail key, depending on if you want the XBox to see this as a Debug or Retail executable.
To decode a kernel thunk address, you XOR with the debug key, then check if it is a valid address. If it is not, then you try again with the retail key.
The Kernel Thunk Table itself is simply an array of pointers to Kernel imports. There are 366 possible imports, and the table is terminated with a zero dword (0x00000000). Typically the values in this table can be generated with the following formula:
KernelThunkTable[v] = ImportThunk + 0x80000000;
so, for example, the import PsCreateSystemThreadEx, which has a thunk value of 255 (0xFF) would be...
KernelThunkTable[v] = 0xFF + 0x80000000; // (0x800000FF)
When the .XBE is loaded by the OS (or the CXBX Emulator), all kernel imports are replaced by a valid function or data type address. In the case of CXBX, the import table entry at which (KernelThunkTable[v] & 0x1FF == 0xFF) will be replaced by &cxbx_PsCreateSystemThreadEx (which is a wrapper function).
<span style="color:red">Note: The Entry Point member of this header must also be encoded as described earlier in this document.</span>
|-
! 0x015C
! 0x0004
| Non-Kernel Import Directory Address
| Address to the Non-Kernel Import Directory. It is typically safe to set this to zero.
|-
! 0x0160
! 0x0004
| Number of Library Versions
| Number of Library Versions pointed to by Library Versions Address.
|-
! 0x0164
! 0x0004
| Library Versions Address
| Address to an array of LibraryVersion structures, after the .XBE is loaded into memory.
|-
! 0x0168
! 0x0004
| Kernel Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x016C
! 0x0004
| XAPI Library Version Address
| Address to a LibraryVersion structure, after the .XBE is loaded into memory.
|-
! 0x0170
! 0x0004
| Logo Bitmap Address
| Address to the Logo Bitmap (Typically a "Microsoft" logo). The format of this image is described here. This field can be set to zero, meaning there is no bitmap present.
|-
! 0x0174
! 0x0004
| Logo Bitmap Size
| Size (in bytes) of the Logo Bitmap data. The format of this image is described here.
|-
! 0x0178
! 0x0008
| Unknown1
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5028.
|-
! 0x0180
! 0x0004
| Unknown2
| The meaning of this field hasn't been figured out yet. It only exists on XBEs built with an XDK version >= 5455.
|}
== LibraryVersion Table ==
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0008
| Library Name
| 8-byte ASCII-name of this library. (i.e. "XAPILIB")
|-
! 0x0008
! 0x0002
| Major Version
| Major version for this library (2-byte WORD).
|-
! 0x000A
! 0x0002
| Minor Version
| Minor version for this library (2-byte WORD).
|-
! 0x000C
! 0x0002
| Build Version
| Build version for this library (2-byte WORD).
|-
! 0x000E
! 0x0002
| Library Flags
| Various flags for this library. The fields are:
QFEVersion = 0x1FFF (13-Bit Mask)
Approved = 0x6000 (02-Bit Mask)
Debug Build = 0x8000 (01-Bit Mask)
|}
== TLS Table ==
The TLS Table contains all the information needed by the XBE to properly set up thread-local storage. It is structurally identical to the TLS Directory found in PE32 files<ref>https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-tls-section</ref>, and can be directly copied from there. If the XBE does not use any thread-local storage, this table may be omitted, and the respective field in the image header set to zero.
{| class="wikitable
|-
! Offset
! Size
! Name
! Description
|-
! 0x0000
! 0x0004
| Raw Data Start
| Absolute (i.e. not an RVA) address of start of the TLS variable data in the program image.
|-
! 0x0004
! 0x0004
| Raw Data End
| Absolute (i.e. not an RVA) address of end of the TLS variable data in the program image.
|-
! 0x0008
! 0x0004
| Address of Index
| Absolute (i.e. not an RVA) address of the TLS Index variable.
|-
! 0x000C
! 0x0004
| Address of Callbacks
| Absolute (i.e. not an RVA) address of the null-terminated TLS callback functions table.
|-
! 0x0010
! 0x0004
| Size of Zero Fill
| The number of bytes following the raw data that should be set to zero in memory.
|-
! 0x0014
! 0x0004
| Characteristics
| Describes alignment.
|}
= Certificate =
Each Xbox executable has a certificate that contains information about the title.
* Time and date when the certificate was created
* Title ID
* Title name
* Alternative title IDs
* Allowed types of media that the executable can be run from (HD, DVD, CD, etc.)
* Game region
* Game ratings
* Disk number
* Version
* LAN key raw data used for [[System Link]]
* Signature key raw data (used to sign [[Xbox Savegame System|savegames]])
* Alternate signature keys
* Original size of the certificate
* Online service name (not present in early executables)
* Run time security flags (not present in early executables)
=== Title ID ===
A title ID is usually 2 ASCII letters for the publisher, followed by a u16 integer game number (Above 2000 for non-original Xbox games)
{| class=wikitable
! Publisher ID !! Name
|-
| AC || Acclaim Entertainment
|-
| AH || ARUSH Entertainment
|-
| AP || Aquaplus
|-
| AQ || Aqua System
|-
| AS || ASK
|-
| AT || Atlus
|-
| AV || Activision
|-
| AY || Aspyr Media
|-
| BA || Bandai
|-
| BL || Black Box
|-
| BM || BAM! Entertainment
|-
| BR || Broccoli Co.
|-
| BS || Bethesda Softworks
|-
| BU || Bunkasha Co.
|-
| BV || Buena Vista Games
|-
| BW || BBC Multimedia
|-
| BZ || Blizzard
|-
| CC || Capcom
|-
| CK || Kemco Corporation {{citation needed|reason=Did they realy swapped the ASCII letters? is KC a curced acroniem in Japan? Just want to be sure its Kemco|date=May 2017}}
|-
| CM || Codemasters
|-
| CT || CTO S.p.A.
|-
| CV || Crave Entertainment
|-
| DC || DreamCatcher Interactive
|-
| DX || Davilex
|-
| EA || Electronic Arts (EA)
|-
| EC || Encore inc
|-
| EL || Enlight Software
|-
| EM || Empire Interactive
|-
| ES || Eidos Interactive
|-
| FI || Fox Interactive
|-
| FS || From Software
|-
| GE || Genki Co.
|-
| GV || Groove Games
|-
| HE || Tru Blu (Entertainment division of Home Entertainment Suppliers)
|-
| HP || Hip games
|-
| HU || Hudson Soft
|-
| HW || Highwaystar
|-
| IA || Mad Catz Interactive
|-
| IF || Idea Factory
|-
| IG || Infogrames
|-
| IL || [[Interlex Corporation]]
|-
| IM || Imagine Media
|-
| IO || Ignition Entertainment
|-
| IP || Interplay Entertainment
|-
| IX || InXile Entertainment {{citation needed}}
|-
| JA || Jaleco
|-
| JW || JoWooD
|-
| KB || Kemco {{citation needed|reason=CK is also Kemco, is this a diferent subsidairy or country based? Just want to be sure its Kemco|date=May 2017}}
|-
| KI || Kids Station Inc. {{citation needed|reason=Games info page was in japanese, I dont read japanese. but this seemed very logicaly the publisher, can a japanese reader confirm?|date=May 2017}}
|-
| KK || KiKi
|-
| KN || Konami
|-
| KO || KOEI
|-
| KT || Konami Tokyo
|-
| KU || Kobi and/or GAE (formerly Global A Entertainment){{citation needed|reason=What name did the publisher use at the time of release?|date=May 2017}}
|-
| LA || LucasArts
|-
| LS || Black Bean Games (publishing arm of Leader S.p.A.)
|-
| MD || Metro3D
|-
| ME || Medix
|-
| MI || Microïds
|-
| MJ || Majesco Entertainment
|-
| MM || Myelin Media
|-
| MP || MediaQuest {{citation needed|reason=Where is the P? I dont trust my source yet... but seems close|date=May 2017}}
|-
| MS || Microsoft Game Studios
|-
| MW || Midway Games
|-
| MX || Empire Interactive {{citation needed|reason=What happend to the publisher, who published this game?|date=May 2017}}
|-
| NK || NewKidCo
|-
| NL || NovaLogic
|-
| NM || Namco
|-
| OX || Oxygen Interactive
|-
| PC || Playlogic Entertainment
|-
| PL || Phantagram Co., Ltd.
|-
| RA || Rage
|-
| SA || Sammy
|-
| SC || SCi Games
|-
| SE || SEGA
|-
| SN || SNK
|-
| SS || Simon & Schuster
|-
| SU || Success Corporation
|-
| SW || Swing! Deutschland
|-
| TA || Takara
|-
| TC || Tecmo
|-
| TD || The 3DO Company (or just 3DO)
|-
| TK || Takuyo
|-
| TM || TDK Mediactive
|-
| TQ || THQ
|-
| TS || Titus Interactive
|-
| TT || Take-Two Interactive Software
|-
| US || Ubisoft
|-
| VC || Victor Interactive Software
|-
| VN || Vivendi Universal (just took Interplays publishing rights) {{citation needed}}
|-
| VU || Vivendi Universal Games
|-
| VV || Vivendi Universal Games {{citation needed}}
|-
| WE || Wanadoo Edition
|-
| WR || Warner Bros. Interactive Entertainment {{citation needed}}
|-
| XD || ''Xbox demo disk? (Japan?)''
|-
| XI || XPEC Entertainment and Idea Factory
|-
| XK || ''Xbox kiosk disk?'' {{citation needed}}
|-
| XL || ''Xbox special bundled or live demo disk?'' {{citation needed}}
|-
| XM || Evolved Games {{citation needed|reason=Probably not, game "Malice"|date=May 2017}}
|-
| XP || XPEC Entertainment
|-
| XR || Panorama
|-
| XX || Microsoft Windows Media Center Extender for Xbox
|-
| YB || YBM Sisa (South-Korea)
|-
| ZD || Zushi Games (formerly Zoo Digital Publishing)
|}
The title ID seems to double the information from the [[Xbox Game Disc]] mastering code etched into the ring or readable from the DMI.
The game number is expressed in 3 decimal digits here which suggests that it will always be below 1000.
'''Examples''':
[[FIFA Soccer 2003]]:
* DMI and mastering code: EA02302E (Meaning: publisher EA, game number 023, version 02, region Europe)
* Title ID: 45410017 [EA-023]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00402A (Meaning: publisher Microsoft, game number 004, version 02, region America)
* Title ID: 4D530004 [MS-004]
[[Halo: Combat Evolved]]:
* DMI and mastering code: MS00404E (Meaning: publisher Microsoft, game number 004, version 04, region Europe)
* Title ID: 4D530004 [MS-004]
== Allowed media types ==
Allowed media types off which the executable is allowed to be run from. The following values are known:
{| class=wikitable
! Media type !! Value
|-
|HARD_DISK || 0x00000001
|-
|DVD_X2 || 0x00000002
|-
|DVD_CD || 0x00000004
|-
|CD || 0x00000008
|-
|DVD_5_RO || 0x00000010
|-
|DVD_9_RO || 0x00000020
|-
|DVD_5_RW || 0x00000040
|-
|DVD_9_RW || 0x00000080
|-
|DONGLE || 0x00000100
|-
|MEDIA_BOARD || 0x00000200
|-
|NONSECURE_HARD_DISK || 0x40000000
|-
|NONSECURE_MODE || 0x80000000
|-
|MEDIA_MASK || 0x00FFFFFF
|}
= Sections =
The sections are described by the section headers. The section headers start right after the certificate and contain describe where in the file the actual sections reside. Each header contains a 20 byte SHA-1 hash of the section that is checked by the Xbox to ensure the integrity of the sections.
The SHA-1 hash is computed by prepending the length of the section (excluding any padding) as an unsigned 32-bit integer followed by the contents of the section itself.
At least two sections are always present in an Xbox executable: .text and .rdata. There might be more sections that contain either executable code or resources such as images, text, etc.
== .text ==
The .text section contains all x86 subroutines to be executed by the [[CPU|processor]].
== .rdata ==
The .rdata section contains the [[Kernel|kernel thunk table]]. The ordinals in the table are to be resolved to the kernel's actual calling routine, when loaded.
= Xbox Alpha executable format =
Binaries from early Xbox development (Alpha units), are using a different binary format. There are no known public tools that can read them.
Known differences include that the first bytes of the file are 'XE' instead the 'XBEH' from the final XBE format. The format is rumored to be more like the Windows PE format.{{citation needed}}
= Resources and links =
* [http://www.caustik.com/cxbx/download/xbe.htm .XBE File Format 1.1]
[[Category:Fileformats]]
1912983c6abb75c5c213fd341e5381488eb7ff5a
Hardware Revisions
0
3669
7329
6963
2023-08-19T19:52:10Z
Doom
2542
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0 (DVT6)
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]]
** GPU has a fan on the heat sink
** Samsung M-die RAM chips
* Xbox 1.1 (QT)
** USB controller moved onto the motherboard
** Fan removed from the GPU heat sink
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout, Motherboard revision codenamed "XBLADE"
** Switched to ATX Power connector
** Samsung D-die RAM chips
* Xbox 1.3
** Removed LFrame trace from MCPX BGA pad to via, disconnecting signal from LPC Port
* Xbox 1.4
** Switched to the "Focus" Video Encoder
** Samsung F-die RAM Chips
** Straps underneath MCPX updated to indicate new encoder & RAM types to xcodes
* Xbox 1.6 (Tuscany)
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Allegedly, revision 1.5 had "3.3v and GND removed from LPC". But there has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards. This rumor likely originated from an incorrect measurement, or a damaged board.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original Xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
A news article officially announcing Thomson to be producing the DVD drive for the original Xbox back in 20 Juli of 2000[https://web.archive.org/web/20000829085016/http://www.codejunkies.com:80/archive/thomson_supplier_for_xbox.htm]
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILIPS VAD6035/21 ====
Also named: VAD6011/21 appears to have no brand or part number on its large main controller, might be Cirrus Logic based on its size and use of a Philips secondary smaller MCU. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC DVD-ROM drive Pioneer 500M with the Philips firmware to be an Xbox DVD-ROM drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
1c1a5342d50588adc3978c14db20ff014649aa72
7330
7329
2023-08-19T19:59:14Z
Doom
2542
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0 (DVT6)
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]] as a 'bodge' for a bug in MCPX B2 silicon
** GPU has a fan on the heat sink
** Samsung M-die RAM chips
* Xbox 1.1 (QT)
** MCPX 1.1 (D1) with revised secret rom, also fixes bug which required the USB daughterboard
** Fan removed from the GPU heat sink
** Removed PLL conditioner for GPU/CPU base clock
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout, Motherboard revision codenamed "XBLADE"
** Switched to ATX Power connector
** Samsung D-die RAM chips
* Xbox 1.3
** Removed LFrame trace from MCPX BGA pad to via, disconnecting signal from LPC Port
* Xbox 1.4
** Switched to the "Focus" Video Encoder
** Samsung F-die RAM Chips
** Straps underneath MCPX updated to indicate new encoder & RAM types to xcodes
* Xbox 1.6 (Tuscany)
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Allegedly, revision 1.5 had "3.3v and GND removed from LPC". But there has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards. This rumor likely originated from an incorrect measurement, or a damaged board.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original Xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
A news article officially announcing Thomson to be producing the DVD drive for the original Xbox back in 20 Juli of 2000[https://web.archive.org/web/20000829085016/http://www.codejunkies.com:80/archive/thomson_supplier_for_xbox.htm]
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILIPS VAD6035/21 ====
Also named: VAD6011/21 appears to have no brand or part number on its large main controller, might be Cirrus Logic based on its size and use of a Philips secondary smaller MCU. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC DVD-ROM drive Pioneer 500M with the Philips firmware to be an Xbox DVD-ROM drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
574c25e284fe6c1b47cc764228b4e067536483d5
7331
7330
2023-08-19T19:59:41Z
Doom
2542
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0 (DVT6)
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]] as a 'bodge' for a bug in MCPX B2 silicon
** GPU has a fan on the heat sink
** Samsung M-die RAM chips
* Xbox 1.1 (QT)
** MCPX D1 with revised secret rom, also fixes bug which required the USB daughterboard
** Fan removed from the GPU heat sink
** Removed PLL conditioner for GPU/CPU base clock
* Xbox 1.2
** TSOP Size now 256k (Initial Size 1024k)
** Updated Board Layout, Motherboard revision codenamed "XBLADE"
** Switched to ATX Power connector
** Samsung D-die RAM chips
* Xbox 1.3
** Removed LFrame trace from MCPX BGA pad to via, disconnecting signal from LPC Port
* Xbox 1.4
** Switched to the "Focus" Video Encoder
** Samsung F-die RAM Chips
** Straps underneath MCPX updated to indicate new encoder & RAM types to xcodes
* Xbox 1.6 (Tuscany)
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Allegedly, revision 1.5 had "3.3v and GND removed from LPC". But there has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards. This rumor likely originated from an incorrect measurement, or a damaged board.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original Xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
A news article officially announcing Thomson to be producing the DVD drive for the original Xbox back in 20 Juli of 2000[https://web.archive.org/web/20000829085016/http://www.codejunkies.com:80/archive/thomson_supplier_for_xbox.htm]
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILIPS VAD6035/21 ====
Also named: VAD6011/21 appears to have no brand or part number on its large main controller, might be Cirrus Logic based on its size and use of a Philips secondary smaller MCU. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC DVD-ROM drive Pioneer 500M with the Philips firmware to be an Xbox DVD-ROM drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
5ed478c1df070527e4a6064b34983daf2c27bd22
7332
7331
2023-08-19T20:04:17Z
Doom
2542
wikitext
text/x-wiki
There were several different retail Xbox hardware revisions, which include the following:
* Xbox 1.0 (DVT6)
** USB controller is on a separate [[Motherboard#USB_Daughterboard|PCB]] as a 'bodge' for a bug in MCPX B2 silicon
** GPU has a fan on the heat sink
** Samsung M-die RAM chips
* Xbox 1.1 (QT)
** MCPX D1 with revised secret rom, also fixes bug which required the USB daughterboard
** Fan removed from the GPU heat sink
** Removed PLL conditioner for GPU/CPU base clock
* Xbox 1.2
** Updated Board Layout, Motherboard revision codenamed "XBLADE" (1.2 -> 1.4)
** TSOP Size now 256k (Initial Size 1024k)
** Switched to ATX Power connector
** Samsung D-die RAM chips
* Xbox 1.3
** Removed LFrame trace from MCPX BGA pad to via, disconnecting signal from LPC Port
* Xbox 1.4
** Switched to the "Focus" Video Encoder
** Samsung F-die RAM Chips
** Straps underneath MCPX updated to indicate new encoder & RAM types to xcodes
* Xbox 1.6 (Tuscany)
** New Board Layout with additional RAM Pads removed
** Removed data and power lines from LPC port
** Xyclops chip (includes ROM instead of flash = BIOS no longer flashable)
** Switched to the "XCalibur" Video Encoder
** Microsoft later switched to lower quality Hynix RAM. These Xboxes with non-Samsung RAM are sometimes referred to as 1.6b by the modding community.
You can find more information about the hardware used in each revision below.
== History of Xbox 1.5 ==
Allegedly, revision 1.5 had "3.3v and GND removed from LPC". But there has been no conclusive evidence pointing to their existence, and all 1.5 sightings to date have turned out to be 1.4 boards. This rumor likely originated from an incorrect measurement, or a damaged board.
== Identifying ==
While not definitive, here are some ways to help identify the revision of your Xbox.
=== Manufacturing Details ===
{| class="wikitable"
! scope="col" | Date Range
! scope="col" | Revision
! scope="col" | Location
|-
| 01/2001–07/2002 || 1.0 || Hungary, Mexico
|-
| 08/2002-01/2003 || 1.1 || China, Mexico
|-
| 01/2003-03/2003 || 1.2 || China
|-
| 04/2003-07/2003 || 1.3 || China
|-
| 09/2003-03/2004 || 1.4,1.5 || China
|-
| 04/2004-09/2004 || 1.6 || China, Taiwan
|-
| 09/2004-08/2005 || 1.6b || China, Taiwan
|}
=== Serial Number ===
The serial number looks like this:
LNNNNNN YWWFF
* L is the production line
* NNNNNN is the number produced that week
* Y is the last digit of the production year
* WW is the number of the week
* FF is the factory code
Note, this table contradicts the previous table.
{| class="wikitable"
! scope="col" | Factory
! scope="col" | Location
! scope="col" | Revision
|-
| 02 || Mexico || 1.0 or 1.1
|-
| 03 || Hungary || 1.0
|-
| 05 || China || 1.1 or later
|-
| 06 || Taiwan || 1.2 or later
|}
{| class="wikitable"
! scope="col" | Serial Number
! scope="col" | Revision
|-
| LNNNNNN 20WFF || 1.0
|-
| LNNNNNN 21WFF || 1.0
|-
| LNNNNNN 23WFF || 1.0 or 1.1
|-
| LNNNNNN 24WFF || 1.1
|-
| LNNNNNN 25WFF || 1.1
|-
| LNNNNNN 30WFF || 1.2
|-
| LNNNNNN 31WFF || 1.3
|-
| LNNNNNN 32WFF || 1.3
|-
| LNNNNNN 33WFF || 1.4 or 1.5
|-
| LNNNNNN 42WFF || 1.6
|-
| LNNNNNN 43WFF || 1.6b
|}
=== DVD Drive ===
There are four retail drives known to be used by Microsoft in the retail version of the console.
Any Xbox DVD drive can be used in any retail Xbox.
List of Xbox DVD Drive manufacturers
* Thomson (Xbox 1.0, 1.1)
* Philips (Xbox 1.1 and above)
* Samsung (Any)
* Hitachi-LG (8050L)(mainly 1.6?)
[[File:Xbox_drivedetermination.png|Xbox DVD Drive determination]]
==== THOMSON TGM600 ====
The first manufacture is sadly also the worst of all Dvdrom drives manufactured for the original Xbox.
It has a Cirrus Logic CL-CR3710-60EC-F as its main controller and a 8/3062 HD 64F3062F25 16bit H8/300H secondary samller MPU,at 25Mhz
Unkown sofar if there is external flash or if its inside the Cirrus Logic IC.
A news article officially announcing Thomson to be producing the DVD drive for the original Xbox back in 20 Juli of 2000[https://web.archive.org/web/20000829085016/http://www.codejunkies.com:80/archive/thomson_supplier_for_xbox.htm]
==== SAMSUNG SDG605 ====
The Samsung drive is a very popular DVDrom drive for its compatibility for most media types and better quality laser. There are 2 mayor revisions found for this manufacturer
* X00603-005 Plays CDR
* X00603-006 Wont play CDR
The DVDrom drive is using the MT1358E (MT1359E is the 360 Sata version) from Mediatek, and has a 39SF020A flashrom.
If the firmware from this drive is applied to a SAMSUNG 616T or 616F PC dvd drive it will behave as a Xbox one, modified hardware will allow for tray state and eject to work.
Commodore4Eva released a hacked firmware for this drive which enables modified backups to work. There is also a "0800" firmware for this drive which allows to dump the entire SS. The firmwares are not linked here for legal reasons.
[https://web.archive.org/web/20060707104502/http://www.samsungodd.com:80/UploadFiles/FW/FWDOWNLOAD/ENG/200212101112342331_SD-616F_F105.ZIP Original firmware for the similar PC drive SD-616F (F105)].
==== PHILIPS VAD6035/21 ====
Also named: VAD6011/21 appears to have no brand or part number on its large main controller, might be Cirrus Logic based on its size and use of a Philips secondary smaller MCU. flash might be a 39SF020A from SST. The laser ribbon cable connector is different for its various revisions, a detail one must take into account when swapping controller boards.
There should be a tutorial on how to convert a PC DVD-ROM drive Pioneer 500M with the Philips firmware to be an Xbox DVD-ROM drive.
==== HITACHI-LG GDR-8050L ====
This DVD-rom drive, most commonly found in Xbox 1.6 and 1.6b is capable of reading DVD-+R, DVD-RW and CDRW media, but fails to boot most CD-R discs source: [http://www.xbox-hq.com/html/article1535.html xbox-hq.com Hitachi-LG GDR-8050L DVD Drive In Xbox].
The latest manufacture for the DVDrom drive probably used a Panasonic MN103S89FDA for its main controler, appears to have no external flashrom.
with this firmware and modified hardware for Eject and traystate, a LG GDR-8163B or LG DRD-8160B might act as a drop in replacement after altering either case.
On 30 January 2006 TheSpecialist posted at xboxhacker.net that he successfully flashed a Hitachi drive to boot a copied game on an unmodded xbox: [https://web.archive.org/web/20080316154615/http://www.xboxhacker.net/index.php?option=com_smf&Itemid=33&topic=285.0 breakthrough: XBOX 1 firmware hacked !]
There is also [https://gist.github.com/JayFoxRox/2d51a8fabe0531897a4bf2903ee14335 an IDC Script and information about the firmware] which was recovered from xboxhacker.net / old forum posts.
=== Hard Drive ===
{| class="wikitable
|-
! Revision
! Drive Manufacturer
! Drive Model Number
! Capacity
|-
| 1.0
| Seagate
| ST310211A
| 10G
|-
| 1.0 (XB:2001-10-26 FF=02)
| Western Digital
| WD80EB-00CGH0
| 8G
|-
| 1.1 (XB:2001-10-29 FF=03)
| Western Digital
| WD80EB-28CGH1
| 8G
|-
| 1.2
| Western Digital
| WD80EB-28DFH2
| 8G
|-
| 1.3+
| Seagate
| ST10014ACE
| 10G
|}
=== Video encoder ===
{| class="wikitable"
! scope="col" | Video Chip
! scope="col" | Revision
|-
| Conexant || 1.0, 1.1, 1.2, 1.3
|-
| Focus || 1.4, 1.5
|-
| Xcalibur || 1.6
|}
=== EEPROM ===
{| class="wikitable"
! Xbox Model
! Manufacturer
! Model
|-
| 1.4 (Others?)
| Catalyst
| CAT24WC02J
|}
=== MCPX Version ===
{| class="wikitable"
! scope="col" | MCPX Version
! scope="col" | Revision
|-
| 1.0 || 1.0
|-
| 1.1 || 1.1 - 1.6
|}
=== BIOS Version ===
{| class="wikitable"
! scope="col" | Kernel Version
! scope="col" | Revision
|-
| 3944, 4034, 4036, 4627 || 1.0
|-
| 4817, 4972 || 1.1
|-
| 5101, 5713 || 1.2 - 1.5
|-
| 5838 || 1.6
|}
== References ==
* [http://www.informit.com/articles/article.aspx?p=367210&seqNum=2 InformIT Methods of Identification]
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]
99d056fe24479d805d0e5a0331ee66ac02a1b514
XPR
0
3991
7333
6795
2023-09-22T03:17:02Z
QuantX
2552
Complete rewrite based on my reverse engineering of the XPR0 format as used by Steel Battalion and Steel Battalion: Line of Contact
wikitext
text/x-wiki
'''XPR''' probably stands for '''Xbox Packed Resource'''. It's a structure and file-format used by the [[Microsoft XDK]].
It is being used in parts of [[XAPI]].
XPRs can store a variety of different data types that are useful for Xbox D3D.
XPRs are storing data similar to internal structures in the D3D driver. So D3D has mechanisms to simply load such resources into D3D objects (by moving them into GPU accessible memory).
An XPR header consists of a number of resource entries which each look something like this{{FIXME|Incomplete}}:
<pre>
struct {
union {
uint32_t resource_type; // Type information and who "owns" this resource
struct {
uint32_t ref_count:16; // (lowest bits)
uint32_t type:3;
uint32_t unk3:13; // (highest bits)
};
};
uint32_t data; // Offset of this resource's data in the file
uint32_t unknown; // Always zero
union {
struct XPR_Vertexbuffer; // Vertexbuffer (type 0x0)
...
} XPR_Vertexbuffer;
struct { // Indexbuffer (type 0x1)
...
} XPR_Indexbuffer;
struct { // Unknown (type 0x2)
...
} ...;
struct { // Unknown (type 0x3)
...
} ...;
struct { // Texture (type 0x4)
...;
} XPR_Texture;
struct { // Unknown (type 0x5)
...
} ...;
struct { // Unknown (type 0x6)
...
} ...;
struct { // Unknown (type 0x7)
...
} ...;
};
} XPR_Resource;
</pre>
The XPR header as a whole looks like this:
<pre>
union {
struct {
char magic[4]; // Always "XPR0" / 0x30525058
uint32_t size; // Size of XPR (including magic and this field)
uint32_t header_size; // Size of this header rounded up to the nearest 2048 byte boundary
XPR_Resource resources[]; // An array of XPR_Resource entries
uint32_t last_resource; // Always 0xFFFFFFFF
};
uint8_t pad[XPR.header_size]; // Padded with 0xAD bytes
} XPR;
</pre>
The headers are then followed by the resource data.
----
Texture data can be stored in a variety of hardware defined formats as specified by the architecture of the NV2A GPU.
The format used, along with other information such as width, height, depth, and mipmap levels is stored in the resource header for the texture.
The format for an XPR texture resource is as follows:
<pre>
struct {
union {
uint32_t gpu; // This 32-bit value is placed in the NV097_SET_TEXTURE_FORMAT GPU register
struct {
uint32_t dma : 4; (lowest bits)
uint32_t dimensions : 4; // Is this a 1D, 2D, or 3D texture
uint32_t format : 8; // The format of the texture data (see the table below)
uint32_t levels : 4; // Number of mipmap levels
uint32_t width : 4; // Width of the texture in the following format: actual_width = (1 << width)
uint32_t height : 4; // Height of the texture in the following format: actual_height = (1 << height)
uint32_t depth: 4; (highest bits) // Depth of the texture (for 3D textures) in the following format: actual_depth = (1 << depth)
};
};
union {
uint32_t size; // Describes the size of a texture who's dimensions are not a power-of-2
struct {
uint32_t width : 12; (lowest bits) // The width of the texture in the following format: actual_width = width + 1
uint32_t height : 12; // The height of the texture in the following format: actual_height = height + 1
uint32_t depth : 8; (highest bits) // The depth of the texture (for 3D textures) in the following format: actual_depth = depth + 1
}
};
} XPR_Texture;
</pre>
For textures that use arbitrary dimensions the width, height, and depth attributes of the gpu field should be zero. For textures such as DXT that use power-of-2 dimensions the size field should be zero.
The following as a list of texture formats which can be used for the format attribute of the gpu field:
<pre>
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A1R5G5B5 0x02
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_X1R5G5B5 0x03
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A4R4G4B4 0x04
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_R5G6B5 0x05
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A8R8G8B8 0x06
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_X8R8G8B8 0x07
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_I8_A8R8G8B8 0x0B
NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT1_A1R5G5B5 0x0C
NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT23_A8R8G8B8 0x0E
NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT45_A8R8G8B8 0x0F
NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_R5G6B5 0x11
NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8R8G8B8 0x12
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A8 0x19
NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_X8R8G8B8 0x1E
NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_DEPTH_Y16_FIXED 0x30
NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A8B8G8R8 0x3A
NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8B8G8R8 0x3F
</pre>
f2496dd1c63ee31bf02b94c9ded45e5ea9d46662
Motherboard
0
3756
7336
7294
2023-10-01T04:46:32Z
Ryzee119
2519
Add TUSB2046B errata note
wikitext
text/x-wiki
For a list of differences between these mainboards, also see [[Hardware Revisions]].
== Xbox 1.0 ==
* [https://docs.google.com/spreadsheets/d/1oT4OtE95sguxA5KZrlwC_XEF3nlpzrql1ESycBGPtDA/edit#gid=0 Some measurements of passive components by Redherring32 (The Fish)]{{FIXME|reason=Taken from https://discordapp.com/channels/428359196719972353/428359434230693899/592363537343447040}}
[[File:Xbox-Motherboard-BR.jpg|400px|thumb|right|Xbox Version 1.0 Motherboard]]
The following table is based on an Xbox 1.0{{citation needed}} retail board.
{| class="wikitable"
!| Device
! Loc.
! Part Number
! Manufacture
! Description
|-
| U2D1
| D-2
| Pentium III (Coppermine)
| Intel
| 733MHz CPU 133MHz FSB 16Kb L1 cache 128Kb L2 cache
|-
| U2T1
| T-2
| SC1186
| Semtech
| Programmable Synchronous DC/DC Converter
|-
| U3B1
| B-3
| LM358D
| Phillips
| Dual Operational Amplifier
|-
| U3B2
| B-4
| XGPU
| nVidia
| Graphics Processing Unit
|-
| U3R1
| R-3
| CY23S05
| Cypress
| Low-Cost 3.3V Spread Aware Zero Delay Buffer
|-
| U3T1
| T-3
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U4B1
| B-4
| CX25871
| Conexant
| Digital Video Encoder (same pinout as Bt868/869)
|-
| U4G1
| G-5
| SC1110CS
| Semtech
| Sink and Source DC/DC Controller for Termination Power Supply
|-
| U5F1
| F-5
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6A1
| A-6
| LF353
| Texas Instruments
| Dual General-Purpose JFET-input Operational Amplifier
|-
| U6B1
| B-6
| WM9709
| Wolfson Micro
| High-quality stereo audio DAC (Digital to Analog converter)
|-
| U6D1
| D-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U6E1
| E-6
| MCPX
| nVidia
| Media and Communications Processor
|-
| U6F1
| F-6
| ADM1032
| Analog Devices
| +-1°C Remote and Local System Temperature Monitor
|-
| U6N1
| N-6
| K4D263238M
| Samsung
| 1Mx32Bitx4 DDR Synchronous RAM
|-
| U7B1
| B-7
| 1893AF
| Integrated Circuit Systems
| 3.3V 10Base-T/100Base-TX Integrated PHYceiver
|-
| U7B2
| B-7
| PIC16LC63A-04/S0
| Microchip
| Low voltage 8bit CMOS microcontroller with A/D converter
|-
| U7C1
| C-7
| 388R
| Integrated Circuit Systems
| Quad PLL Quick Turn Clock Synthesizer
|-
| U7C2
| C-7
| BR24C02
| Rohm
| I2C BUS compatible Serial EEPROM
|-
| U7C3
| C-7
| 331M
| Integrated Circuit Systems
| Single Output Clock
|-
| U7D1
| D-7
| M29F080A
| ST Microelectronics
| 8 MBit (1MB X8, Uniform block) single supply flash memory
|-
| U7P1
| P-7
| <empty>
| <n/a>
| <n/a>
|}
=== USB Daughterboard ===
* [https://github.com/Teufelchen1/XBOX-USB-HUB Homemade PCB remake by Teufelchen]
[[File:USB_Daughterboard_front.png|100px|thumb|right|Xbox Version 1.0 USB Daughterboard]]
{| class="wikitable"
!| Device
! Part Number
! Manufacture
! Description
|-
| U2
| TUSB2046B
| Texas Instruments
| 4-Port Hub for USB w/Optional Serial EEPROM Interface
|}
Part TUSB2046B has the following errata published by the Manufacturer (Ref https://www.ti.com/lit/pdf/sllz051). This is handled by the XDK software driver:
TI has found that the TUSB2046B (also TUSB2077A and TUSB2036) has a slight violation in the manner that it determines the intended speed of an attached downstream device.
By the intent of the USB specification (shown in Figure 7-19), the speed should be determined by sampling the DP or DM line following a 100ms debounce interval after either signal (DP or DM) first crosses the VIH threshold. The TUSB2046B (TUSB2077A, TUSB2036) actually samples the speed at the first VIH crossing and latches this value. This issue has only been observed recently with newer devices that either drive DM high or show excessive ringing during the initial connection, hence causing the speed detection to be seen as slow speed by the TUSB2046B (TUSB2077A, TUSB2036). Note that this device is used extensively in the USB 1.1 Gold tree suite, and this issue was never revealed, further pointing to the fact that some newer devices have less control on DM than previous devices, although this is allowed by the USB specification. TI has no planned fix in the pipeline but wants users to be aware of this issue, which can easily be avoided by guaranteeing that DP be asserted high before DM. In the event that a false low-speed detection is observed, the situation can be resolved by performing a CLEAR_PORT_FEATURE(PORT_ENABLE) followed by a RESET_PORT in the software driver, assuming both DP and DM are now stable.
== Xbox 1.1 ==
* [https://web.archive.org/web/20180210173816/http://diy.sickmods.net/Tutorials/Xbox1/Hi-Res_Scans/ PCB scan by SICKmods]{{FIXME|reason=Should live in some repo or something; we also have permission to this; https://discordapp.com/channels/428359196719972353/428359434230693899/561462101214756876 / https://media.discordapp.net/attachments/428359434230693899/561462101214756874/image0.png}}
{{FIXME}}
== Xbox 1.2 ==
{{FIXME}}
== Xbox 1.3 ==
{{FIXME}}
== Xbox 1.4 ==
* [https://drive.google.com/drive/folders/1dmMwJkFyu6Tw6SPgfJd_9oZ6wLzpNlmX PCB scan by LoveMHz]{{FIXME|reason=Should live in some repo or something}}
{{FIXME}}
== Xbox 1.5 ==
{{FIXME}}
== Xbox 1.6 ==
* [https://web.archive.org/web/20180210173816/http://diy.sickmods.net/Tutorials/Xbox1/Hi-Res_Scans/ PCB scan by SICKmods]{{FIXME|reason=Should live in some repo or something; we also have permission to this; https://discordapp.com/channels/428359196719972353/428359434230693899/561462101214756876 / https://media.discordapp.net/attachments/428359434230693899/561462101214756874/image0.png}}
{{FIXME}}
== References ==
* [https://web.archive.org/web/20040826151041/http://console-dev.com:80/IC.htm http://console-dev.com:80/IC.htm Documentation by PiXEL8]
d3e7847bbd897eeb8769703713480ec6e315cbec
Resources
0
3
7338
7295
2023-10-25T14:06:04Z
Thrimbor
2531
Fix dead links
wikitext
text/x-wiki
== Xbox Post-Mortems by developers ==
=== Xbox Launch ===
* GDC2002: [https://www.powershow.com/download/6f1ff7-NmE2O/Xbox_Launch_Lessons_Learned_powerpoint_ppt_presentation Xbox Launch: Lessons Learned] ([https://www.gdcvault.com/play/1022522/Xbox-Launch-Lessons Audio])
=== Post processing ===
* CEDEC2002: [https://web.archive.org/web/20031212044938/http://www.daionet.gr.jp/~masa/column/2002-09-22.html DOUBLE-S.T.E.A.L techniques] ''(Japanese)''
* GDC2003: [https://web.archive.org/web/20031212140633/http://www.daionet.gr.jp/~masa/column/2003-03-21.html Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless)] ''(English)''
=== HDR rendering ===
* GDC2004: [https://web.archive.org/web/20060404103630/http://www.daionet.gr.jp/~masa/column/2004-04-04.html Practical Implementation of High Dynamic Range Rendering]
=== Deferred Shading ===
* https://web.archive.org/web/20201024153643/https://sites.google.com/site/richgel99/index#TOC-Shrek-Xbox-and-Deferred-Shading
* https://web.archive.org/web/20201024153427/https://sites.google.com/site/richgel99/home
* https://web.archive.org/web/20201123202956/https://sites.google.com/site/richgel99/home/xbox-1-g-buffer-attribute-packing-pixel-shader
* https://web.archive.org/web/20171008031141/http://www.tenacioussoftware.com/gdc_2004_deferred_shading.ppt
== Random resources about Xbox hacking ==
* [https://events.ccc.de/congress/2005/fahrplan/attachments/591-paper_xbox.pdf Michael Steils Xbox Presentation from C3 in 2005]
* https://media.ccc.de/v/19C3-399-xbox-linux
* https://media.ccc.de/v/22C3-559-en-xbox_hacking
* https://www.youtube.com/watch?v=6fOjGLCctEY
* [http://www.bunniestudios.com/bunnie/proj/anatak/xboxmod.html Bunnies original Xbox page]
* [https://www.nostarch.com/xboxfree Bunnies "Hacking the Xbox" e-book for free]
* [http://web.archive.org/web/20010417064218/ddj.com/articles/2000/0008/0008a/0008a.htm?topic=graphics Article about Xbox Graphics (before release) from Dr. Dobbs]
* [http://www.anandtech.com/show/853 Technical article about the Xbox by AnandTech]
* [https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20video%20and%20slides/DEF%20CON%2030%20-%20Tristan%20Miller%20-%20Reversing%20the%20Original%20Xbox%20Live%20Protocols.mp4 Reversing the Original Xbox Live Protocols] presented by [[User:monocasa]] at DEF CON 30 (2022)
== History ==
* [https://www.youtube.com/watch?v=rUODlNffWmU 3 Xbox Bosses Share Secrets of the Console's Past (Video)]
* [https://www.youtube.com/watch?v=iWQb7LGH71s Xbox Assembly Line Tour (Video)]
* [https://www.youtube.com/watch?v=_gOoI57q72M XBox Oral History Panel with Nick Baker, Todd Holmdahl, and Albert Penello (Video)]
* [https://www.youtube.com/watch?v=2VCb-y7MC5U?t=1248 Behind the Code - Interview with Nick Baker (Video) intresting xbox part starts 20:48]
== Background knowledge about related topics ==
=== Graphics programming ===
* Meltdown 2001 (Microsoft Game development conference): [https://web.archive.org/web/20060203201117/https://www.microsoft.com/mscorp/corpevents/meltdown2001/presentations.asp Presentation slides]
* GDC2001: [http://developer.download.nvidia.com/assets/gamedev/docs/GDC2K1_DX8_Pixel_Shaders.pdf DirectX8 Pixel Shaders]
* [https://web.archive.org/web/20200130052343/http://download.nvidia.com/developer/Papers/ Papers by nvidia from Xbox era]
* [https://web.archive.org/web/20191214222749/http://download.nvidia.com/developer/presentations/ Presentation slides by nvidia from Xbox era]
* [https://web.archive.org/web/20200130053050/http://download.nvidia.com/developer/movies/ Presentation recordings by nvidia from Xbox era]
* [https://web.archive.org/web/20191214215356/http://download.nvidia.com/developer/NVTextureSuite/ Texturing tools by nvidia from Xbox era]
* [https://web.archive.org/web/20191214215706/http://download.nvidia.com/developer/Tools/ Tools by nvidia from Xbox era]
* https://web.archive.org/web/20191214215240/http://download.nvidia.com/developer/Third_Party/
* http://iquilezles.org/www/index.htm
* https://web.archive.org/web/20150408045127/http://freespace.virgin.net/hugo.elias/
* http://www.mvps.org/directx/indexes/
* https://www.gdcvault.com/play/247/CRYSIS-Next-Gen ''(Contains some parts which are also applicable to original Xbox)''
* [https://www.valvesoftware.com/en/publications Publications by Valve Software]
* http://graphics.uni-konstanz.de/publikationen/Luft2006ImageEnhancementUnsharp/Luft2006ImageEnhancementUnsharp.pdf
* [https://web.archive.org/web/20090518092325/http://www.daionet.gr.jp:80/~masa/column/index.html Masa's Column (DOUBLE-S.T.E.A.L / Wrecked developer)]
* [https://fgiesen.wordpress.com/ Blog by ryg]
* [http://filmicworlds.com/blog/ Filmic Worlds]
* [https://web.archive.org/web/20191208134031/https://gpuopen.com/archive/gamescgi/cubemapgen/ AMD CubeMapGen tool for mipmapping cubemaps]
8c3b291daf777bcc068dc2a061a71cf7f528b424